假设我有一段视频,我想循环播放 5 次。该视频时长 5 秒,帧率为 25 FPS(假设没有音频)。
我可以
ffmpeg -i video.mp4 -vf "loop=4:125,setpts=N/FRAME_RATE/TB" out.mp4
但是,我需要计算视频的长度为 125 帧。有没有办法可以循环播放整个视频而不指定帧数(也许使用一些常量)?我想使用循环过滤器,因为我在更复杂的设置中使用它,计算我需要的帧数似乎是一项应该由计算机完成的工作 :-)。
根据要求,我正在运行的实际命令是这样的:
a1=0 ; a2=2.24 ; b1=1107.12 ; b2=1140.68 ; c1=2.28 ; c2=92.04 \
ffmpeg -i video.mp4 \
-filter_complex "[0:v]split=3[v0][v1][v2]; \
[v0]trim=$a1:$a2,setpts=PTS-STARTPTS[v00]; \
[v1]trim=$c1:$c2,setpts=PTS-STARTPTS[v11]; \
[v2]trim=$b1:$b2,setpts=PTS-STARTPTS[v22]; \
[v00]split=3[va][vb][vc]; \
[va][v11][vb][v22]concat=n=4[v9]; \
[v9]loop=7:3195,setpts=N/FRAME_RATE/TB[vl]; \
[vl][vc]concat=n=2[vout0]; \
[0:a]asplit=3[a0][a1][a2]; \
[a0]atrim=$a1:$a2,asetpts=PTS-STARTPTS[a00]; \
[a1]atrim=$c1:$c2,asetpts=PTS-STARTPTS[a11]; \
[a2]atrim=$b1:$b2,asetpts=PTS-STARTPTS[a22]; \
[a00]asplit=3[aa][ab][ac]; \
[aa][a11][ab][a22]concat=n=4:v=0:a=1[a9]; \
[a9]aloop=7:size=6134400,asetpts=N/SR/TB[al]; \
[al][ac]concat=n=2:v=0:a=1[aout0]" -map '[vout0]' -map '[aout0]' -c:v libx264 -preset slow -crf 16 -movflags faststart -y 2.mp4