使用 VLC 或 FFmpeg 在视频中提取“每 10 帧之一”

wma*_*mac 17 video vlc-media-player ffmpeg extract frame

我正在尝试为科学目的提取视频的“每 10 帧中恰好有 1 帧”(即提取 1 ,保留 9 然后重复)。视频为 105 帧,3.5 秒,29.97fps(h.264,.mov,尼康 D3100 出品)。

我已经上传到这里了

VLC

下面的命令应该产生 10 帧,但它只产生 6 个图像。我尝试了不同的场景比例,但它们都没有产生正确的帧数(甚至接近正确)。

vlc 1.mov --video-filter=scene --vout=dummy --scene-ratio=10 --scene-prefix=img- --scene-path=. vlc://quit
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我是什么问题吗?

FFmpeg

FFmpeg 似乎没有完全符合我的目的的命令。下面的命令每秒提取 3 帧,但由于 FPS 不完全是 30(而是 2.97),这不会为我产生正确的结果。

此外,即使使用此命令,FFmpeg 也不会给出正确的帧数。对于 3.5 秒的视频,我预计最多 10 帧,但我得到的是 12 帧!

ffmpeg -i 1.mov -y -an -sameq  -r 3 -f image2 -vcodec mjpeg %03d.jpg 
Run Code Online (Sandbox Code Playgroud)

我怎样才能达到我想要的?

llo*_*gan 30

从每 10 帧中选择 1 帧

您可以使用select视频过滤器ffmpeg来执行此操作:

ffmpeg -i input.mov -vf "select=not(mod(n\,10))" -vsync vfr -q:v 2 img_%03d.jpg
Run Code Online (Sandbox Code Playgroud)
  • 对于 JPG 输出,您可以使用-q:v. 有效范围是 2(质量最好)到 31(质量最差)。如果要输出为 PNG,则不需要此选项。

  • 这将输出img_001.jpgimg_002.jpgimg_003.jpg,等。