Video_dji
O Problema
Eu uso processador intel de 6ª geração que tem suporte HVEC de 8bits. Que é profissional gera vídeo com DJI HVEC 10bits. A DJI cria no arquivo 3 trilhas extras com meta-data, alguns players não sabem tratar isso.
djmd(DJI Metadata / Gyro Data) É a trilha mais importante para pós-processamento. Ela registra em tempo real (geralmente a 1000Hz ou mais) os dados do Giroscópio e do Acelerômetro da câmera.Para que serve: Softwares como o Gyroflow ou o Catalyst Browse usam esses dados para estabilizar o vídeo matematicamente após a gravação.
Impacto da remoção: Você não conseguirá usar estabilização de software baseada em sensores nesse arquivo específico.
dbgi(Debug Information) Contém informações de diagnóstico da câmera e logs internos de processamento do chip da Osmo Pocket 3.- Para que serve: Uso exclusivo da engenharia da DJI para analisar falhas ou comportamento do firmware.
- Impacto da remoção: Nenhum para o usuário final. É puro “lixo” digital em arquivos de uso cotidiano.
tmcd(Timecode) Registra o Timecode (relógio de precisão) que marca a hora, minuto, segundo e quadro exato da gravação.- Para que serve: Essencial em produções profissionais para sincronizar múltiplas câmeras (Multicam) ou áudio gravado externamente em gravadores separados.
- Impacto da remoção: Se você edita apenas um vídeo por vez ou sincroniza áudio “no olho/palmas”, não sentirá falta.
Essa descrição veio de IA e não foi confirmada.
A câmera DJI cria um arquivo com mesmo nome e extensão LRF que tem resolução menor e H.264 8bits que minha placa de vídeo integrada consegue tratar e posso usar ele como “proxy” no editor de vídeo. Mas mesmo esse LRF tem a trilha de meta-data e meu player padrão não abre.
A Solução
Poderia trocar o player? Sim, mas ai onde fica a graça de programar.
Resolvi apagar o meta-data do LRF e extrair o meta-data do arquivo maior para arquivo separado.
FFMPEG
Removendo os meta-dados do vídeo
Não consegui mesclar novamente os metadados em MP4 com ffmpeg. Então aqui eu salvo os dados a parte antes de excluir, mas não sei tornar eles uteis novamente. Usando container MKV parece mixar, mas não sei validar.
Salva os dados
1
2
ffmpeg -i "SEU_VIDEO_DJI.MP4" \
-map 0:d? -c copy -f nut "SEU_VIDEO_DJI_metadata.nut"
Apaga os dados
1
2
3
ffmpeg -i "SEU_VIDEO_DJI.MP4" \
-map 0:v -map 0:a -map_metadata 0 -c copy \
-f mp4 -movflags +faststart "SEU_VIDEO_DJI_LIMPO.MP4"
Uma outra opção é excluir os LRF e criar novos arquivos.
1
2
3
4
5
6
ffmpeg -vaapi_device /dev/dri/renderD128 -i SEU_VIDEO_DJI.MP4 \
-map 0:0 -filter:v:0 "format=nv12,hwupload,scale_vaapi=w=720:h=1280" \
-c:v:0 h264_vaapi -qp 24 -map 0:1 -c:a aac -b:a 320k \
-map 0:5 -c:v:1 copy -disposition:v:1 attached_pic \
-movflags +faststart \
SEU_VIDEO_DJI_PROXY.MP4
Nautilus
Sou fã de terminal mas vou acabar esquecendo o nome do script que fiz. Para resolver essa questão criei atalhos de script Nautilus
Adicionei ao ffmpeg alguns argumentos para silenciar o comando ` -y -hide_banner -loglevel error `
~/.local/share/nautilus/scripts/Limpa_DJI
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/bash
for f in "$@"; do
# Ignora se o arquivo já for um proxy para não entrar em loop
if [[ "$f" == *"_proxy.MP4" ]]; then continue; fi
proxy="${f%.*}_proxy.MP4"
lrf="${f%.*}.LRF"
ffmpeg -vaapi_device /dev/dri/renderD128 -i "$f" \
-map 0:v:0 -filter:v:0 "format=nv12,hwupload,scale_vaapi=w=720:h=1280" -c:v:0 h264_vaapi -qp 24 \
-map 0:a:0 -c:a aac -b:a 320k \
-map 0:v:1? -c:v:1 copy -disposition:v:1 attached_pic \
-movflags +faststart -y "$proxy"
done
zenity --info --title="DJI Cleanup" --text="Processamento de arquivos concluído." --icon=video-x-generic
Bash
No bashrc:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
dji_proxy_clean() {
for f in "$@"; do
# Ignora se o arquivo já for um proxy para não entrar em loop
if [[ "$f" == *"_proxy.mp4" ]]; then continue; fi
proxy="${f%.*}_proxy.mp4"
lrf="${f%.*}.LRF"
echo "--------------------------------------------"
echo "Processando: $f"
# Mudanças aqui:
# -map 0:v:0 (pega o primeiro vídeo/filme)
# -map 0:a:0 (pega o primeiro áudio)
# -map 0:v:1? (pega o segundo vídeo - a capa - se existir)
ffmpeg -vaapi_device /dev/dri/renderD128 -i "$f" \
-map 0:v:0 -filter:v:0 "format=nv12,hwupload,scale_vaapi=w=720:h=1280" -c:v:0 h264_vaapi -qp 24 \
-map 0:a:0 -c:a aac -b:a 320k \
-map 0:v:1? -c:v:1 copy -disposition:v:1 attached_pic \
-movflags +faststart -y "$proxy"
if [ $? -eq 0 ]; then
echo "Sucesso: $proxy criado."
if [ -f "$lrf" ]; then
rm -v "$lrf"
fi
else
echo "Erro ao processar $f."
fi
done
}