Sincronizando áudio e vídeo usando MP4Box / ffmpeg para concatenar arquivos

4

Eu tenho dois arquivos MPEG-4 codificados em H.264 que eu preciso concatenar. Eu tenho usado o MP4Box para esta tarefa, primeiro assegurando que os arquivos são codificados de forma idêntica (até fui tão longe a ponto de comparar a saída do h264_parse em suas trilhas de vídeo) e então concatenando com este comando:

MP4Box -cat file1.mp4 -cat file2.mp4 output_file.mp4

Isso funciona e o arquivo de saída pode ser reproduzido, mas na reprodução em Quicktime ou VLC, o áudio do segundo vídeo é iniciado muito cedo, tornando toda a segunda parte do arquivo concatenado fora de sincronia.

Eu tentei reencodificar a saída por meio do ffmpeg com -vcodec copy e -acodec copy , mas o problema de sincronização persiste.

Eu também tentei converter primeiro para o formato MPEG-2, concatenando com um simples cat file1.mpg file2.mpg > output.mpg e reencoding o resultado com ffmpeg. Isso foi ainda pior.

Eu sei que posso passar comandos para o MP4Box para ajustar a hora de início da faixa de áudio, mas estou tentando fazer isso programaticamente para qualquer vídeo de entrada (na mesma codificação, é claro). Estou procurando possíveis soluções que não precisem de intervenção manual / ajustes manuais. Ou, pelo menos, uma compreensão do que está acontecendo para fazer com que a segunda parte do vídeo concatenado fique fora de sincronia.

    
por Jesse L 04.09.2009 / 20:01

3 respostas

7

Eu enfrentei o mesmo problema. Para a sincronização correta, você precisa escrever o comando MP4Box da seguinte forma:

MP4Box -add file1.mp4 -cat file2.mp4 -new output_file.mp4

em vez de usar -cat use -add antes do primeiro vídeo. As opções restantes estão corretas e você pode colocar -new antes do parâmetro de vídeo de saída.

    
por 28.07.2010 / 10:36
1

Tente usar o contêiner de vídeo Matroskra (MKV).

Primeiramente, você precisa de mkvtoolnix . Faça o download e instale-o, então você precisa acionar o mkvmerge GUI (a menos que você goste de ferramentas de linha de comando, o que é bom para mim - embora você possa querer olhar para a seção de vinculação de arquivos do documentação do mkvmerge ).

Adicione seu primeiro arquivo clicando em "adicionar". Em seguida, clique em "acrescentar" e abra seu segundo arquivo. Definir o arquivo de saída, clique em "Iniciar muxing" na parte inferior e você vai longe!

Se o container não for adequado às suas necessidades, você poderá reencitá-lo ou tentar convertê-lo em algum outro formato ... Embora o MKV seja um recipiente muito bonito!

    
por 04.09.2009 / 21:07
0

Do pacote mkvtoolnix use mkvmerge:

mkvmerge -o "output file" "input file" +"appended file"
    
por 02.08.2012 / 00:04