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.
fuente
Respuestas:
La mejor manera de hacer esto actualmente es con el concat demuxer . Primero, crea un archivo llamado
inputs.txt
formateado como tal:Luego, simplemente ejecute este comando ffmpeg:
Ver también concatenación en
ffmpeg
Preguntas más frecuentes .Mantengo lo siguiente aquí para el beneficio de cualquiera que use versiones anteriores de ffmpeg.
Las últimas versiones de ffmpeg pueden hacer esto: primero tendrá que transformar los archivos en flujos de transporte mpeg (bastante luz de procesador, ya que solo está cambiando el formato del contenedor):
Si eso produce un error sobre h264, es posible que deba usar:
Tendrás que hacer esto por separado con cada archivo de entrada. Para concatenar los archivos juntos, use:
Si eso produce un error sobre aac, es posible que deba usar
Si su sistema admite canalizaciones con nombre, puede hacerlo sin crear archivos intermedios.
Tendrás que hacer lo siguiente en tres terminales virtuales separadas:
Si ya existe output.mp4, el tercer ffmpeg le preguntará si desea sobrescribirlo, pero lo hará. Después de haber accedido a los FIFOs. , y esto hará que los primeros en ffmpegs se cierren. Así que asegúrese de elegir un nombre no utilizado para su archivo de salida.
Es posible que esto no funcione si sus archivos de entrada son diferentes. Creo que las diferencias en la velocidad de bits están bien, pero el tamaño del cuadro, la velocidad del cuadro, etc., deben coincidir.
fuente
*** THIS PROGRAM IS DEPRECATED *** This program is only provided for compatibility and will be removed in a future release. Please use avconv instead.
Es un mensaje que veo ahora en funcionamiento.ffmpeg
avconv
Para mp4, la única solución de trabajo que encontré fue con MP4Box del paquete gpac
o comando es
con mencoder y avconv no pude hacerlo funcionar :-(
fuente
Gracias por el script dvo. Fue un gran punto de partida para mí. No tuve ningún problema con el uso de canalizaciones con nombre, así que adapté la secuencia de comandos para usarlas en su lugar. Además lo arreglé para trabajar con nombres de archivos con espacios en ellos. La salida a las canalizaciones con nombre no "va" hasta que comience a leerlas, por lo tanto, es necesario hacer un fondo de las tareas de remux iniciales con un & amp; Antes de la llamada final a avconv. Además, no olvides usar la copia -c, o terminarás recodificando todo el lote.
fuente
En una Mac (macOS 10.13 High Sierra) usé lo siguiente con éxito:
Reordene lo anterior de manera similar si es necesario (tenga en cuenta que se eliminó el ./ - la ruta estaba causando que ffmpeg arrojara el error de nombre de archivo no seguro).
Luego tuve que eliminar el códec y la tasa de bits especificada para que el MacPorts ffmpeg predeterminado me gustara:
fuente
Gracias evilsoup; Aquí hay un pequeño script para automatizar el proceso, usando el más reciente
avconv
.Por cierto, las tuberías con nombre no funcionaron para mí (la salida se atascó).
fuente
Han disfrutado de gran éxito con
Es posible que deba reordenar mylist.txt ligeramente
ffmpeg versión 2.2.3
fuente