Post

Video_dji

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
}
Esta postagem está licenciada sob CC BY 4.0 pelo autor.