Como manter o cabeçalho do arquivo de vídeo original no FFmpeg [closed]

1

Estou tentando usar o FFMpeg para fazer algum processamento em meus arquivos de vídeo de entrada, que é então fornecido a um software emulador (um software de pacote) para processamento adicional. O emulador é basicamente um software de pacote. Mas não importa o que seja, o arquivo de vídeo original que funciona está anexado. O criador do arquivo disse que ele usou a ferramenta bento4 para a criação do arquivo. O que é diferente dessa ferramenta do FFmpeg?

O problema é que o emulador pode ler o arquivo de vídeo original, mas quando eu simplesmente uso o comando ffmpeg -i input.video -c copy output.mp4 , enquanto ele deve essencialmente copiar todas as configurações, o emulador não pode ler e processar o novo arquivo.

Aqui está uma cópia do arquivo original .mp4 que funciona bem em o emulador.

Eu usei a ferramenta mediainfo para comparar os detalhes dos dois arquivos e notei que enquanto todas as configurações relacionadas ao codec de vídeo são as mesmas, existem algumas diferenças nos tamanhos dos cabeçalhos que provavelmente estão causando os problemas. Existe alguma maneira de forçar o FFmpeg a manter as informações dos cabeçalhos (além dos codecs)? Ou talvez haja outros problemas? Em qualquer caso, o vídeo de saída não está sendo totalmente o mesmo.

ATUALIZAÇÃO: Eu ainda estou lutando com o problema. Eu olhei para o código do emulador e analisa o MOOV e os cabeçalhos de fragmento para obter informações. Usando o software explorador MP4, percebo no meu arquivo .mp4 gerado, para todo o moof.traf.trun , a duração da amostra é 0, mas na caixa Cabeçalho do Fragmento de Faixa, ele define default_sample_duration para 512. No arquivo de trabalho, não há default_sample_duration e cada amostra individual tem uma duração de tamanho 512. Acho que esse pode ser o problema. Agora, alguma maneira de torná-lo original?

    
por Ariana 17.07.2017 / 17:32

1 resposta

2

Se por cabeçalho, você quer dizer a caixa / átomo MOOV, então o ffmpeg sempre construirá uma nova caixa. Não pode copiar caixas ou o seu conteúdo. O que seu comando faz é dizer ao FFmpeg para demux todos os streams do arquivo original e remocá-los em um novo container.

Você pode ser específico no que seu emulador procura?

    
por 17.07.2017 / 17:50