Quiero unir dos archivos mp4 para crear uno solo. Las secuencias de video están codificadas en h264 y el audio en aac. No puedo volver a codificar los videos a otro formato debido a razones computacionales. Además, no puedo usar ningún programa GUI, todo el procesamiento debe realizarse con las utilidades de línea de comandos de Linux. FFmpeg no puede hacer esto para archivos mpeg4, así que en su lugar usé MP4Box:
MP4Box -add video1.mp4 -cat video2.mp4 newvideo.mp4
Desafortunadamente, el audio se mezcla todo. Pensé que el problema era que el audio estaba en aac, así que lo transcodifiqué en mp3 y usé nuevamente MP4Box. En este caso, el audio está bien para la primera mitad de newvideo.mp4
(correspondiente a video1.mp4
) pero entonces no hay audio y tampoco puedo navegar en el video.
Mi siguiente pensamiento fue que las secuencias de audio y video tenían algunas pequeñas discrepancias en sus longitudes que debería solucionar. Así que para cada video de entrada, dividí los flujos de video y audio y luego los uní con la opción -shortest en FFmpeg.
Así, para el primer video corrí:
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
Similarmente para el segundo video y luego usé MP4Box como anteriormente. Desafortunadamente esto tampoco funcionó. El único éxito que tuve fue cuando me uní a las secuencias de video por separado (es decir, videostream1.mp4 y videostream2.mp4) y las secuencias de audio (es decir, audiostream1.m4a y audiostream2.m4a) y luego uní el video y el audio en un archivo final. Sin embargo, la sincronización se pierde para la segunda mitad del video. Concretamente, hay un retraso de 1 segundo de audio y video. Cualquier sugerencia es realmente bienvenida.