当前位置: 首页 > news >正文

【FFmpeg从入门到精通】第四章-FFmpeg转码

1 FFmpeg 软编码H.264与H.265

当前网络中常见的视频编码格式要数H.264最为火热,支持H.264的封装格式有很多,如FLV、MP4、HLS(M3U8)、MKV、TS等格式;FFmpeg本身并不支持H.264的编码器,而是由FFmpeg的第三方模块对其进行支持,例如x264和OpenH264,二者各有各的优势。由于OpenH264开源比较晚,所以x264还是当前最常用的编码器,这里将重点介绍FFmpeg 中x264的使用;使用x264进行H.264编码时,所支持的像素格式主要包含yuv420p、yuvj420p、yuv422p、yuvj422p、yuv444p、yuvj444p、nv12、nv16、nv21.通过ffmpeg -h encoder=libx264可以查看到:

ffmpeg -h encoder=libx264

1.1 x264 编码参数简介

参数类型说明
preset字符串编码器预设参数
tune字符串调优编码参数
profile字符串编码 profile 档级设置
level字符串编码 level 层级设置
wpredp字符串P 帧预测设置
x264opts字符串设置 x264 专有参数
crf浮点数选择质量恒定质量模式
crf_max浮点数选择质量恒定质量模式最大值
qp整数恒定量化参数控制
psy浮点数只用 psychovisual 优化
rc-lookahead整数设置预读帧设置
weightb浮点数B 帧预测设置
weightp整数设置预测分析方法:none、simple、smart 三种模式
ssim布尔计算打印 SSIM 状态
intra-refresh布尔定时刷 I 帧以替代 IDR 帧
blu-ray-compat布尔蓝光兼容参数
b-bias整数B 帧使用频率设置
mixed-refs布尔每个 partition 一个参考,而不是每个宏块一个参考
8x8dct布尔8 × 8 矩阵变换,用在 high profile
aud布尔带 AUD 分隔标识
mbtree布尔宏块树频率控制
deblock字符串环路滤波参数
cplxtblur浮点数减少波动 QP 参数
partitions字符串逗号分隔的 partition 列表,可以包含的值有 p8×8、p4×4、b8×8、i8×8、i4×4、none、all
direct-pred整数运动向量预测模式
slice-max-size整数Slice 的最大值
nal-hrd整数HRD 信号信息设置:None、VBR、CBR 设置
motion-est整数运动估计方法
forced-idr布尔强行设置关键帧为 IDR 帧
coder整数编码器类型包括 default、cavlc、cabac、vlc、ac
b_strategy整数I/P/B 帧选择策略
chromaoffset整数QP 色度和亮度之间的差异参数
sc_threshold整数场景切换阈值参数
noise_reduction整数降噪处理参数
x264-params字符串与 x264opts 操作相同

1.2 H.264 编码举例

1 编码器预设参数设置preset

从 FFmpeg的 x264参考说明中可以看到,可以使用x264 --full help查看 preset设置的详细说明,找到x264帮助信息中的preset参数项之后,可以看到其包含了以下几种预设参数,预设参数的详细设置具体如下

ultrafast:最快的编码方式

除了默认设置之外,还增加了如下参数设置:

--no-8x8dct --aq-mode 0 --b-adapt 0 --bframes 0 --no-cabac --no-deblock --no-mbtree --me dia --no-mixed-refs --partitions none --rc-lookahead 0 --ref 1 --scenecut 0 --subme 0 --trellis 0 --no-weightb --weightp 0

superfast:超级快速的编码方式

除了默认设置之外,还增加了如下参数设置:

--no-mbtree --me dia --no-mixed-refs --partitions i8x8,i4x4 --rc-lookahead 0 --ref 1 --subme 1 --trellis 0 --weightp 1

veryfast:非常快速的编码方式

除了默认设置之外,还增加了如下参数设置:

--no-mixed-refs --rc-lookahead 10 --ref 1 --subme 2 --trellis 0 --weightp 1

faster:稍微快速的编码方式

除了默认设置之外,还增加了如下参数设置:

--no-mixed-refs --rc-lookahead 20 --ref 2 --subme 4 --weightp 1

fast:快速的编码方式

除了默认设置之外,还增加了如下参数设置:

--rc-lookahead 30 --ref 2 --subme 6 --weightp l

medium:折中的编码方式

全部为默认参数

slow:慢的编码方式

除了默认设置之外,还增加了如下参数设置:

--b-adapt 2 --direct auto --me umh --rc-lookahead 50 --ref 5 --subme 8

slower:更慢的编码方式

除了默认设置之外,还增加了如下参数设置:

--b-adapt 2 --direct auto --me umh --partitions all --rc-lookahead 60 --ref 8 --subme 9 --trellis 2

veryslow:非常慢的编码方式

除了默认设置之外,还增加了如下参数设置:

--b-adapt 2 --bframes 8 --direct auto -me umh --merange 24 --partitions all --ref 16 --subme 10 --trellis 2 --rc-lookahead 60

placebo:最慢的编码方式

除了默认设置之外,还增加了如下参数设置:

--bframes 16 --b-adapt 2 --direct auto --slow-firstpass --no-fast-pskip --me tesa --merange 24 --partitions all --rc-lookahead 60 --ref 16 --subme 11 --trellis 2

随着所设置参数的不同,所编码出来的清晰度也会有所不同,设置相关的预设参数之后,有很多参数也会被设置所影响,因此需要了解相关的参数含义。为了方便操作,通过preset进行设置即可,下面就来看一下相同的机器中,设置ultrafast与设置medium 预设参数之后转码效率的对比:

ffmpeg -i input.mp4 -vcodec libx264 -preset ultrafast -b:v 2000k output.mp4

从命令行执行后的输出内容中可以看到,转码的预设参数为ultrafast模式,转码的速度为12.1倍速,接下来再看一下设置为medium 模式后的速度:

ffmpeg -i input.mp4 -vcodec libx264 -preset medium -b:v 2000k output.mp4

而在画质上medium要更胜一筹。

2 H.264编码优化参数tune

使用 tune 参数调优 H.264编码时,可以包含如下几个场景:film、animation、grain、stillimage、psnr、ssim、fastdecode、zerolatency;这几种场景所使用的 x264 参数也各有不同具体如下

2 FFmpeg 硬编解码

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

2.1 Nvidia GPU 硬编解码

2.2 Intel QSV 硬编码

2.3 树莓派硬编码

2.4 OSX系统硬编解码

3 FFmpeg 输出MP3

日常生活中听音乐时大多数为MP3音乐,使用FFmpeg可以解码 MP3,同样FFmpeg也可以支持 MP3编码,FFmpeg 使用第三方库 libmp3lame 即可编码 MP3 格式。不但如此MP3编码还是低延迟的编码,可以支持的采样率比较多,包含44100、48000、3200022050、24 000、16000、11025、12000、8000多种采样率,采样格式也比较多,包含s32p(signed 32 bits, planar)、fltp(float, planar)、sl6p(signed 16 bits, planar)多种格式.声道布局方式支持包含mono(单声道模式)、stereo(环绕立体声模式),下面就来详细介绍MP3编码参数。

3.1 MP3 编码参数介绍

3.2 MP3的编码质量设置

3.3 平均码率编码参数 ABR

4 FFmpeg 输出 AAC

在音视频流中,无论直播与点播,AAC都是目前最常用的一种音频编码格式,例如RTMP直播、HLS直播、RTSP直播、FLV直播、FLV点播、MP4点播等文件中都是常见的 AAC 音视频。

与MP3相比,AAC是一种编码效率更高、编码音质更好的音频编码格式,常见的使
用AAC编码后的文件存储格式为m4a,如在iPhone或者iPad中即为m4a。FFmpeg可以
支持AAC的三种编码器具体如下。

  • aac:FFmpeg本身的AAC编码实现
  • libfaac:第三方的AAC编码器
  • libfdk aac:第三方的AAC编码器

后两种编码器为非GPL协议,所以使用起来需要注意,在预编译时需要注意采用nonfree的支持,这点在前面章节中已有相关介绍。下面就来详细介绍三种编码器的使用方法。

4.1 FFmpeg 中的 AAC 编码器使用

4.2 FDK AAC 第三方的AAC编解码 Codec 库

4.3 高质量AAC设置

4.4 AAC 音频质量对比

5 系统资源使用情况

相关文章:

  • 性能比拼: Nginx vs Caddy
  • 乾元通渠道商中标舟山市自然灾害应急能力提升工程基层防灾项目
  • VTK知识学习(53)- 交互与Widget(四)
  • Kubernetes 创建 Jenkins 实现 CICD 配置指南
  • 5.2.1 CallerMemberName的使用
  • 02-HTML结构
  • 在线查看【免费】vsd, vsdx/wmf, emf /psd, eps/pdf ,ofd, rtf/xmind/bpmn/eml/epub文件格式网
  • 驱动开发硬核特训 · Day 16:字符设备驱动模型与实战注册流程
  • 基于STC89C52RC和8X8点阵屏、独立按键的匹配消除类小游戏
  • unity3d实现物体闪烁
  • Discuz论坛网站忘记管理员密码进不去管理中心怎么办?怎么改管理员密码?
  • 45.[前端开发-JavaScript高级]Day10-迭代器-生成器
  • Git创建空分支并推送到远程仓库
  • 市场分析 3 mysql (槽)
  • YOLO11改进,尺度动态损失函数Scale-based Dynamic Loss,减少标签不准确对损失函数稳定性的影响
  • 【网络安全】OWASP 十大漏洞
  • 蓝桥杯2024省A.成绩统计
  • 组件是怎样写的(1):虚拟列表-VirtualList
  • Activity之间交互
  • spark与hadoop的区别
  • 中越海警开展2025年第一次北部湾联合巡逻
  • 上海黄金交易所:贵金属价格波动剧烈,提示投资者做好风险防范
  • 30小时已过,俄罗斯复活节停火不再延长
  • 世遗X时尚,七匹狼这场大秀秀出中国文化独特魅力
  • 人民网评:官方轻踩刹车,智能驾驶不能“蒙眼狂奔”
  • 遭遇FIFA三个转会窗禁令,申花有苦难言将选择赔偿