Quero juntar dois arquivos mp4 para criar um único. Os fluxos de vídeo são codificados em h264 e o áudio em aac. Não consigo recodificar os vídeos para outro formato devido a razões computacionais. Além disso, não posso usar nenhum programa da GUI, todo o processamento deve ser realizado com os utilitários de linha de comando do Linux. O FFmpeg não pode fazer isso para arquivos mpeg4, então usei o MP4Box:
MP4Box -add video1.mp4 -cat video2.mp4 newvideo.mp4
Infelizmente, o áudio fica todo misturado. Eu pensei que o problema era que o áudio estava no aac, então eu o transcodifiquei em mp3 e usei novamente o MP4Box. Nesse caso, o áudio é bom para a primeira metade de newvideo.mp4
(correspondente a video1.mp4
), mas então não há áudio e não posso navegar no vídeo também.
Meu próximo pensamento foi que os fluxos de áudio e vídeo apresentavam pequenas discrepâncias em seus comprimentos que eu deveria corrigir. Assim, para cada vídeo de entrada, dividi os fluxos de vídeo e áudio e os juntei à opção -shortest no FFmpeg.
Assim, para o primeiro vídeo eu corri:
avconv -y -i video1.mp4 -c copy -map 0:0 videostream1.mp4
avconv -y -i video1.mp4 -c copy -map 0:1 audiostream1.m4a
avconv -y -i videostream1.mp4 -i audiostream1.m4a -c copy -shortest video1_aligned.mp4
Da mesma forma, para o segundo vídeo e, em seguida, usou o MP4Box como anteriormente. Infelizmente isso também não funcionou. O único sucesso que tive foi quando ingressei nos fluxos de vídeo separadamente (por exemplo, videostream1.mp4 e videostream2.mp4) e nos fluxos de áudio (como audiostream1.m4a e audiostream2.m4a) e depois ingressei no vídeo e no áudio em um arquivo final. No entanto, a sincronização é perdida na segunda metade do vídeo. Concretamente, há um atraso de 1 segundo de áudio e vídeo. Todas as sugestões são realmente bem-vindas.