更改视频分辨率 ffmpeg

Posted

技术标签:

【中文标题】更改视频分辨率 ffmpeg【英文标题】:Change video resolution ffmpeg 【发布时间】:2016-03-27 06:44:13 【问题描述】:

我有不同分辨率的视频。我希望它们都具有 480x320 的分辨率。我尝试了命令:

ffmpeg -i %s_ann.mp4 -vf scale=480x320,setsar=1:1 %s_annShrink.mp4' %(dstfile,dstfile)

但视频的输出是大小为 0 kb 的文件。

我做错了什么?

【问题讨论】:

如果您的命令没有完整的控制台输出,就无法提供答案。 【参考方案1】:

我想这里真的有两个问题......

    如何批量转换文件? 如何自动缩放视频?

如何批量转换文件?

这些脚本应该可以解决问题...

Windows

for %%i in (*.mp4) do (
    ffmpeg -y -i "%%i" << TODO >> "%%~ni_shrink.mp4"
)

Linux(未测试!)

for i in *.mp4; 
do
    ffmpeg -y -i "$i" << TODO >> "$i%.mp4_shrink.mp4";
done

(我不太确定 Linux 脚本中的输出文件扩展,值得验证。)


如何自动缩放视频?

这有点棘手。当你有你的命令时,纵横比可能会变得混乱。选项在这里...

    缩放视频,忽略纵横比。结果 = 视频失真 缩放视频,保持纵横比,以便调整缩放后的高度(或宽度)以适应。结果 = 最佳 缩放视频,保持纵横比并用黑条填充,使视频大小正好为 480x320。结果 = 浪费/增加了文件大小 在缩放之前裁剪输入,使其“填充”480x320 分辨率。结果 = 视频不完整

选项 2 将是首选解决方案,否则您(可能不必要地)增加输出文件大小。选项 3,我将给出一个经过部分测试的解决方案。选项 4 我什至不会碰。

选项 2:缩放视频,保持纵横比,以便调整高度以适应

ffmpeg -y -i "%%i" -vf scale=480:-2,setsar=1:1 -c:v libx264 -c:a copy "%%~ni_shrink.mp4"

选项 3:缩放视频,保持宽高比并用黑条填充,使视频大小正好为 480x320

ffmpeg -y -i "%%i" -vf "[in]scale=iw*min(480/iw\,320/ih):ih*min(480/iw\,320/ih)[scaled]; [scaled]pad=480:320:(480-iw*min(480/iw\,320/ih))/2:(320-ih*min(480/iw\,320/ih))/2[padded]; [padded]setsar=1:1[out]" -c:v libx264 -c:a copy "%%~ni_shrink.mp4"

【讨论】:

如果我想要一个固定的高度和适合的宽度怎么办?我要输入-vf scale=-2:320,setsar=1:1 吗? 如果您能给我们一个链接,让我们了解命令中每个标记的含义,那就更好了 我对失真视频感兴趣(选项 1)。处理太窄的输入视频 - 它会挤压内容,需要纠正。【参考方案2】:

可以使用ffmpeg工具,输入命令

ffmpeg -i input.mp4 -vf scale=480:320 output_320.mp4

或者如果你想改变视频的纵横比,请使用 setdar

ffmpeg -i input.mp4 -vf scale=480:320,setdar=4:3 output_320.mp4

【讨论】:

那行不通。正确的命令格式是ffmpeg -i input.mp4 -vf "scale=480:320" output_320.mp4

以上是关于更改视频分辨率 ffmpeg的主要内容,如果未能解决你的问题,请参考以下文章

ffmpeg 命令行改变视频分辨率

视频在 Quicktime 中有多种分辨率,但 ffmpeg 只能看到一种

如何使用 ffmpeg 正确降低 360 视频的分辨率?

ffmpeg命令将不同类型和分辨率的视频连接成1个视频,可以在android中播放[重复]

解析视频分辨率和时长

解析视频分辨率和时长