如何准确延长微小视频片段的持续时间?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何准确延长微小视频片段的持续时间?相关的知识,希望对你有一定的参考价值。
我注意到ffmpeg并不总是将剪辑的持续时间缩放到所需的值(甚至考虑到毫秒的精度损失。)例如,每当我尝试将这个微小的67ms剪辑的持续时间缩放到7秒时:
ffmpeg -i input.avi -filter:v "setpts=(7/0.067)*PTS" -an output.avi
生成的视频持续时间仅为3.5秒。
不确定为什么这会被多秒关闭,但我怀疑它与输入剪辑本身有关(只有2帧@ 29.97 fps)到目前为止,我发现如果我将持续时间缩短到很多首先是更大的值,然后从那里缩小到7秒,它工作正常:
ffmpeg -i input.avi -filter:v "setpts=(1000)*PTS" -an input_scaled_high.avi
ffmpeg -i input_scaled_high.avi -filter:v "setpts=(7/33.400033)*PTS" -an output.avi
但我希望我不需要诉诸中间档案。是否可以通过单个ffmpeg调用来解决这个问题?
如果它有帮助,这里是我正在使用的视频文件:https://drive.google.com/drive/folders/1hI5Xo6kfAfMd8ZylM6XrPX5fuO88gncE?usp=sharing
注意:我应该提到在这个实验中我根本不需要声音(因此-an
)
setpts的作用是改变Presentation TimeStamps。 PTS是显示/绘制帧的时间。视频流的持续时间等于最后一帧的PTS +最后一帧的持续时间。您的文件是29.97 fps,因此每帧的持续时间为0.033秒。
在你的第一个命令中,第二帧获得了3.47秒的新PTS但其持续时间仍为0.033秒,因此该流的总持续时间为3.5秒
在您的两步过程中,第二帧的PTS为6.97秒。所以即使持续时间是7秒,我也认为这不是你想要的。
这样做的方法是
ffmpeg -i input.avi -filter:v "setpts=(7/2)*N/TB" -r 2/7 -an output.avi
其中(7/2)
表示目标持续时间(7秒)和总帧数(2)。该分数在-r
值中反转。 FFmpeg根据-r
值设置帧持续时间。
以上是关于如何准确延长微小视频片段的持续时间?的主要内容,如果未能解决你的问题,请参考以下文章