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

问题描述 投票:0回答:5

我正在尝试使用 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正确提取视频的所有帧?

image batch-file video command-line ffmpeg
5个回答
102
投票

使用

ffmpeg -i "%1" frames/out-%03d.jpg

图像文件序列没有帧速率。如果您想对视频文件进行欠采样,请在输入之前使用

-r

编辑

ffmpeg -i "C:\Applications\FFMPEG\aa.mp4" "frames/out-%03d.jpg"

6
投票

尝试:

ffmpeg -i file.mpg -r 1/1 $filename%03d.bmp

ffmpeg\ffmpeg -i file.mpg test\thumb%04d.jpg -hide_banner

注:

  1. 要在
    -i
    之前更改帧速率,请输入
    -framerate
    。要指定
    -i
    之后输出的帧速率,请输入
    -r

  2. -filter:v -fps=fps=...
    -vf fps=...
    -r
  3. 更准确

例如。

ffmpeg -i myvideo.avi -vf fps=<NO. of images>/<per no. of seconds> img%0<padding No. of digits>d.jpg

2
投票

%04d 将生成 4 位数字的图像名称,例如 0001、0002 等。%03d 将生成名称为 001、002 等的图像。


0
投票

您应该用于本机转换/更好的质量:

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"
)

-4
投票

不可能在 Windows 批处理文件中执行此操作,因为每个 %x 都被解释为传递给批处理文件的参数

© www.soinside.com 2019 - 2024. All rights reserved.