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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • RelativeLayout.LayoutParams

    RelativeLayout.LayoutParams通过id设置相对兄弟元素对齐。<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android&qu

    2022年7月1日
    27
  • linux下打开csv文件的软件,linux下的CSV文件操做[通俗易懂]

    linux下打开csv文件的软件,linux下的CSV文件操做[通俗易懂]先介绍一下什么是csv文件,这是一种简单的文本文件,也被称为逗号分隔值文件。linux主要是用于存储简单的数据,下面在weindows下用UE简单生成一下文件。vim而后用excel打开windows这就是一个简单的csv文件,每一个字符都是一个ANSI码,图中的第一行,1,2,3,4,5,7。数组1~7每个都是一个ANSI码,一个逗号也是ANSI码。函数第二行的12,13,434,45,56…

    2022年7月21日
    22
  • python的取余算法原理_python.取余算法

    python的取余算法原理_python.取余算法#-*-coding:utf-8-*-”’Createdon2012-12-28取余。取一个任意小于1美元的金额,然后计算可以换成最少多少枚硬币。硬币有1美分,5美分,10美分,25美分四种。1美元等于100美分。举例来说,0.76美元换算结果应该是3枚25美分,1枚1美分。类似76枚1美分,2枚25美分+2枚10美分+1枚5美分+1枚1美分这样的…

    2022年4月25日
    46
  • 软引用 SoftReference

    软引用 SoftReferenceimportjava lang ref SoftReferenc 软引用 demo 和使用 redis 缓存类似 先查内存中是否缓存 有则直接内存获取 反之则重新创建 再装载入内存中缓存起来 在一些开源框架中经常使用 author tiger create 2021 09 1220 34 publicclassS publicstatic String args Tigerti

    2025年6月6日
    7
  • Android应用开发揭秘2

    Android应用开发揭秘2Android应用开发揭秘2

    2022年6月11日
    34
  • linux 日期转换时间戳_oracle日期转13位时间戳

    linux 日期转换时间戳_oracle日期转13位时间戳1.用时间戳显示当前时间:date+%s#date+%s16145919602.将时间戳转换成日期时间:date-d@1614591901#date-d@16145919012021年03月01日星期一17:45:01CST3.转换指定日期为时间戳:2021-03-0117:49:23#date-d’2021-03-0117:49:23’+%s16145921634.指定日期格式转换:date-d@1614592163 +”…

    2022年10月2日
    3

发表回复

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

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