查找应用慢动作后的视频时长

查找应用慢动作后的视频时长

我正在尝试将慢动作效果应用于一系列视频。此外,这些视频将被缩放、填充和淡入淡出。以下是我用来应用慢动作的命令。

ffmpeg -i 1.mp4 -filter_complex "
[0:v]trim=0:5,setpts=PTS-STARTPTS[tv1];
[0:v]trim=5:7,setpts=PTS-STARTPTS[tv2];
[0:v]trim=start=7,setpts=PTS-STARTPTS[tv3];
[tv2]setpts=PTS*2[slow];
[tv1][slow][tv3]concat=n=3:v=1:a=0[out]" -map [out] -c:v libx264 test.mp4

我有两个问题。

  1. 提到[tv2]虽然它被修剪并从第 5 秒开始应用慢动作效果,但实际上它从第 4 秒开始应用效果。这是什么原因?

以下是我在上述命令中连接之后立即用于其他处理的命令。

[concat0]scale=iw*min(1280/iw\,720/ih):ih*min(1280/iw\,720/ih),pad=1280:720:(1280-iw*min(1280/iw\,720/ih))/2:(720-ih*min(1280/iw\,720/ih))/2,format=pix_fmts=yuva420p,fade=t=out:st=16:d=2:alpha=1,setpts=expr=PTS-STARTPTS+10/TB[va0];

我需要在那里指定setpts并使用当前视频之前的视频的累积时长。这里是我为其使用的完整命令。

  1. 如何计算应用慢动作效果后视频的时长?例如,我在这里提到的第一个命令的视频时长的增量是多少(以秒甚至微秒为单位)?

答案1

问题 1- 该命令不完整,因为你没有考虑到声音的轨道,你只在视频跟踪。要查看差异,只需尝试以下操作:

# no-good, starts from 4th second audio with a frozen video frame
ffmpeg -i in.mp4 -vf trim=5:7 out.mp4
#
# works as expected, both audio and video start at 5th second
ffmpeg -i in.mp4 -vf trim=5:7 -af atrim=5:7 out.mp4

问题2- 由于同样的原因,这也不会按预期工作,但是一旦您解决了前面的问题,这里有一个不太优雅但有效的技巧来关联“之前”和“之后”的时间:

# overlay the input video with a timer, pulled to the right 200 pixels
ffmpeg -i in.mp4 -f lavfi -i testsrc=n=3 -vf overlay=x=200 in-with-time.mp4
#
# do all your manipulation, and finaly overlay with another timer at x=0
ffmpeg -i in-with-time.mp4 -f lavfi -i testsrc=n=3 -filter_complex "..stuff...,overlay[out]" out.mp4

这为您提供每帧的原始时间和结果时间,精度为 1 毫秒。

相关内容