Usando trim
y concat
- archivos fuente con diferentes códecs
Para ello, asegúrese de que sus archivos individuales tengan la misma resolución y, idealmente, la misma velocidad de fotogramas y submuestreo de croma, etc. Esto evitará errores o fallas durante la concatenación.
Puede hacer todo de una vez sin dividir el archivo, utilizando los filtros trim
y concat
:
ffmpeg -i edv_g24.mp4 -i short-video.mp4 -filter_complex "\
[0:v]trim=0:10,setpts=PTS-STARTPTS[v0]; \
[1:v]trim=0:5,setpts=PTS-STARTPTS[v1]; \
[0:v]trim=15:30,setpts=PTS-STARTPTS[v2]; \
[v0][v1][v2]concat=n=3:v=1:a=0[out]" \
-map "[out]" output.mp4
Aquí, trim
se usa para especificar las porciones individuales de las transmisiones de video de entrada ( 0:v
, 1:v
) que luego desea concatenar. Estas partes se nombran a v0
través de v2
. (El setpts
filtro restablece las marcas de tiempo de estas partes individuales a 0, lo cual es necesario para la concatenación). Más tarde, concatenamos las tres partes.
Si desea recortar desde una determinada marca de tiempo hasta el final, use en trim=start=15
lugar de especificar el rango.
Si sus archivos tienen audio, debe recortar esas transmisiones por separado:
ffmpeg -i edv_g24_2.mp4 -i short-video.mp4 -filter_complex "\
[0:v]trim=0:10,setpts=PTS-STARTPTS[v0]; \
[0:a]atrim=0:10,asetpts=PTS-STARTPTS[a0]; \
[1:v]trim=0:5,setpts=PTS-STARTPTS[v1]; \
[1:a]atrim=0:5,asetpts=PTS-STARTPTS[v1]; \
[0:v]trim=15:30,setpts=PTS-STARTPTS[v2]; \
[0:a]atrim=15:30,asetpts=PTS-STARTPTS[a2]; \
[v0][a0][v1][a1][v2][a2]concat=n=3:v=1:a=1[outv][outa]" \
-map "[outv]" -map "[outa]" output.mp4
Tenga en cuenta que el video y el audio se volverán a codificar en este caso; asegúrese de especificar los objetivos de calidad de salida adecuados (por ejemplo, -crf
para x264, x265 o libvpx-vp9). Puede leer más sobre esto en FFmpeg Wiki, por ejemplo, para VP9 o H.264 .
Usando segmentos individuales
Si desea dividir los clips y luego volver a ensamblarlos:
ffmpeg -i edv_g24.mp4 -ss 0 -to 10 -c copy part1.mp4
ffmpeg -i edv_g24.mp4 -ss 10 -to 15 -c copy part2.mp4
ffmpeg -i edv_g24.mp4 -ss 15 -c copy part3.mp4
ffmpeg -i part1.mp4 -i short-video.mp4 -i part3.mp4 -filter_complex \
"[0:v][1:v][2:v]concat=n=3:v=1:a=0[outv]" \
-map "[outv]" -t 30 output.mp4
Si los archivos tienen audio, utilice el mismo enfoque que el anterior:
ffmpeg -i part1.mp4 -i short-video.mp4 -i part3.mp4 -filter_complex \
"[0:v][0:a][1:v][1:a][2:v][2:a]concat=n=3:v=1:a=1[outv][outa]" \
-map "[outv]" -map "[outa]" -t 30 output.mp4
Esto volverá a codificar nuevamente la transmisión de video. Es un poco más sencillo, pero de lo contrario debería ser equivalente al método anterior.
Usando concat
demuxer
En principio, también puede intentar concatenar los flujos de bits sin volver a codificarlos, utilizando el demuxer concat. Cree un archivo llamado concat.txt
y agregue las siguientes entradas (correspondientes a los videoclips creados anteriormente):
file 'part1.mp4'
file 'short-video.mp4'
file 'part3.mp4'
Luego concatene estos archivos individuales:
ffmpeg -f concat -i concat.txt -c copy output.avi
Sin embargo, esto requiere que sus clips tengan el mismo códec, resolución, velocidad de cuadros, etc., por lo que no funciona con todo tipo de fuentes heterogéneas.
Utilizando el concat
protocolo
El tipo de concatenación a nivel de archivo anterior también se puede lograr utilizando el concat
protocolo, con el mismo tipo de restricciones que el anterior (mismo códec, resolución, etc.):
ffmpeg -i "concat:part1.avi|part2.avi|part3.avi" -c copy output.mp4
Para obtener más información sobre la concatenación, lea la página Wiki de FFmpeg correspondiente .