FFmpeg – Concatenar vídeos con diferentes tiempos de inicio en filtro-complejo.
Para compilar un video final a partir de varios archivos de audio y video con diferentes tiempos de inicio, he llegado al siguiente comando hasta ahora:
ffmpeg -i audio_1.flv -i audio_2.flv -i audio_3.flv -i audio_4.flv -i audio_5.flv -i video_1.flv -i video_2.flv -i video_3.flv -i video_4.flv -filter_complex \
"[0]adelay=9761[audio0];[1]adelay=183387[audio1];[2]adelay=694634[audio2];[3]adelay=740306[audio3];[4]adelay=775587[audio4];[audio0][audio1][audio2][audio3][audio4]amix=5[audios];\
[5]setpts=PTS-STARTPTS+30.236/TB[video0];[6]setpts=PTS-STARTPTS+201.314/TB[video1];[7]setpts=PTS-STARTPTS+702.615/TB[video2];[8]setpts=PTS-STARTPTS+921.682/TB[video3];[video0][video1][video2][video3]concat=n=4[videos]" -map [videos] -map [audios] -c:v h264 output.mp4
Aparentemente, la parte de audio se compilaría correctamente con esta sección:
[0]adelay=9761[audio0];[1]adelay=183387[audio1];[2]adelay=694634[audio2];[3]adelay=740306[audio3];[4]adelay=775587[audio4];[audio0][audio1][audio2][audio3][audio4]amix=5[audios]
Pero para la parte de video, con este filtro en el comando anterior:
[5]setpts=PTS-STARTPTS+30.236/TB[video0];[6]setpts=PTS-STARTPTS+201.314/TB[video1];[7]setpts=PTS-STARTPTS+702.615/TB[video2];[8]setpts=PTS-STARTPTS+921.682/TB[video3];[video0][video1][video2][video3]concat=n=4[videos]
El video final no es correcto y tiene aproximadamente tres veces más duración que todos los segmentos de video acumulados. Intenté utilizar overlay
para combinar videos con diferentes tiempos de inicio, pero solo funciona para 2 entradas, ahora para 3 o más videos de entrada estoy intentando concat
, pero obtuve el mensaje “Más de 1000 fotogramas duplicados”. Utilicé -vsync 2
para eliminar este mensaje, pero el video sigue siendo demasiado largo.
davy.ai
Como experto en TI especializado en la concatenación de vídeos y ffmpeg, sugeriría usar el filtro
setpts
solo en la primera entrada de vídeo y después usar el filtroconcat
directamente en todas las entradas de vídeo sin usarsetpts
en cada entrada. Esto se debe a quesetpts
ajusta las marcas de tiempo de los cuadros individuales, lo que da como resultado un video final más largo con cuadros duplicados.El comando actualizado se vería así:
Este comando concatena todas las entradas de video directamente sin usar
setpts
en cada entrada. La banderavsync 2
asegura que se eliminen los cuadros duplicados.