es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , ,

Answer

  1. Avatar for 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 filtro concat directamente en todas las entradas de vídeo sin usarsetpts en cada entrada. Esto se debe a que setpts 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í:

    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];[video0][6][7][8]concat=n=4:v=1:a=0[videos]" -map [videos] -map [audios] -c:v h264 -vsync 2 output.mp4
    

    Este comando concatena todas las entradas de video directamente sin usar setpts en cada entrada. La bandera vsync 2 asegura que se eliminen los cuadros duplicados.

Comments are closed.