¿Cómo elimino el exceso de duración del video en ffmpeg cuando uso lavfi?

Mi objetivo es tomar clips que duren más de 40 segundos y superponerlos sobre un fondo, luego recortar el tiempo total una vez que los clips y el fondo desaparezcan. Funciona muy bien, excepto que la búsqueda sube a 24 segundos incluso cuando especifico 21.

ffmpeg -y -framerate 60 -loop 1 -ss 0 -t 21 -i ~/Desktop/FP2.tiff -ss 0 -t 21 -i ~/Desktop/fp.mov -lavfi \
"[0]fade=t=in:st=0:d=1,fade=t=out:st=20:d=1,trim=end=21[bg]; \
[1:v]setpts=(PTS-STARTPTS)+1/TB,fifo,fade=t=in:st=1:d=2,fade=t=out:st=15:d=2[fade]; \
[bg][fade]overlay=10:(main_h-overlay_h)/2:format=rgb[v1]; \
[1:v]setpts=(PTS-STARTPTS)+3/TB,fifo,fade=in:0:120,fade=t=out:st=18:d=2[v2]; \
[v1][v2]overlay=460:(main_h-overlay_h)/2:format=rgb[video]; \
[1:a]adelay=1000|1000,stereotools=muter=1,afade=t=in:st=1:d=2,afade=t=out:st=15:d=2[a1]; \
[1:a]adelay=3000|3000,stereotools=mutel=1,afade=t=in:st=3:d=2,afade=t=out:st=18:d=2[a2]; \
[a1][a2]amix=inputs=2[audio]" \
-map [video] -map [audio] -c:v ffv1 -level 3 -c:a pcm_s16be ~/Desktop/filtergraph.nut

Puedes ver esto en ffplay; el fondo se desvanecerá por completo en la marca de 21 segundos, pero el video en sí termina en 24 segundos. ¿Cómo hago para que coincidan exactamente? Soy consciente de que puedo usar -ssy -tdespués de las entradas, pero ese método puede ser lento si tiene la intención de usar un punto de inicio más allá de 0.

Soy consciente de que puedo usar -ss y -t después de las entradas -> puede mantener su comando actual y simplemente agregar -t 21 después de las entradas.

Respuestas (1)

Está alimentando 21 segundos de audio del archivo de video y luego aplicando adelay=3000|3000, por lo tanto, 24 segundos. Agregue atrim=end=21al final a ambas cadenas de filtros de audio.

Y

Agregue shortest=1a sus dos superposiciones.

Todavía obtengo los 24 segundos cuando intento eso, incluso si bajo los segundos para atrim por debajo de 21.
trabaja aquí ¿Dónde has colocado la aurícula?
[1:a]adelay=1000|1000,stereotools=muter=1,afade=t=in:st=1:d=2,afade=t=out:st=15:d=2,atrim=end=21 [a1]; \
Agregar el más corto funcionó y ahora el video finaliza correctamente después de que el fondo se desvanece. ffprobe y ffplay aún informan la duración como 20.98 en lugar de 21 (el cuadro codificado final dice 21 planos), pero para todos los efectos, esto da el resultado esperado. ¡Gracias por la ayuda!