xtellaris 发表于 2020/4/9 23:47

试玩ffmpeg压制视频(主用hevc_nvenc)的过程以及一些疑问

本帖最后由 xtellaris 于 2020/4/10 01:01 编辑

不知道坛里有没有熟悉ffmpeg的大佬,发帖交流交流,顺便说说说疑惑。
由于本贴主要目的是交流记录和提问,故包含大量流水账废话,不喜欢的朋友请不要浪费宝贵时间。

起因是疫情期间实在无聊,因此整了很多P2P下载软件玩,eMule的MOD、BT客户端之类的。特别是eMule,刚发现这个P2P工具的时候很惊喜,能搜索 后来发现qb装了python脚本能搜种子,当然跟电骡比还是不够彻底,能共享,最重要很符合心目中的互联网精神,共享、开源 好羞耻啊,写日志的时候怎么没感觉。
https://s1.ax1x.com/2020/04/09/GIl6GF.png
目前用的是基于忍者骡的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)
https://s1.ax1x.com/2020/04/10/GIGaWT.png

接下来是一些问题:由于我不太了解很多参数设定的意义,还望各位大佬不要喷我
1、上面我写得调用cuda是否能生效?还是我写错了,完全不需要这一步,直接让cpu去解码就行了?
2、看网上一些帖子说,hevc_nvenc调节cp是类似软压调节crf的,但实际上我感觉影响不太大,是不是默认就得了?
3、关于量化用的qp参数,是不是应该像有的帖子说的那样设置一个范围,而不是直接定一个值?
4、windows下ffmpeg怎么添加其他一些编码库,比如libfdk_aac,只能依靠vs来编译吗?

最后,感谢各位抽时间听我一通流水账!

小樱 发表于 2020/4/10 15:58

stream #0:0可以 很明显看到nvenc已经在工作了,顺便一说N卡对家用显卡限制并行2个任务,只有专业卡才能多线程,不过论坛内有其他方法可以进行破解实现多并行

而且ffmpeg不仅仅只支持N卡,还能支持A卡和I卡,都能调度进行工作10
N卡方面hevc推荐1650S 1660 1660S编码器都是图灵的,性能对比帕斯卡提升巨大,只有1650是阉割版的帕斯卡(1650也就是1050-1080同样的帕斯卡核心)
A卡方面5700 5700xt都支持hevc,不过容易出现黑屏问题
I卡方面HD630以上就支持hevc了

nvenc的cqp是量化器,类似crf,但是还是有一些区别,CQP是把某个量化值作为目标,CRF则是把某个输出“视觉质量”作为目标。这篇文章有一些介绍,nvenc下只能使用cqp与cbr vbr三种模式。
只能说根据自己的需求进行调节了,数值越小文件越大越清晰,264我用的20,hevc我用的22。
ShanaEncoder CRF(质量)、CQP(量化器)、ABR(比特率)三种编码模式有什么区别,应该使用谁?
https://bbs.itzmx.com/forum.php?mod=viewthread&tid=89019&fromuid=1

ffmpeg开源的,想加其它的滤镜和库就得自己编译了,默认的过滤器等等已经很丰富足够用了。

其实嘛,我觉得,Windows中的话,你可以搭配gui来使用更好,,目前世界上ffmpeg最好的gui就是ShanaEncoder了。

xtellaris 发表于 2020/4/11 00:20

小樱 发表于 2020/4/10 15:58
stream #0:0可以 很明显看到nvenc已经在工作了,顺便一说N卡对家用显卡限制并行2个任务,只有专业卡才能多 ...

感谢解答!没想到等来了小樱大佬XD
反思了一下自己怎么没在坛里认真搜教程就直接发帖问了,误以为bing搜来的指南教程已经够了,其实坛里的帖子值得好好挖掘
大概了解了一下,shana encoder真的好棒啊,当初用小丸的时候就在想为何有gui那么好用,ffmpeg没有其他gui封装呢,原来是我信息闭塞啊;今天下午有点闲就看了看官方wiki里的windows编译,说说要先配置minGW和mysy环境,水平有限看得有点懵,下载了环境不过还没尝试,现在shana有Neroaac的库,我就可以暂时搁置这条路子了,开心2333

btw,搜shana的时候看到github上那个搬运shanaEncoder的项目是小樱大佬你做的吗?star了233,看sf页面,开发者貌似是韩国人?

提到破解N卡多线程,有些新问题,今天太晚了还没搜索过,先问问,如果搜索引擎就能解答的请大佬们无视:

我大概参考了https://github.com/keylase/nvidia-patch/tree/master/win 这个项目,修改了dll文件,看坛里的指南跟我之前找到的是一样的。压片时nvenc占用好像是比原来高一点,但我心里没什么底,如何确知我破解成功了呢?

之前看有的帖子用hevc_nvenc能够调b帧参数,但我-h了一下,我笔电的1050ti里的nvenc貌似并不支持调bf,这是帕斯卡架构的硬件限制吗?
自问自答,看来10系显卡确实不支持bf   https://developer.nvidia.com/video-encode-decode-gpu-support-matrix#Encoder

小樱 发表于 2020/4/11 00:33

xtellaris 发表于 2020/4/11 00:20
感谢解答!没想到等来了小樱大佬XD
反思了一下自己怎么没在坛里认真搜教程就直接发帖问了,误以为bing搜 ...

如何确知我破解成功了呢?

三开shana,同时开始,能突破2个并行数量限制就是突破破解成功了,,
经常有些人有这需求,问我怎么破解,基本是专门搞压片工作室的就很需要这个了,因为双开显卡nvenc核心芯片不一定满载工作了,更多的并行任务可以节省时间。
嘛,个人基本上用处不大了,毕竟像我这种臭打游戏的还是多。

搜shana的时候看到github上那个搬运shanaEncoder的项目是小樱大佬你做的吗
嗯,,汉化啥我都丢在上面,这个软件作者是韩国人,一位单身狗大学生。现在也有了官方汉化,不过看起来有点怪怪的,打个汉化补丁也是不错的。

gal.exe 发表于 2020/4/11 10:46

可以通过外置程序来编码aac 质量更好 例如neroaac
ffmpeg.exe -y -i "{input}" -f wav - | nae.exe -he -br 64000 -ignorelength -if - -of "{input}_temp.m4a"
ffmpeg.exe -y -i "{input}" -c:v libx264 -preset veryslow -crf 24 -bf 6 -refs 6 -qcomp 0.5 -aq-mode 2 -aq-strength 0.8 -psy-rd 0.3:0 -deblock 1:1 -x264opts min-keyint=1 -vf "scale=1280:720" -an "{input}_temp.m4v"
ffmpeg.exe -y -i "{input}_temp.m4v" -i "{input}_temp.m4a" -map_chapters -1 -c copy "{output}_output.mp4"
del "{input}_temp.m4a"
del "{input}_temp.m4v"

gal.exe 发表于 2020/4/11 10:46

本帖最后由 gal.exe 于 2020/4/11 10:49 编辑

上面是我复刻了一下小丸的视频编码参数。(其实还是略有区别)
音频编码仅供参考,其实也可以用QAAC


顺便吐槽,论坛实在太卡,我回复还得挂梯子才能快点 国内还不如国外IP快

xtellaris 发表于 2020/4/15 12:38

小樱 发表于 2020/4/11 00:33
三开shana,同时开始,能突破2个并行数量限制就是突破破解成功了,,
经常有些人有这需求,问我怎么 ...

早上试了一下,能三开,破解成功了,感谢樱大佬指点!
还有个小问题,就是对于多轨道的mkv,比如单个视频流+两个音频流的,想要单压视频流,压制保留两个音频流,也就是源文件3个流,输出还是3个流,用shana的话,再软件里找了一圈没找到,目前只能想到按F8自己填map语句,不知道是不是我没看仔细?

xtellaris 发表于 2020/4/15 12:58

gal.exe 发表于 2020/4/11 10:46
可以通过外置程序来编码aac 质量更好 例如neroaac
ffmpeg.exe -y -i "{input}" -f wav - | nae.exe -he - ...

感谢大佬指点!
其实我主要还是头疼外置的程序怎么和ffmpeg关联起来,就比如大佬你回复我写的代码里“wav - | nae.exe”这个我就蒙了,是要把相关的编码器.exe文件放到ffmpeg的bin目录下去吗?
用qaac的话,电脑是不是得装quick time?

小樱 发表于 2020/4/15 16:29

xtellaris 发表于 2020/4/15 12:38
早上试了一下,能三开,破解成功了,感谢樱大佬指点!
还有个小问题,就是对于多轨道的mkv,比如单个视 ...


这里试试行不行,不行的话那要转换后,然后用mkvtoolnix合成音轨

小樱 发表于 2020/4/15 16:32

gal.exe 发表于 2020/4/11 10:46
上面是我复刻了一下小丸的视频编码参数。(其实还是略有区别)
音频编码仅供参考,其实也可以用QAAC



顺便吐槽,论坛实在太卡,我回复还得挂梯子才能快点 国内还不如国外IP快

服务器在国外的啦!用的是祖传卡顿CF

gal.exe 发表于 2020/4/16 09:08

xtellaris 发表于 2020/4/15 12:58
感谢大佬指点!
其实我主要还是头疼外置的程序怎么和ffmpeg关联起来,就比如大佬你回复我写的代码里“wa ...

这个写法是管道,可以把nae.exe放到一起去,也可以放windows目录。qaac记得有提取版的,不用装qt。
qaac.exe 自己搜一下。注意别下到带毒的就好
页: [1]
查看完整版本: 试玩ffmpeg压制视频(主用hevc_nvenc)的过程以及一些疑问