ffmpeg 降低视频分辨率

2020-04-10 14:37:26 +08:00
 wsseo

有个 4K 视频,播放卡顿,想降低分辨。这种写法可以吗?需要尽量保证画质。

ffmpeg -i 1.mp4 -strict -2 -vf scale=-1:1440 2.mp4 
7887 次点击
所在节点    FFmpeg
26 条回复
edius
2020-04-10 17:54:12 +08:00
4K 电影定义为 4096*3112 等标准比较多,电视 4K3840*2160
kojirou
2020-04-11 01:03:04 +08:00
handbrake 好用一些
wsseo
2020-04-11 02:22:45 +08:00
@wenyifancc @jim9606
今天测试了一下,使用显卡这个参数 vcodec h264_nvenc 都会明显降低码率,画质也降低了很多,转码时间跟 cpu 差不多。

直接使用主题正文中的命令比较符合我的期望:体积,码率降低一点,画质基本看不出变化,分辨率降低到指定值。
ungrown
2020-10-02 12:20:07 +08:00
-vf scale=用的没错,不过建议把 -1: 改成 -2:
-2 能保证伸缩后的边长是 2 的倍数
因为不少编码器不支持奇数的边长,要求偶数
搞不好还有要求是 4 的倍数的(这是我猜的)
总之 -1 换成 -2 基本可以满足绝大多数情况

如果你不是批量跑,其实也可以计算器算好了手动制定 -s 2560x1440 (举例)
批量跑,不确定源分辨率,有需要自动保持画面比例,那就 -vf scale=-2:1440
-2:1440 表示伸缩时以高为基准,宽会以高为基础保持比例调解
也可以以宽为基础,那就是 -2:1440

其实 scale 保持比例自动伸缩的话是分 4 种情况的:
以长边为基准,以短边为基准
而在横屏和竖屏下宽高长短的关系正好对调
所以是 4 种情况
如果只缩不伸的话,还要先判断一下分辨率有没有超过
你不需要全自动话,就不用考虑这么复杂

我自己用 python 写了 ffmpeg 的封装脚本,主要是满足自用需求
https://github.com/mo-han/mo-han-toolbox#wrapffmpeg-aliases-ffmpeg-ff
里面包含了全自动的输出画面按比例缩小
目前只有两挡:缩小到全高清 1920x1080 以内,和高清 1280x720 以内
因为我自己平常不输出全高清以上的分辨率,所以没有写更高分辨率的情况
但是代码很简单,可以很容易加上
我这就去加上
ungrown
2020-10-02 12:21:57 +08:00
上面有笔误,以高为基准是-2:1440,以宽为基准是 2560:-2
ungrown
2020-10-02 12:33:32 +08:00
草,才发现挖坟了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/661162

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX