根据帧位置使用ffmpeg对视频进行切片

Jab*_*abb 7 video ffmpeg

我想从视频中提取一段视频。不幸的是,我没有像这样运行 ffmpeg 的开始时间位置和持续时间:

ffmpeg -sameq -ss [start_seconds] -t [duration_seconds] -i [input_file] [outputfile]
Run Code Online (Sandbox Code Playgroud)

相反,我有第一个和最后一个帧号。那么...是否可以根据帧位置使用 ffmpeg 对 mp4 视频进行切片?

Gya*_*yan 6

如果文件有音频,也需要相应的切片,那么你需要知道开始时间和持续时间。除非视频是可变帧速率,否则开始帧索引I是时间I/FPS,结束帧O是时间O/FPS,其中 FPS 是视频的帧速率。运行ffprobe [input_file]将为您提供帧速率读数。

其他用途,

ffmpeg -i input.mp4 -vf trim=start_frame=I:end_frame=O+1 -an output.mp4
Run Code Online (Sandbox Code Playgroud)

-sameq已被弃用,也不会意味着相同的质量。此命令将跳过音频,因为它无法参考视频帧索引进行剪切。

  • 所述命令不会改变时间戳,您最终会得到一个以“2:07”等时间戳开头的视频,即使剪辑只有几秒钟长。使用 `-vf "trim=start_frame=I:end_frame=O+1, setpts=PTS-STARTPTS"` 修复此问题。我还必须使用“O+2”来获取结果视频中的预期帧数,不知道为什么。 (2认同)