Usando trimy 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 trimy 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í, trimse 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 v0través de v2. (El setptsfiltro 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=15lugar 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, -crfpara 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 concatdemuxer
En principio, también puede intentar concatenar los flujos de bits sin volver a codificarlos, utilizando el demuxer concat. Cree un archivo llamado concat.txty 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 concatprotocolo
El tipo de concatenación a nivel de archivo anterior también se puede lograr utilizando el concatprotocolo, 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 .