有个 4K 视频,播放卡顿,想降低分辨。这种写法可以吗?需要尽量保证画质。
ffmpeg -i 1.mp4 -strict -2 -vf scale=-1:1440 2.mp4
1
hwenwur 2020-04-10 14:50:59 +08:00
建议用 -crf X, X 的范围是[0, 51], 越小表示清晰度越高。我之前用 -crf 24 文件体积大概减小了 77%,清晰度没有明显变化。
|
2
wsseo OP @hwenwur 是这样吗?
ffmpeg -i 1.mp4 -strict -2 -crf 24 -vf scale=-1:1440 2.mp4 |
3
wsseo OP |
4
clrss 2020-04-10 15:10:39 +08:00
别的机器播放卡顿你用高性能机器重编码可行.
你在放 4K 卡顿的机器上重编码那速度感人... |
6
littlewing 2020-04-10 15:33:35 +08:00 via iPhone
@wsseo 这已经非常快了,我见过之前室友压片子,不过是加了各种滤镜的,速度大概 1.x 帧 1 秒
|
7
wenyifancc 2020-04-10 15:51:43 +08:00
ffmpeg -i 1.mp4 -s 1920x1080 -vcodec libx265 -crf 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 音频直接复制 |
8
wsseo OP @wenyifancc 这个能保持宽高比吗?
|
9
chihiro2014 2020-04-10 15:58:27 +08:00
降低分辨率,可以用 win10 自带的照片(不要问我怎么知道的,这个自带应用除了卡没别的,某些方面比 PR 还牛逼)
|
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 及以上显卡 |
11
wenyifancc 2020-04-10 16:00:24 +08:00
@wsseo 把-s 1920x1080 换成你的-strict -2 -vf scale=-1:1440 就行了,要质量关键还是看编码技术和编码质量参数
|
12
xmoiduts 2020-04-10 16:04:37 +08:00 via Android
这些命令行听起来好高端,请问想学压片软件有哪些教程 我只知道一个 crf 一个 cbr/vbv……
|
13
chihiro2014 2020-04-10 16:17:06 +08:00
@xmoiduts 啥也不懂,小丸一波走就可以了。CRF 的话一般 23.5 是最佳值,你想视频体积小,不在意画质,调成 30
|
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 |
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 |
16
wsseo OP 事情的经过是这样的,买了个爱奇艺 VR 一体机播放本地视频 VR 4K ( 4K*2160),谁知道播放的时候卡成 ppt,问客服才知道最大只支持 3840*2160 。
|
21
edius 2020-04-10 17:54:12 +08:00
4K 电影定义为 4096*3112 等标准比较多,电视 4K3840*2160
|
22
kojirou 2020-04-11 01:03:04 +08:00
handbrake 好用一些
|
23
wsseo OP @wenyifancc @jim9606
今天测试了一下,使用显卡这个参数 vcodec h264_nvenc 都会明显降低码率,画质也降低了很多,转码时间跟 cpu 差不多。 直接使用主题正文中的命令比较符合我的期望:体积,码率降低一点,画质基本看不出变化,分辨率降低到指定值。 |
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 以内 因为我自己平常不输出全高清以上的分辨率,所以没有写更高分辨率的情况 但是代码很简单,可以很容易加上 我这就去加上 |
25
ungrown 2020-10-02 12:21:57 +08:00
上面有笔误,以高为基准是-2:1440,以宽为基准是 2560:-2
|
26
ungrown 2020-10-02 12:33:32 +08:00
草,才发现挖坟了
|