ffmpeg mp3转rtp_#波导的效率私房# 你要的FFmpeg高级技巧全在这里

大家好,我是波导终结者。

上一期的效率私房分享了几个FFmpeg私房技巧,虽然不像烂大街的什么UP主推荐一样热度高还给首页,但是来交流、有硬需求的小伙伴还是不少的,今天就来解答一下,上期几个小伙伴的需求。

全网唯一独家干货,你到墙外也找不到的,先收藏点赞关注再看,不过份吧?

PS:那些说“私房”就该有那种玩艺儿没有就要举报的再出来跳跳?

显卡编码原来这么简单

af97dcb482afcc3f5d7a7f075e8ac5c4.png

上回有位朋友说到GPU加速,也即显卡编码。因为上期主要是分享重封装,所以并没有用到显卡编码。而强行将1080P视频转换成level 3.0的代码,我在评论里也解释过了,显卡编码是奔着高规格高质量高速度去的,谁给你转level 3.0?直接报错好吗,不信你自己试试。

74d4fc72800772cc793846206275ece2.png

所以这里,把profile改成了high,level 改成4.1是比较正常的规格。FFmpeg内置的264编码器也不止一个,但这里还是沿用libx264,因为其他的也不见得比它好。其实大部分代码还是沿用上次强转level 3.0的。

e68948619ef6f4f2881ba200bf7c9e32.png

2倍多的速度,CPU很努力了,换多好的CPU,就有多快呗。

c4041dbc5f621e6fb396e19e8c9dd9ae.png

那怎么样用显卡编码呢?很简单,把编码器换成h264_nvenc就行了。不过要注意的是,显卡编码器的参数一般是要比CPU编码来得少的,所以有的参数无效,甚至有的参数会报错,每个人需求不同,我就不细分了,只能具体情况具体分析。

59da7f6b70bccd187a8b22dffe93d623.png

想要知道显卡编码是不是成功了,很简单,跑一遍呗。14.6x的瞬时速度,整个转下来差不多是15x的速度,你说显卡编码成功了没?你上好的显卡,它就能更快,你给我寄张3080来,我让它飙到百倍以上~

其实我上次没分享,一个是因为这个太简单了呀,改一下不就好了,网上也能查得到。另一个就是,之所以用FFmpeg写脚本,一般是要完成那些GUI工具完不成的事情,比如需求特殊等等。而如果只是要用显卡编码的话,现在满地的工具都可以实现,当然,讽刺的是,它们99%都是封装的FFmpeg。

8840e690135688947c4792bf45758b3f.png

目前我用的最顺手,也比较稳定的,就是ShanaEncoder,你直接选带NVENC的就是显卡编码。

再重复一次,写脚本是为了那些比较特殊、没办法用现成GUI工具做的需求,你如果只是普通转码,免费开源基于FFmpeg的工具满地都是。

mkv重封装成mp4也不难

d4f7146cbcee6d9319018ea0d13b9eae.png

这位朋友的需求,是将MKV重封装成MP4,这个说难不难,说易不易。

说它易吧,如果只是封装了一个音频和视频的MKV,那就是换个壳而已,网上有现成的脚本。

说它难吧,对MKV有点了解的朋友应该会知道,它算是一个比较特殊的容器格式,从原理上来讲,它更接近于压缩包,所以可以放进几乎任何内容,音频视频,字幕图片,文本甚至其他文件……所以,对MKV的支持才会是最难的。

这里,我直接拿一个复杂点的MKV文件,来跟大家分享一下,MKV文件怎么快速重封装成MP4文件。

3fac0d3e047322e57c0893882d624c4d.png

之前收藏的数码宝贝第一部,1080P,H265编码,三音轨(日配原声,台配国语,粤配雷猴),简繁双字幕,封装在一个MKV文件里。

你用GUI工具打开,当然可以把里面的内容一个个提出来,但是如果几十集都要这样手动提,然后再去怎么样整合的话,那还不整死人了。这里我就教大家怎么样把要的东西提出来。

首先你要找到要的东西,第一当然是视频,第二,我要国配,字幕不要,然后直接封装成MP4格式。MP4不支持内嵌的外挂式字幕,如果要字幕只能通过转码把字幕压到视频上,这里略过。

找到要的东西之后,记下它们的ID,就是 mkvextract:0,这里的0,记住从0开始。我要的视频ID是0,音频ID是4,记下来。

b7d17698d01e2d66641e80e28cedb196.png

如果你没有这种专业工具,手头有个播放器,别太烂或者国产全家桶只给广告不给功能的,应该都有查看视频信息的功能。拉下一来,找到这个ID就对了,这里它是从1开始的,写到脚本里要减1。唉,编程里的下标这个东西,不解释了啊。

9260ba3407bc6af8e1bdb1415c08ce60.png

接下来就是见证奇迹的时刻啦,三连一波先走起来~

关键代码部分我都给你标红了,-map 0:0,第一个0指的是输入文件,因为ffmpeg可以接受多个输入(下一节就会讲到),你要指定具体是哪个文件,只有一个的话那肯定全是0。第二个0就是我刚才叫大家记下的,0就是我们视频的轨道,对吧。

所以后面的-map 0:4也就好理解了,音频轨道,不用我再多说了吧。

710ea835cc01ed1fcfb60d4c0965298c.png

我一直说重封装,重封装,而不是转码,看了这张图就知道为什么了。重封装的速度极快,就是一瞬间的事情,快到我根本来不及截图,只能把屏幕录下来,再到录像里暂停。

2.15e+03倍是多少倍来着……

741e23e0955cf25716ecf23660e5ad65.png

这个方法既可以解决部分设备不支持MKV的问题,剔除了不必要的音轨又可以节省空间,同时我写给你们的都是批量处理的代码,目录下所有符合条件的文件一次性就全部弄好了。

别家音频质量好?拿来用就是了

f971daeebf6799fccbf4b5dff99e2d3d.png

FFmpeg的音频编码部分我没有仔细研究过,不过其他第三方库的质量和速度更优秀,倒是挺有可能的,音频这块人家有另外的地盘儿。

那么,如果想要用更优秀的第三方库处理音频,然后再用FFmpeg强大的功能把视频和音频合并封装成文件,可以实现吗?

49408e20aa76162a16e891ae286b5011.png

当然可以。

为了通用性,我强烈建议大家让音频文件和视频文件的文件名一样,这样不管有多少文件来,都是批处理点一下就搞定的事情。

这里我有一个MP4文件,AAC的音频编码,然后假设我想要MP3格式的音频,又不想用FFmpeg自带的转换,而是觉得第三方库的质量和速度更好,怎么操作呢?

很简单,先转出MP3文件来,确保文件名相同,再放到同个目录下。

636b2fea6ce83d2517bf7628c300af6f.png

然后就是见证奇迹的时刻啦。

记得上一节跟大家谈过,FFmpeg可以接受多个文件输入吧,这里就分视频文件和音频文件来输入。

输入之后,利用上一节学到的MKV封装时,指定流的方式,用map指令来指定流。

先指定视频文件的0轨,一般视频0轨就是视频轨。当然如果是手动打命令封装,也不一定是0轨,具体的看文件,只不过颠倒封装顺序没啥意义就是了……

-map 1:0指定第二个文件为音频文件,因为转成了MP3,MP3只有一轨,所以还是0。前面的1其实是输入的文件顺序,第2个文件(下标都要减1,从0开始)。

de1afd6183df9898326bd4c57d7de5aa.png

这么一重封装,光速完成,不录屏了,反正重封装是极快的~

可以看到,音频已经由原来的AAC变成了MPEG,播放一下,完全没有问题。

当然,不同格式的容器能接受的音频不同,如果报错那就是塞不进去,这个就要根据自己的需求尝试了。

eddee4cef2a0aeadca6dec63eeb672aa.png

好,第二期的#波导的效率私房#就先到这里了,搜遍全宇宙都找不到的干货,不值得你关注点赞收藏一波吗?代码文件我会放到网盘里,自行取用即可。

感谢观看,我们下期再见。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值