我正在尝试使用 FFMPEG 将 MP4 视频文件转换为一系列 jpg 图像(out-1.jpg、out-2.jpg 等),
mkdir frames
ffmpeg -i "%1" -r 1 frames/out-%03d.jpg
但是我不断收到类似的错误,
[image2 @ 00000037f5a811a0] 无法打开文件: 帧/out-C:\Applications\FFMPEG oGIF.bat3d.jpg av_interleaved_write_frame(): 输入/输出错误帧= 1 fps=0.0 q=5.9 Lsize=N/A 时间=00:00:01.00 比特率=N/A 视频:63kB 音频:0kB 字幕:0kB 其他流:0kB 全局标头:0kB 复用开销: 未知 转换失败!
如果我取出 %03d 部分,转换会起作用,但它只输出第一帧,并且程序会因错误而停止。
如何使用FFMPEG正确提取视频的所有帧?
使用
ffmpeg -i "%1" frames/out-%03d.jpg
图像文件序列没有帧速率。如果您想对视频文件进行欠采样,请在输入之前使用
-r
。
编辑:
ffmpeg -i "C:\Applications\FFMPEG\aa.mp4" "frames/out-%03d.jpg"
尝试:
ffmpeg -i file.mpg -r 1/1 $filename%03d.bmp
或
ffmpeg\ffmpeg -i file.mpg test\thumb%04d.jpg -hide_banner
注:
-i
之前更改帧速率,请输入 -framerate
。要指定 -i
之后输出的帧速率,请输入 -r
-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
%04d 将生成 4 位数字的图像名称,例如 0001、0002 等。%03d 将生成名称为 001、002 等的图像。
您应该用于本机转换/更好的质量:
ffmepg -i input.mp4 -c:v png output_frame%04d.png
参见:https://ffmpeg.org/faq.html#How-do-I-encode-movie-to-single-pictures_003f
多个视频文件的批处理脚本示例:
@echo off
set ffmpeg=.\ffmpeg-6.1.1-full_build\bin\ffmpeg.exe
set pathVideos=.\pathVideos
set pathPNG=.\pathPNG
set videos=file1 file2 file3 file4
if not exist "%pathPNG%\" mkdir "%pathPNG%"
FOR %%V IN (%videos%) DO (
%ffmpeg% -i "%pathVideos%\%%V.mp4" -c:v png "%pathPNG%\%%V_frame%%05d.png"
)
不可能在 Windows 批处理文件中执行此操作,因为每个 %x 都被解释为传递给批处理文件的参数