使用ffmpeg提取特定帧的列表

Joh*_*ard 6 shell ffmpeg video-processing data-extraction

我正在尝试在视频上使用ffmpeg来提取特定帧的列表,用它们的帧号表示.所以我想说我想从'test_video.mp4'中提取一帧,准确地说是帧号150.我可以使用以下命令

ffmpeg -i test_video.mp4 -vf "select=gte(n\, 150)" -vframes 1 ~/test_image.jpg

但是,如果我想确定一个帧列表,例如[100, 110, 127, 270, 300]?我一直在看这个页面(https://ffmpeg.org/ffmpeg-filters.html#select_002c-aselect),可以看到有很多方法可以根据帧号,时间戳等的奇偶校验提取多个帧,但是我找不到我需要做的事情的语法.

理想情况下,我会在命名约定下提取给定帧的列表,out_image%03d.jpg其中%03d由给定的帧号替换,尽管时间戳也可以工作.

有没有办法做到这一点?

Gya*_*yan 17

使用

ffmpeg -i in.mp4 -vf select='eq(n\,100)+eq(n\,184)+eq(n\,213)' -vsync 0 frames%d.jpg
Run Code Online (Sandbox Code Playgroud)

FFmpeg主要是定时视频的处理器,即具有诸如帧速率或采样率的循环速率的媒体.它假定输出应与源相同.如果提供的框架不合适,除非被告知不重复,否则它会重复.-vsync 0添加,在这种情况下,它告诉它抑制重复.

  • @Ngoral-选择输入帧#100,184,213。对于输出文件**名称**,添加带有最新ffmpeg版本的`-frame_pts 1`。 (2认同)