本帖最后由 xtellaris 于 2020/4/10 01:01 编辑
不知道坛里有没有熟悉ffmpeg的大佬,发帖交流交流,顺便说说说疑惑。
由于本贴主要目的是交流记录和提问,故包含大量流水账废话,不喜欢的朋友请不要浪费宝贵时间。
起因是疫情期间实在无聊,因此整了很多P2P下载软件玩,eMule的MOD、BT客户端之类的。特别是eMule,刚发现这个P2P工具的时候很惊喜,能搜索 后来发现qb装了python脚本能搜种子,当然跟电骡比还是不够彻底 ,能共享,最重要很符合心目中的互联网精神,共享、开源 好羞耻啊,写日志的时候怎么没感觉 。
目前用的是基于忍者骡的Magic Angel v4.0二次mod
慢慢的在骡子上搜索电影看,由于正经的骡子用户很少,我就专门挑资源数多的下载,奈何许多资源数丰富的影片,体积往往较大,不适合我小硬盘保存,还有家里渣内网播放,于是萌生了压片的想法。开始用的是小丸工具箱,封装好了编码库和GUI非常方便,缺点是好久没更新 以及只能CPU软压。而我的笔电是17年游戏本上流行的i5-7300hq,4C4T,x264、10GB、两小时左右的片子用小丸的H265软压基本要20+小时(小丸中设置crf为24,听说压h265虽然费时间体积能小故用了265,家里的的移动设备都支持265硬解)。所以就放弃了。
后来发现ffmpeg本身能调用GPU相关单元来压片子,比如我N卡的nvenc,于是就整了ffmpeg试试。个人电脑软件水平停留在大学c语言课水平,故直接用官网上的ffmpeg设置了环境变量以后在windows power shell里直接弄的。试了一下发现,是真的棒,上面说的影片基本二三十分钟就能压制完成,画面质量和压缩大小也有保证(我属于能看就行了,不要像那些b站二压视频那样大面积色带就行了)
先贴上被压影片的参数(不知道为啥帖子编辑器的代码格式脚本无法使用,所以直接贴了):
Input #0, matroska,webm, from 'F:\eMule\Downloads\[星球大战] Star.Wars.Episode.2.Attack.of.the.Clones.2002.BluRay.1080p.DTSES6.1.2Audio.x264-CHD.mkv':
Metadata:
encoder : libebml v0.7.9 + libmatroska v0.8.1
creation_time : 2011-09-05T04:34:30.000000Z
Duration: 02:22:27.88, start: 0.000000, bitrate: 11264 kb/s
Stream #0:0(eng): Video: h264 (High), yuv420p(progressive), 1920x816, SAR 1:1 DAR 40:17, 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc
Metadata:
title : Star.Wars.Episode.2.Attack.of.the.Clones.2002
Stream #0:1(eng): Audio: dts (DTS-ES), 48000 Hz, 6.1, fltp, 1536 kb/s (default)
Metadata:
title : DTS-CORE ES6.1 1536K
Stream #0:2(chi): Audio: ac3, 48000 Hz, 5.1(side), fltp, 448 kb/s
Metadata:
title : DD5.1 448K Cantonese
下面是我参考了一些帖子之后敲的代码(输入输出文件略写),并且附上参考帖子:
ffmpeg
-hwaccel_output_format cuda \ 调用cuda解码?这里看帖子比较懵,原来写的是-hwaccel cuvid,按照警告改成新版格式(笔电装了cuda tool)
-i
INPUTFILE \
-map 0:0 -map 0:1 -map 0:2 \ 原片子所有轨道都要
-c:v hevc_nvenc -preset slow -tier high -rc vbr_hq -cq 25 -qp 18 -spatial_aq 1 -aq-strength 1 \ 此处的-preset,-rc,-spatial_aq参考了这个
\ -cq,-qp 参考了这个 和这个
-c:a:0 flac -ac:a:0 2 -b:a:0 512k \ 音频处理不太懂,由于windows下的ffmpeg不知道如何安装关联libfbk_aac,所以随便试了一下flac编码,
-c:a:1 flac -ac:a:1 2 -b:a:1 192k \ 本来是想用nero aac的,如果有什么错误还望指出
OUTPUT \
-hide_banner \
这么一搞大概把11.7G的原片压制到了4.5G,如果调的严格些是能压得更小的,画质对比图就不放了,反正我对画面还原要求也不高
下图与上面的压制参数结果无关,是我测试-cq参数时候截图的,这次压制把视频流干到了1.9G(原视频流约9.6G)
接下来是一些问题:由于我不太了解很多参数设定的意义,还望各位大佬不要喷我
1、上面我写得调用cuda是否能生效?还是我写错了,完全不需要这一步,直接让cpu去解码就行了?
2、看网上一些帖子说,hevc_nvenc调节cp是类似软压调节crf的,但实际上我感觉影响不太大,是不是默认就得了?
3、关于量化用的qp参数,是不是应该像有的帖子说的那样设置一个范围,而不是直接定一个值?
4、windows下ffmpeg怎么添加其他一些编码库,比如libfdk_aac,只能依靠vs来编译吗?
最后,感谢各位抽时间听我一通流水账!
评分
查看全部评分