¿Cómo unir archivos de video desde la terminal?


9

He intentado avidemux2_cli, mencoder, ffmpeg, cat .. Pero esto no siempre funciona (con la mayoría de las veces el error es que el códec de audio no es el mismo) Tal vez puse opciones incorrectas en los comandos.

Entonces los comandos:

cat Sample.avi rrr.avi > complete.avi
ffmpeg -i Sample.avi -i output.avi -vcodec copy -acodec copy complete.avi
mencoder -ovc lavc -oac copy Sample.avi rrr.avi -o complete.avi
avidemux2_cli --audio-codec copy --video-codec copy --output-format avi --load Sample.avi -append output.avi --save video.avi

El problema del gato es que no muestra error pero no funciona siempre ... Al igual que complete.avi será exactamente igual con Sample.avi

Fmmpeg no hace nada. Complete.avi es siempre el mismo con Sample.avi

Error de Mencoder: todos los archivos deben tener códec de audio y formato idénticos para -oac copy. Entonces complete.avi es lo mismo con Sample.avi

avidemux2_cli no hay ningún error, pero complete.avi vuelve a ser el mismo con Sample.avi ..

Para resumir, todos complete.avi son iguales con Sample.avi .. Y el problema es que no tienen el mismo códec de audio (dudo). ¿Alguna idea?


1
Creo que es necesario cambiar el códec de vídeo y codec de audio de archivos de entrada en los mismos códecs, si usted quiere combinar dos vídeos de forma segura,
vine_user

¿Y cómo puedo hacerlo?
Leon Vitanos

Puede usar mencodercon la opción -ovc y la opción -oac. Ver: mplayerhq.hu/DOCS/HTML/en/menc-feat-selecting-codec.html
vine_user

Respuestas:


10

Si desea combinar dos videos de forma segura, debe cambiar el códec de video y el de audio de los archivos de entrada a los mismos códecs.

Por ejemplo, usando xvid (códec de video) y mp3lame (códec de audio):

sudo apt-get install mencoder libxvidcore4 libmp3lame0

Puedes codificar los videos de entrada con los siguientes comandos:

mencoder -ovc xvid -oac mp3lame -xvidencopts bitrate=1000 first.avi -o video1.avi
mencoder -ovc xvid -oac mp3lame -xvidencopts bitrate=1000 second.avi -o video2.avi

Para que coincida con sus videos, puede cambiar las opciones "bitrate", etc. (y también los códecs).

Si los nombres de video codificados son "video1.avi" y "video2.avi", y el nombre del video de salida es "join-video.avi",

mencoder -ovc copy -oac mp3lame video1.avi video2.avi -o joined-video.avi 

Con este comando, puede crear el archivo de video unido.


2
Solo pensé en reforzar que el nombre de esta utilidad es mencoder( es decir, Media ENcoder). Muchas personas se atascan al escribir accidentalmente memcoder.
Val

¿No tienen que coincidir los tamaños de los cuadros?
Élder Geek

4

Tuve que unir tres piezas de video con códecs idénticos. Leyendo las respuestas anteriores me las arreglé para hacer esto:

mencoder -ovc copy -oac faac 01.mp4 02.mp4 03.mp4 -o output.mp4

¡Mucho más rápido y sencillo que Openshot!

Primero probé la opción '-oac copy', pero parece que el códec de audio en mis videos no lo permite. Recibí un mensaje de error que recomienda '-oac pcm'. Sin embargo, el códec pcm no es una buena opción: el archivo resultante es muy grande y 2/3 es audio sin comprimir.

Espero que esto ayude


2
MEncoder svn r34540 (Ubuntu), construido con gcc-4.7 (C) 2000-2012 MPlayer Team MPlayer fue compilado sin libfaac. Ver README o DOCS.
Philippe Gachoud

1

Una solución que encontré aquí me ayudó a unir sin pérdida dos archivos mp4:

sudo apt-get install gpac
MP4Box -cat part1.mp4 -cat part2.mp4 -new joinedfile.mp4

Intenté usar Avidemux, pero tuve problemas con el sonido en el video combinado.


1

Sus archivos no se unirán correctamente porque algo no coincide.

Al igual que muchos otros, tuve problemas con la sincronización de sonido en los videos combinados. y aunque MP4Box funciona bien si los clips tienen especificaciones idénticas, en algunos casos me sorprendería el "No se encontró una pista de destino adecuada, creando una nueva", en cuyo caso Totem (también conocido como Videos) no reproduciría ese segmento en el archivo unido Después de algunas pruebas y errores e investigaciones adicionales, he desarrollado el siguiente método para lidiar con la unión de videos que hasta ahora ha funcionado siempre con una calidad aceptable (para mí).

Si los tamaños de los cuadros no coinciden (errores de unión relacionados con las pistas de video):

Normalice el video sin interrumpir el audio (-c: una copia) estableciendo restricciones (divisibles entre 8 para obtener la máxima compatibilidad de códec) para segmentos incomparables

Comandos de ejemplo

width=856

height=480

avconv -i input.mp4 -filter:v "scale=iw*min($width/iw\,$height/ih):ih*min($width/iw\,$height/ih), pad=$width:$height:($width-iw*min($width/iw\,$height/ih))/2:($height-ih*min($width/iw\,$height/ih))/2" -c:a copy output.mp4

Si el audio no coincide (errores de unión relacionados con las pistas de audio):

Normalizar audio

Procese el audio sin interrumpir el video (copia c: v) para que todos los clips coincidan con el códec, la frecuencia y la velocidad de bits deseados con c: un códec -ar frecuencia como -ar 48000 y una velocidad de bits con b: a 128k para estéreo (64K por canal parece un buen objetivo) o lo que coincida

Ejemplo: avconv -i input.mp4 -c:v copy -c:a libmp3lame -ar 48000 b:a 128k output.mp4(tenga en cuenta que libmp3lame es un códec para audio mp3) Puede obtener una lista de codificadores compatibles con avconv emitiendo el comando avconv -codecso restringiendo las cosas a un código específico, avconv -codecs|grep *codecname*por ejemploavconv -codecs|grep mp3

Ahora que hemos normalizado los archivos, podemos unirnos a ellos. En este ejemplo, uniré los archivos con MP4Box. Si no lo tiene, puede obtenerlo emitiendo el comandosudo apt-get install gpac

Unir los archivos con el comando MP4Box file1.mp4 -cat file2.mp4 -cat file3.mp4 -cat file4.mp4 -out joinedfile.mp4(tenga en cuenta que no hay cat antes del primer archivo y cada archivo adicional está precedido por -cat y el archivo de destino está precedido por -out)

Si usa MP4Box (recomendado para MP4) para unirse, puede encontrar que tiene que procesar todos los clips con avconv si las especificaciones parecen coincidir o no para evitar el error "No se encontró una pista de destino adecuada, creando una nueva (escriba vide)"

Nota: He descubierto que Avidemux tiene problemas con los videos codificados usando archivos H.264 / AVC (por tótem) debido a los cuadros B como referencia. Esto parece dar como resultado que el audio no esté sincronizado cuando se une, incluso cuando elige copiar audio y video sin remux. Se bloquea cuando no se elige el modo seguro y no está sincronizado cuando se usa el modo seguro

Fuentes:

/superuser/547296/resizing-videos-with-ffmpeg-avconv-to-fit-into-static-sized-player

/programming/20703160/problems-with-setting-constant-bitrate-by-using-avconv

https://trac.ffmpeg.org/wiki/Encode/AAC#fdk_cbr

Nota: Hasta donde yo sé, otros formatos (contenedores) tienen restricciones similares para igualar el tamaño de cuadro y las velocidades de audio, por lo que esto también puede funcionar para avi si intenta unirse a través de cat o mencoder después de normalizar video y audio .

Opcional: use Handbrake para volver a codificar el archivo unido para un tamaño más pequeño si lo desea con una velocidad de fotogramas variable y una configuración de calidad constante de 25 (configuraciones sugeridas: ajuste según sea necesario para sus expectativas de material y calidad)


1

Debería escribir así:

avidemux2_cli --audio-codec copy --video-codec copy --output-format avi --load Sample.avi --append output.avi --save video.avi

Si desea agregar más archivos:

avidemux2_cli --audio-codec copy --video-codec copy --output-format avi --load Sample.avi --append output1.avi --append output2.avi --append output3.avi --save video.avi

1

Pude usar el VLC Media Player para unir / fusionar múltiples archivos de video. VLC se puede descargar desde el software de Ubuntu o puede instalarlo desde un terminal presionando Ctrl+ Alt+ Ty escribiendo:

sudo apt update
sudo apt install vlc

Una vez que se instala VLC, abra una terminal en la carpeta con los archivos de video y luego escriba:

vlc InFile1.mp4 InFile2.mp4 --sout "#gather:std{access=file,dst=OutFile.mp4}" --sout-keep

Esto abre la interfaz gráfica de usuario de VLC y puede cerrarla una vez que los archivos se unen / fusionan. Puedes encontrar más información aquí .

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.