获取ffmpeg支持的滤镜(波导的效率私房)

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

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

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

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

显卡编码原来这么简单

获取ffmpeg支持的滤镜(波导的效率私房)(1)

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

获取ffmpeg支持的滤镜(波导的效率私房)(2)

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

获取ffmpeg支持的滤镜(波导的效率私房)(3)

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

获取ffmpeg支持的滤镜(波导的效率私房)(4)

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

获取ffmpeg支持的滤镜(波导的效率私房)(5)

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

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

获取ffmpeg支持的滤镜(波导的效率私房)(6)

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

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

MKV重封装成MP4也不难

获取ffmpeg支持的滤镜(波导的效率私房)(7)

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

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

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

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

获取ffmpeg支持的滤镜(波导的效率私房)(8)

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

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

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

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

获取ffmpeg支持的滤镜(波导的效率私房)(9)

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

获取ffmpeg支持的滤镜(波导的效率私房)(10)

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

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

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

获取ffmpeg支持的滤镜(波导的效率私房)(11)

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

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

获取ffmpeg支持的滤镜(波导的效率私房)(12)

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

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

获取ffmpeg支持的滤镜(波导的效率私房)(13)

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

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

获取ffmpeg支持的滤镜(波导的效率私房)(14)

当然可以。

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

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

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

获取ffmpeg支持的滤镜(波导的效率私房)(15)

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

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

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

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

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

获取ffmpeg支持的滤镜(波导的效率私房)(16)

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

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

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

获取ffmpeg支持的滤镜(波导的效率私房)(17)

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

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

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页