使用FFMPEG将所有视频帧提取为图像

use*_*756 14 video command-line ffmpeg image batch-file

我正在尝试使用FFMPEG将MP4视频文件转换为一系列jpg图像(out-1.jpg,out-2.jpg等),

mkdir frames
ffmpeg -i "%1" -r 1 frames/out-%03d.jpg
Run Code Online (Sandbox Code Playgroud)

但是我不断收到错误,

[image2 @ 00000037f5a811a0]无法打开文件:frames/out-C:\ Applications\FFMPEG\toGIF.bat3d.jpg av_interleaved_write_frame():输入/输出错误帧= 1 fps = 0.0 q = 5.9 Lsize = N/A time = 00:00:01.00比特率= N/A视频:63kB音频:0kB字幕:0kB其他流:0kB全局标头:0kB多路复用开销:未知转换失败!

如果我取出%03d部分,转换工作但它只输出第一帧,程序停止并出错.

如何使用FFMPEG正确提取视频的所有帧?

Gya*_*yan 23

使用

ffmpeg -i "%1" frames/out-%03d.jpg
Run Code Online (Sandbox Code Playgroud)

一系列图像文件没有帧速率.如果要对视频文件进行欠采样,请-r在输入之前使用.

编辑:

ffmpeg -i "C:\Applications\FFMPEG\aa.mp4" "frames/out-%03d.jpg"
Run Code Online (Sandbox Code Playgroud)

  • 是的,在脚本中,您需要转义特殊字符. (3认同)
  • 好吧终于找到问题了,看来Windows需要%%,如out-%%03d.jpg (2认同)
  • 要在“-i”之前[更改帧速率](https://trac.ffmpeg.org/wiki/Slideshow#Framerates),输入“-framerate”。要在“-i”之后指定输出的帧速率,请输入“-r” (2认同)

Zim*_*mba 6

尝试:

ffmpeg -i file.mpg -r 1/1 $filename%03d.bmp
Run Code Online (Sandbox Code Playgroud)

或者

ffmpeg\ffmpeg -i file.mpg test\thumb%04d.jpg -hide_banner
Run Code Online (Sandbox Code Playgroud)

笔记:

  1. 要更改之前的帧速率-i,请输入-framerate. -i输入后指定输出帧率-r
  2. -filter:v -fps=fps=...或者-vf fps=...比更准确-r

例如。

ffmpeg -i myvideo.avi -vf fps=<NO. of images>/<per no. of seconds> img%0<padding No. of digits>d.jpg
Run Code Online (Sandbox Code Playgroud)

  • %04d 和 %03d 有什么区别? (2认同)