FFmpeg从入门到精通笔记之四[通俗易懂]

FFmpeg从入门到精通笔记之四[通俗易懂]介绍在FFmpeg环境下使用libx264进行H.264(AVC)软编码的操作,H.265(HEVC)的编码操作使用的是libx265,但是参数基本类似。FFmpeg软编码H.264与H.265当前网络中常见的视频编码格式要数H.264最为火热,支持H.264的封装格式有很多,如FLV、MP4、HLS(M3U8)、MKV、TS等格式FFmpeg本身并不支持H.264的编码器,而是由第三方模块…

大家好,又见面了,我是你们的朋友全栈君。

介绍在FFmpeg环境下使用libx264进行H.264(AVC)软编码的操作,H.265(HEVC)的编码操作使用的是libx265,但是参数基本类似。

FFmpeg软编码H.264与H.265
当前网络中常见的视频编码格式要数H.264最为火热,支持H.264的封装格式有很多,如FLV、MP4、HLS(M3U8)、MKV、TS等格式
FFmpeg本身并不支持H.264的编码器,而是由第三方模块对其进行支持,例如x264和OpenH264。使用x264进行H.264编码时,所支持的像素格式主要包含yuv420p、yuvj420p、yuv422p、yuvh422p、yuv444p、yuvj444p、nv12、nv16、nv21.

  • x264编码参数
  • H.264编码举例
      - 编码器预设参数设置preset.ultrafast,superfast,veryfast,faster,fast,medium,slow,slower,veryslow,placebo.随着所设置参数的不同,所编写出来的清晰度也会有所不同,设置相关的预设参数之后,有很多参数也会被设置所影响。
      - H.264编码优化参数tune.使用tune参数调优H.264编码时,可以包含如下几个场景:film,animation,grain,stillimage,psnr,ssim,fastecode,zerolatency。在使用FFmpeg与x264进行H264直播编码并进行推流时,只用tune参数的zerolatency将会提升效率,因为其降低了因编码导致的延迟。
      - H.264的Profile与level设置。x264编码器支持Baseline,Extented,Main,High,High10,High422,High444共7种profile参数设置。
      - 控制场景切换关键帧插入参数sc_threshold。在FFmpeg中,通过命令行的-g参数设置以帧数间隔为GOP的长度,但是当遇到场景切换时,例如从一个画面突然变成另外一个画面时,会强行插入一个关键帧,这时GOP的间隔将会重新开始,为了避免这种情况的产生,可以通过使用sc_threshold参数进行设定以决定是否在场景切换时插入关键帧。
      - 设置x264内部参数x264opts。由于FFmpeg设置x264参数时增加的参数比较多,所以FFmpeg开放了x264opts,可以通过这个参数设置x264内部私有参数,如设置I帧、P帧、B帧的顺序及规律等。视频中的B帧越多,同等码率时的清晰度将会越高,但是B帧越多,编码与解码所带来的复杂度也就越高,所以合理使用B帧非常重要,尤其是在进行清晰度与码率衡量时。
      - CBR恒定码率设置参数nal-hrd。编码能够设置VBR,CBR的编码模式,VBR为可变码率,CBR为恒定码率。

FFmmpeg硬编解码
当使用FFmpeg进行软编码时,常见的基于CPU进行H.264或H.265编码其相对成本会比较高,CPU编码时的性能也很低,所以出于编码效率及成本考虑,很多时候都会考虑采用硬编码,常见的硬编码包含Nvidia GPU与Intel QSV两种,还有嵌入式平台,如树莓派、瑞芯微等。

  • Nvida GPU 硬编解码。FFmpeg集成Nvida显卡视频处理模块后,使用FFmpeg能够将Nvidia的视频编解码功能快速使用起来。
      - Nvidia硬编码参数
      - Nvidia硬编解码参数使用举例
  • Intel QSV硬编码。Intel QSV也是一种不错的方案,FFmpeg对于Intel的QSV支持相对也比较灵活。
  •   - Intel QSV H.264参数说明
      - 树莓派硬编码

FFmpeg输出MP3
FFmpeg使用第三方库libmp3lame即可编码MP3格式。而且MP3的编码还是低延迟的编码,可以支持的采样率比较多,采样格式也多。

  • MP3编码参数介绍。查看FFmpeg对于MP3的参数支持,可以通过ffmpeg-h encoder=libmp3lane得到MP3的参数。
  • MP3的编码质量设置。在FFmpeg中进行MP3编码采用的是第三方库libmp3lame,所以进行编码时,需要设置编码参数acodec为libmp3lame,
  • 平均码率编码参数ABR.是VBR与CBR的混合产物,表示平均码率编码,使用ABR参数之后,编码速度将会比VBR高,但是质量会比VBR的编码稍逊一些,比CBR编码好一些,在FFmpeg中使用参数-abr来控制MP3编码为ABR编码方式。

FFmpeg输出AAC
AAC是一种编码效率更高、编码音质更好的音频编码格式,常见的使用AAC编码后的文件存储格式为m4a。FFmpeg可以支持AAC的三种编码器:1).aac:FFmpeg本身的AAC编码实现;2).libfaac:第三方的AAC编码器;3).libfdk_aac:第三方的AAC编码器

  • FFmpeg中的AAC编码器使用
  • FDK AAC第三方的AAC编解码Codec库
      - 恒定码率(CBR)模式
      - 动态码率(VBR)模式

系统资源使用情况
音视频转码与音视频转封装的不同之处在于音视频转码会占用大量的计算资源,而转封装则主要是将音频数据或者视频数据取出,然后转而封装(MUX)成另外一种封装格式,转封装主要占用IO资源,而转码主要占用CPU资源,同时转码也会使用更多的内存资源。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/153393.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • pycharm模板设置时间_pycharm编辑配置

    pycharm模板设置时间_pycharm编辑配置pycharm模板设置模板的作用过程模板的作用可以在新建文件时把预先设定好的内容添加到文件的开始位置。过程打开pycharm选择菜单中的file下的Settimgs3.选中FileandCodeTemplates4.我们这里设置PythonScript…

    2022年8月26日
  • UFW 修改before.rules等文件时reload无效

    UFW 修改before.rules等文件时reload无效

    2022年2月24日
  • 下列变量名不符合python命名规范的是_下列选项中不符合Python语言变量命名规则的是…

    下列变量名不符合python命名规范的是_下列选项中不符合Python语言变量命名规则的是…【单选题】下列Python保留字中,不用于表示分支结构的是【单选题】以下程序的输出结果是:j=”foriin”12345″:j+=i+’,’print(j)【单选题】在读写文件之前,必须通过哪种方法创建文件对象【单选题】以下程序的输出结果是:s=”ls=[1,2,3,4]forlinls:s+=str(l)print(s)【单选题】Python…

    2022年6月13日
  • mssql QUOTENAME 的作用[通俗易懂]

    mssql QUOTENAME 的作用[通俗易懂]简单来说吧比如你有一个表,名字叫index你有一个动态查询,参数是表名declare@tbnamevarchar(256)set@tbname=’index’—查这个表里的数据:print(‘select*from’+@tbname)exec(‘select*from’+@tbname)–这样print出来的数据是select*…

    2022年7月25日
  • 数据库常用建表语句「建议收藏」

    数据库常用建表语句「建议收藏」Mysql数据库常用操作语句2017年09月16日12:17:11阅读数:629用户管理:  1、新建用户:    >CREATEUSERnameIDENTIFIEDBY’ssapdrow’;  2、更改密码:    >SETPASSWORDFORname=PASSWORD(‘fdddfd’);  3、权限管理    >SHOWG…

    2022年9月8日
  • 微信公众平台开发教程Java版(二) 接口配置

    微信公众平台开发教程Java版(二) 接口配置微信公众账号申请完成后,默认开启的是编辑模式。我们需要修改为开发模式。登陆微信公众平台》功能》高级功能先关闭编辑模式,再开启开发模式。申请成为开发者,如果是服务号,需要则会有开发者凭证信息如图如果是订阅号,则只显示服务器配置。下一步就是配置接口服务器了。在公众平台网站的高级功能–开发模式页,点击“成为开发者”按钮,填写U…

    2022年6月29日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号