第一期:祖宗降临!FFmpeg原来这么强!

2020-09-10 19:23:25 199点赞 1221收藏 97评论

创作立场声明:全网唯一超强原创干货,能否从那些翻来覆去的云推荐、EXCEL洗稿手里要一个推荐位?

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

之前开了一个“早下班”系列,结果我发现,我开了早下班的值无不言,以及早下班EXCEL之类的,屁股后面就跟了一堆“EXCEL早下班值无不言”,把我乐得直不起腰来,也写不动早下班系列了。借着这次达人专栏活动,我另开一个效率私房系列得了。

#波导的效率私房# 第一期:祖宗降临!FFmpeg原来这么强!

第一期:祖宗降临!FFmpeg原来这么强!

关于FFmpeg,我已经不止一次的谈过了,然而很多人对它的强大仍然一无所知。

诚然,它并不是世界上唯一的编码库,但是相对于TMPEGEnc、Adobe等项目,FFmpeg最大的优势当然就是开源免费。来自全世界的各方高手都在为这个库进行维护和更新,自然在各方面都有优势。

第一期:祖宗降临!FFmpeg原来这么强!

不管你用的是免费的转码软件,还是收费的MediaCoder,不管是直播串流软件OBS,还是各大视频下载工具分段下载完成之后合并视频所需的核心部件,甚至音频、图片等软件,很多依赖的都是FFmpeg。比如我之前推荐给大家过的免费开源动图录制、编辑软件ScreenToGif,它就可以调用FFmpeg的GIF模块,而且效果几乎是最好的。

第一期:祖宗降临!FFmpeg原来这么强!

关于FFmpeg怎么使用,也有好几种方式。做开发的朋友,会用代码的方式直接调用FFmpeg库,或者根据自己的软件结构进行重构(比如OBS)。但是一般朋友,在Windows底下还是采用直接EXE文件调用的形式。这方面网上已经有非常多的文章了,我就不重复了,老是洗别人的有意思么~无非就下载官方的安装程序,它会帮你把路径配置好,或者直接下载FFmpeg.exe,然后手动配置。再不济,跟脚本放到同一个目录下也能直接用。

废话不多说,我们直接来进入实战。

一、利用FFmpeg进行重封装

第一期:祖宗降临!FFmpeg原来这么强!

因为有不少相关方面的专业原创,在知乎老是能收到类似问题的推送。

关于容器和编码格式之间的具体定义和区别,这里就简单聊一下。编码格式是你视频用的什么标准压缩,mpeg4,H264,H265等等,音频同理。而容器则是,你用什么标准,把音频和视频整合成一个文件。

同样是H264视频编码,AAC音频编码的内容,它可以灌进MP4容器,AVI容器,FLV容器,MKV、TS等等等等。

理论上,只要容器兼容,音频和视频都可以无损重新封装进另一种容器内(只改后缀是不行的啦,死心吧)。不同容器有各自的特点。比如MP4兼容性好,支持多音轨,但是损坏之后修复困难,FLV则是流媒体标准,现在直播串的流都是这个格式,缺点是不支持多音轨,TS则是广播电视使用的容器,比如你们现在看的IPTV等。

像上图朋友,他做的“转换”,就是重编码,而不是重封装。如果内容或者具体参数不需要改变,重编码是很不划算的行为,不仅慢,而且画质损失也挺明显的。那么什么情况下我们需要重封装呢?仔细想想还是挺多的。一个FLV,你要拉到非线编软件里,你要不要把它变成MP4?一个MP4,你要把它用在数字电视广播上,一样要封装到TS里。

既然是我个人的私房,就不多说废话或者网上抄东西糊弄大家,直接上干货。

第一期:祖宗降临!FFmpeg原来这么强!

BAT脚本文件的语法比较奇葩,你可能觉得图上就两三行,实际要调试一晚上的。

我稍微解释一下这些代码,output那几行,就是建一个output子文件夹用于存放转换后的文件,要不然堆一起就很乱。

set hz=.ts,就是设置一下后缀为TS,到时候FFmpeg会自动识别,封装成TS文件。

for那一行,读取BAT脚本文件同目录下的mp4和ts后畷,并且重封装成TS文件,放到output子文件夹下。因为是重封装,所以视频和音频都不重编码,这里-codec copy是关键,就是把音频和视频全部拷贝。

这样下来就能把mp4文件封装成ts,而反过来操作,就是把ts封装成mp4。由于不重编码,速度非常快,而且音视频质量绝对没有任何损失。

二、FFmpeg强制转码,满足奇葩要求

第一期:祖宗降临!FFmpeg原来这么强!

我曾接到过一个奇葩需求:某甲方他们的设备不行,有的型号的设备解码普通的H264会出现卡顿,硬说是我们内容问题,要求我们降低视频规格,把High 4.1降到Main 3.0。

但是,根据官方规范,1080P(1920X1080)的视频,要Level4以上的规格。大部分的转码软件会自动识别和调整,就算是Premiere和AME,分辨率和Level也有一个底限,选了Level3.0,分辨率就只能到720P,反过来1080P就会自动跳到Level4.0以上规格。

第一期:祖宗降临!FFmpeg原来这么强!

再加上他们还有很多奇葩要求,比如固定码率,而且要显示为CBR,帧数固定25等等,这时候,只能用FFmpeg上了。

核心代码是-c:v libx264 -profile:v main -level 3.0这几个参数,这个时候没有办法重封装了,只能重编码。

不过,-c:a copy至少保证了音频不编码,直接套用(a就是audio的意思)。

-vsync cfr force-cfr=1 -r 25这几个参数保证转出来的视频,帧率那里显示是固定的25,而不是可变帧率,需要的朋友可以拿去用~

三、快速批量减小视频音量

第一期:祖宗降临!FFmpeg原来这么强!

现在有一批视频,甲方突然说,他们的系统有点问题(哦不,他们肯定是说:你们的视频有问题!),音量大了会爆音,要求我们的视频统一压到-10dB,这时候怎么办?

重新做一遍嘛,源那么大早就不在了。重新转码嘛,倒是有工具可以调整音量,但是在视频规格上又不能满足他们的各种要求(见上一条)。

有办法在视频不重编码的情况下,只把音频降低音量,并且重封装吗?当然可以。

第一期:祖宗降临!FFmpeg原来这么强!

核心参数:-filter:a "volume=-10dB",懂点英文的应该知道啥意思了,不罗嗦拿去用。

第一期:祖宗降临!FFmpeg原来这么强!

好了,今天的分享就到这里,各种需求千奇百怪,基本上不是反逻辑的,FFmpeg都能实现,真的是各种转码软件的祖宗,而且还不要钱。大家知道为什么那么多款软件各有优劣吗?因为它们的本质其实也就是封装FFmpeg的参数,而每个作者的理解和经验不同,所以软件就会各有所长。

脚本我会放到度盘里,大家如果有什么需求,点赞关注一下然后留言,这个要求不过份吧?这些东西你全网绝对找不到一个软件能完美实现,找人帮你弄几千块也搞不定的。

感谢观看,点个关注收藏再走呗,我们下期再见。

展开 收起
97评论

  • 精彩
  • 最新
  • 置顶 发动机号1ai2Y0DgoAYjIPtCyVQxOxw横批vhar

    校验提示文案

    提交
  • 支持波导,被洗稿云推支配的站里,终于有篇像样的干货了

    校验提示文案

    提交
    瞎说什么大实话~

    校验提示文案

    提交
    收起所有回复
  • 我对ffmepg的印象只有emby调用它然后干爆我的内存

    校验提示文案

    提交
    你觉得是emby的问题还是ffmpeg的问题呢 [傻笑]

    校验提示文案

    提交
    收起所有回复
  • 不明觉厉,恭喜大佬开通专栏

    校验提示文案

    提交
    换个名字而已***

    校验提示文案

    提交
    借楼咨询老大,酷@狗下载的mkv格式怎么简单无损的转成mp4,在下小白,麻烦说的详细一点,我车机只能识别mp4

    校验提示文案

    提交
    还有4条回复
    收起所有回复
  • 大佬,求分享~~

    校验提示文案

    提交
    发出来了~看评论

    校验提示文案

    提交
    收起所有回复
  • 另外一个祖宗级牛叉的开源软件是ImageMagick,希望大拿有机会介绍一下

    校验提示文案

    提交
    到时候我出一篇图片相关的

    校验提示文案

    提交
    收起所有回复
  • 这玩意编码效率高吗?支持nvenc吗?

    校验提示文案

    提交
    请看我的这一篇:
    去看看
    这玩意儿是目前效率最高,nvenc支持最好的。目前除了大厂(比如Adobe等几大非线编软件),其他的显卡加速基本都是调用这玩意儿的

    校验提示文案

    提交
    收起所有回复
  • 我现在要被 FFmpeg的自己的AAC编码要搞死,速度和质量上赶不上Libfdk-aac

    校验提示文案

    提交
    有一种操作是音视频分开操作,先用你要的压个音频文件,再和视频封装进去

    校验提示文案

    提交
    我是直接encode 音频,在armv7a的cpu下,17秒的pcm 编码耗时 6秒,但是解码只要400ms

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • 上海广电的标清流是mpeg2+mp3简直奇葩

    校验提示文案

    提交
    不奇怪,为了设备兼容性,什么事儿都干得出来。我遇过一家,连gop,b帧排列这些都要一帧一帧要求的,折腾了我几个通宵。反正他们是不会承认设备渣的,只能无脑降标准。

    校验提示文案

    提交
    那是真的惨

    校验提示文案

    提交
    还有5条回复
    收起所有回复
  • 在分辨率和码率之间怎么权衡呢?比如1080p和720p,但前者码率缺只有后者1/2(帧率一样>哪种更清晰一些呢? [期待]

    校验提示文案

    提交
    H264编码,1080P至少要3-4M,720P至少2M,前提是正常编码(有的烂编码器10M甚至20M都会糊),如果是运动得厉害的,可能得翻倍。所以你要看视频具体内容和码率,比如1M和2M,肯定留2M,因为1M的1080P除了幻灯动画片根本没得看,而10M和20M,不出意外的话1080P基本清晰,肯定留前者。

    校验提示文案

    提交
    收起所有回复
  • 请教大神,录制电视节目为avi或者mp4后剪掉中间广告出现问题,被剪的地方画面卡顿声音不卡,如果逐帧标记后剪虽然剪的地方画面不卡了,但是声音不同步,而且重新压回avi或mp4后文件大小比录制的不剪广告的还大,请教大神满足这样需求的脚本怎么写。

    校验提示文案

    提交
    具体是用什么剪的。你如果用非线编剪不应该出现上面俩问题呀。重新压回去文件变大,那就是码率和压缩率问题。视频你每压一遍,都会损失一遍画质,为了保证画面损失尽可能小,只能抬高码率~

    校验提示文案

    提交
    用ffmpeg,写脚本剪的

    校验提示文案

    提交
    还有2条回复
    收起所有回复
  • FFmpeg是真的强大 [抽烟]

    校验提示文案

    提交
    嗯,现在9成的相关软件调用的都是FFmpeg

    校验提示文案

    提交
    腾讯、爱奇艺、优酷下载的视频,不能用第三方播放器播放,也可以用FFmpeg转成mp4 [龇牙]

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • 我对这个的印象就是 下载在线视频方便

    校验提示文案

    提交
    哈哈, 下载没他的事,但下载完合并视频全是用ffmpeg

    校验提示文案

    提交
    收起所有回复
  • @波导终结者 请教大佬 现在那ffmpeg做直播电影放到家里做成自己的电影轮播台 发现好像在直播推流同时可以推一个字幕流 这样就可以在播放器选择是否开启字幕 搜了一下 网上有类似提问 但没回答 [喜极而泣] [喜极而泣] 大佬这个能实现吗?

    校验提示文案

    提交
    肯定能实现,我之前在谷歌上有搜到过类似的东西,但应该挺复杂的。FFmpeg我主要用来编码,具体需求再翻到墙外找解决办法,推流我比较少用,你到墙外翻一下,资料很多。

    校验提示文案

    提交
    好的 我再搜搜研究研究

    校验提示文案

    提交
    收起所有回复
  • 这题图简洁霸气。

    校验提示文案

    提交
    毕竟是祖宗 [龇牙]

    校验提示文案

    提交
    收起所有回复
  • 硬件加速也来一期吧。还有一个评论问到的无损剪辑拼接加减水印等等

    校验提示文案

    提交
    最近在装机,等显卡就位

    校验提示文案

    提交
    收起所有回复
  • 私房呢???是我理解错误了吗?可以举报一波

    校验提示文案

    提交
    当然是你理解错误了

    校验提示文案

    提交
    收起所有回复
  • 不写下GPU硬件加速?cpu算到什么时候去

    校验提示文案

    提交
    下期,兄弟,这期主要是重封装。压level 3.0用GPU效果也不行,人家规格是往高了看齐的~

    校验提示文案

    提交
    收起所有回复
  • ffmpeg不支持hdr [傻笑]

    校验提示文案

    提交
    以ffmpeg和hdr为关键字搜索一下试试?

    校验提示文案

    提交
    哈哈记混了,是解码的ffdshow

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • 见过大神在命令行下用ffmpeg做监控视频恢复

    校验提示文案

    提交
    嗯,这个库无所不能,就看用的人了

    校验提示文案

    提交
    收起所有回复
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
1.2K
扫一下,分享更方便,购买更轻松