ffmpeg 降低视频分辨率 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wsseo
V2EX    FFmpeg

ffmpeg 降低视频分辨率

  •  
  •   wsseo 2020-04-10 14:37:26 +08:00 8360 次点击
    这是一个创建于 2014 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    ffmpeg -i 1.mp4 -strict -2 -vf scale=-1:1440 2.mp4 
    26 条回复    2020-10-02 12:33:32 +08:00
    hwenwur
        1
    hwenwur  
       2020-04-10 14:50:59 +08:00
    建议用 -crf X, X 的范围是[0, 51], 越小表示清晰度越高。我之前用 -crf 24 文件体积大概减小了 77%,清晰度没有明显变化。
    wsseo
        2
    wsseo  
    OP
       2020-04-10 15:03:50 +08:00
    @hwenwur 是这样吗?
    ffmpeg -i 1.mp4 -strict -2 -crf 24 -vf scale=-1:1440 2.mp4
    wsseo
        3
    wsseo  
    OP
       2020-04-10 15:05:36 +08:00
    小丸工具箱有 crf 这个参数,但是这个分辨率要自己设置,不知道能不能等比例
    clrss
        4
    clrss  
       2020-04-10 15:10:39 +08:00
    别的机器播放卡顿你用高性能机器重编码可行.

    你在放 4K 卡顿的机器上重编码那速度感人...
    wsseo
        5
    wsseo  
    OP
       2020-04-10 15:13:49 +08:00
    @clrss 我是在移动设备上播放,电脑性能还行,可以播放。不过转码时间还是感人,4k 压成 1080p 花了半个小时。
    littlewing
        6
    littlewing  
       2020-04-10 15:33:35 +08:00 via iPhone
    @wsseo 这已经非常快了,我见过之前室友压片子,不过是加了各种滤镜的,速度大概 1.x 帧 1 秒
    wenyifancc
        7
    wenyifancc  
       2020-04-10 15:51:43 +08:00
    ffmpeg -i 1.mp4 -s 1920x1080 -vcodec libx265 -cf 22 -acodec copy 2.mp4 #编码为 H.265 1080p 音频直接复制
    ffmpeg -i 1.mp4 -s 1920x1080 -vcodec libx264 -crf 21 -acodec copy 2.mp4 #编码为 H.264 1080p 音频直接复制
    wsseo
        8
    wsseo  
    OP
       2020-04-10 15:53:51 +08:00
    @wenyifancc 这个能保持宽高比吗?
    chihiro2014
        9
    chihiro2014  
       2020-04-10 15:58:27 +08:00
    降低分辨率,可以用 win10 自带的照片(不要问我怎么知道的,这个自带应用除了卡没别的,某些方面比 PR 还牛逼)
    wenyifancc
        10
    wenyifancc  
       2020-04-10 15:59:05 +08:00
    ffmpeg -i 1.mp4 -s 1920x1080 -vcodec hevc_qsv -preset veryslow -q:v 13 -acodec copy 2.mp4 #使用 Intel 核显硬编码 H.265,质量一般,速度快,q:v 为质量参数,越小质量越高
    ffmpeg -i 1.mp4 -s 1920x1080 -vcodec hevc_nvenc -preset slow -q:v 13 -acodec copy 2.mp4 #使用 Nvidia 显卡硬编码 H.265,质量不错,速度非常快,q:v 为质量参数,越小质量越高,需要 GTX10XX 及以上显卡
    wenyifancc
        11
    wenyifancc  
       2020-04-10 16:00:24 +08:00
    @wsseo 把-s 1920x1080 换成你的-strict -2 -vf scale=-1:1440 就行了,要质量关键还是看编码技术和编码质量参数
    xmoiduts
        12
    xmoiduts  
       2020-04-10 16:04:37 +08:00 via Android
    这些命令行听起来好高端,请问想学压片软件有哪些教程 我只知道一个 crf 一个 cbr/vbv……
    chihiro2014
        13
    chihiro2014  
       2020-04-10 16:17:06 +08:00
    @xmoiduts 啥也不懂,小丸一波走就可以了。CRF 的话一般 23.5 是最佳值,你想视频体积小,不在意画质,调成 30
    jim9606
        14
    jim9606  
       2020-04-10 16:22:05 +08:00
    先确定你的设备能不能支持硬解 HEVC,如果支持可以考虑换用 HEVC

    没查到要求-strict,你是不是用的是老版本?

    ffmpeg -i 1.mp4 -vf scale=-1:1440 -vcodec libx265 -crf 28 -preset slow 2.mp4

    crf 越小质量越好但体积和转码耗时更大,libx264 默认 23,libx265 默认 28,h264 建议添加-profile high 缩小体积

    ffmpeg -i 1.mp4 -vf scale=-1:1440 -vcodec libx264 -crf 23 -preset slow -profile high 2.mp4

    preset 越慢画质越好但耗时更多,一般建议最少 medium,最多 veryslow

    medium 也嫌慢又有新 N 卡(10/16/20 系)的可以用 NVENC ( hevc_nvenc , h264_nvenc ),就算 slow 速度也比较快,不过画质会差些

    ffmpeg -i 1.mp4 -vf scale=-1:1440 -vcodec hevc_nvenc -preset slow 2.mp4

    ffmpeg -i 1.mp4 -vf scale=-1:1440 -vcodec h264_nvenc -preset slow -profile high 2.mp4
    fuxiaopang
        15
    fuxiaopang  
       2020-04-10 16:29:20 +08:00   3
    这个是压缩到优酷超清的最低标准的命令
    ffmpeg -i input -b:v 4000k -minrate 3500k -maxrate 10000k -bufsize 4000k -s 1920x1080 -r 25 -g 25 -c:v libx264 -ar 48000 -b:a 192k -strict -2 output.mp4

    然后给你一个我总结多年经验的终极命令
    这个命令可以帮你把所有奇怪的分辨率自动加黑边遮幅,变成一个没有拉扯的 16:9 的视频,如果本身就是 16:9 那就直接按照最终参数渲染

    ffmpeg -i input.mp4 -filter:v "scale=iw*min(1920/iw\\,1080/ih):ih*min(1920/iw\\,1080/ih), pad=1920:1080:(1920-iw*min(1920/iw\\,1080/ih))/2:(1080-ih*min(1920/iw\\,1080/ih))/2" -b:v 4000k -minrate 3500k -maxrate 10000k -bufsize 4000k -r 25 -g 25 -c:v libx264 -ar 48000 -b:a 192k -strict -2 output.mp4
    wsseo
        16
    wsseo  
    OP
       2020-04-10 17:04:34 +08:00
    事情的经过是这样的,买了个爱奇艺 VR 一体机播放本地视频 VR 4K ( 4K*2160),谁知道播放的时候卡成 ppt,问客服才知道最大只支持 3840*2160 。
    felixlong
        17
    felixlong  
       2020-04-10 17:35:01 +08:00
    @wsseo 4K*2160 和 3840x2160 难道不是一回事吗?
    pkookp8
        18
    pkookp8  
       2020-04-10 17:44:00 +08:00 via Android
    @wsseo 4k 就是 3840*2160
    客服忽悠你呢吧
    还是帧率问题
    wsseo
        19
    wsseo  
    OP
       2020-04-10 17:47:30 +08:00
    @pkookp8 @felixlong 我下的视频确实是 4000 多*2160,
    pkookp8
        20
    pkookp8  
       2020-04-10 17:51:59 +08:00 via Android
    @wsseo 视频编码界的编码格式果然千奇百怪。。。
    edius
        21
    edius  
       2020-04-10 17:54:12 +08:00
    4K 电影定义为 4096*3112 等标准比较多,电视 4K3840*2160
    kojirou
        22
    kojirou  
       2020-04-11 01:03:04 +08:00
    handbrake 好用一些
    wsseo
        23
    wsseo  
    OP
       2020-04-11 02:22:45 +08:00
    @wenyifancc @jim9606
    今天测试了一下,使用显卡这个参数 vcodec h264_nvenc 都会明显降低码率,画质也降低了很多,转码时间跟 cpu 差不多。

    直接使用主题正文中的命令比较符合我的期望:体积,码率降低一点,画质基本看不出变化,分辨率降低到指定值。
    ungrown
        24
    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
        25
    ungrown  
       2020-10-02 12:21:57 +08:00
    上面有笔误,以高为基准是-2:1440,以宽为基准是 2560:-2
    ungrown
        26
    ungrown  
       2020-10-02 12:33:32 +08:00
    草,才发现挖坟了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3119 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 11:51 PVG 19:51 LAX 04:51 JFK 07:51
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86