我正在使用 ffmpeg 将帧从 mp4 转换为 png 图像。
我想要每秒 20 帧,并且我还希望图像放大到 1920x1080。原始 mp4 是 240p (426x240)。
它允许我在 -vf 标志后指定 20 fps,但不允许我缩放图像。
ffmpeg -i 240_video.mp4 -vf scale=1920:1080 fps=20 240_scaled/out%d.png
Run Code Online (Sandbox Code Playgroud)
如果我忽略scale=1920:1080
该命令,则可以正常工作,但当然,我会得到 426x240 的图像。
llo*_*gan 12
您可以使用逗号将线性过滤器链接在一起:
ffmpeg -i 240_video.mp4 -vf "fps=20,scale=1920:1080" 240_scaled/out%d.png
Run Code Online (Sandbox Code Playgroud)
许多玩家不喜欢输出,因为它不是 4:2:0,因此您可以添加格式过滤器:
ffmpeg -i 240_video.mp4 -vf "fps=20,scale=1920:1080,format=yuv420p" 240_scaled/out%d.png
Run Code Online (Sandbox Code Playgroud)
426x240 放大后保持纵横比实际上是 1920x1082 或 1917x1080,因此添加pad或crop进行补偿。或者参考force_original_aspect_ratio
比例选项。添加了setsar,这样您就不会得到奇怪的 SAR。-movflags +faststart
如果您正在进行渐进式播放,则会添加。
ffmpeg -i 240_video.mp4 -vf "fps=20,scale=1920:-1,crop=1920:1080,setsar=1,format=yuv420p" -movflags +faststart 240_scaled/out%d.png
Run Code Online (Sandbox Code Playgroud)