我正在尝试根据固定的帧数(例如)将视频video.avi
(N
总帧数)拆分为连续的块M = 100
。具体来说,这个过程应该产生:
video_0.avi
: 帧 0 到M-1
video_1.avi
: 帧M
到2M-1
video_2.avi
: 帧2M
到3M-1
- ...
重要的是每个块video_*.avi
都有精确的M
帧。N
因此,如果不能被 整除,则可以丢弃最后一个块M
。
我发现了相关问题(例如,使用 ffmpeg 将视频文件拆分为片段),但发现自己很难在几秒钟内用帧数替换规范。
对于第一个块,你应该可以使用
-vframes M-1
它并且它会没问题(即使-c copy
我记得)。其他块更棘手,我没有成功:
-vf 'select=gte(n\,M)'
- 无论如何它都需要重新编码,但是使用不同的编解码器会做奇怪的事情 - 例如,用静止帧留下前面的持续时间,并播放声音......您可以通过将帧数除以 FPS 来获得以秒为单位的时间,例如,如果您的 FPS 是
$fps
并且 M 是$M
:等等如果你有一种脚本语言来计算这些时间,它会更容易。另外,请注意,在重新编码时(即没有
-c copy
),-ss
并且-to
将是精确的,另请参见:https ://superuser.com/questions/459313/how-to-cut-at-exact-frames-using-ffmpeg