FFmpeg基础知识之————H264编码profile & level控制

H.264有四种画质级别,分别是baseline, extended, main, high:

  • 1、Baseline Profile:基本画质。支持I/P 帧,只支持无交错(Progressive)和CAVLC;
  • 2、Extended profile:进阶画质。支持I/P/B/SP/SI 帧,只支持无交错(Progressive)和CAVLC;(用的少)
  • 3、Main profile:主流画质。提供I/P/B 帧,支持无交错(Progressive)和交错(Interlaced), 也支持CAVLC 和CABAC 的支持;
  • 4、High profile:高级画质。在main Profile 的基础上增加了8x8内部预测、自定义量化、 无损视频编码和更多的YUV 格式;

  H.264 Baseline profile、Extended profile和Main profile都是针对8位样本数据、4:2:0格式(YUV)的视频序列。在相同配置情况下,High profile(HP)可以比Main profile(MP)降低10%的码率。 根据应用领域的不同,Baseline profile多应用于实时通信领域,Main profile多应用于流媒体领域,High profile则多应用于广电和存储领域。
 

下图清楚的给出不同的profile&level的性能区别。

profile 主要参数:

Level 主要参数:

 

ffmpeg如何控制profile&level

ffmpeg -i input.mp4 -profile:v baseline -level 3.0 output.mp4

ffmpeg -i input.mp4 -profile:v main -level 4.2 output.mp4

ffmpeg -i input.mp4 -profile:v high -level 5.1 output.mp4

如果ffmpeg编译时加了external的libx264,那就这么写:

ffmpeg -i input.mp4 -c:v libx264 -x264-params "profile=high:level=3.0" output.mp4

从压缩比例来说,baseline< main < high ,对于带宽比较局限的在线视频,可能会选择high,但有些时候,做个小视频,希望所有的设备基本都能解码(有些低端设备或早期的设备只能解码baseline),那就牺牲文件大小吧,用baseline。自己取舍吧!

苹果的设备对不同profile的支持。

2. 编码效率和视频质量的取舍(preset, crf)
除了上面提到的,强行配置biterate,或者强行配置profile/level,还有2个参数可以控制编码效率。 
一个是preset,一个是crf。 
preset也挺粗暴,基本原则就是,如果你觉得编码太快或太慢了,想改改,可以用profile。 
preset有如下参数可用:

ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow and placebo. 
编码加快,意味着信息丢失越严重,输出图像质量越差。

CRF(Constant Rate Factor): 范围 0-51: 0是编码毫无丢失信息, 23 is 默认, 51 是最差的情况。相对合理的区间是18-28. 
值越大,压缩效率越高,但也意味着信息丢失越严重,输出图像质量越差。

举个例子吧。

ffmpeg -i input -c:v libx264 -profile:v main -preset:v fast -level 3.1 -x264opts crf=18

ffmpeg.exe -i 3.mkv -c:v libx264  -g 25  -profile:v baseline -level:v 3 -vf "scale=1920:1080" -an 3.4.h264

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FFmpeg是一个用于处理多媒体数据的开源框架,其中包含了众多的编解码库,可以支持各种音视频格式的转码、处理和播放。其中,libfdk-aac是一个高质量的AAC音频编码库,它的优势在于输出的音频质量非常高,而且编码速度也比其他编码库要快。 在使用FFmpeg进行音频编码时,默认情况下使用的是libmp3lame编码库,但是在有些情况下,比如需要输出更高质量的音频数据时,就可以考虑使用libfdk-aac编码库,以获得更好的音频输出效果。 下面是使用FFmpeg编译安装libfdk-aac编码库的步骤: 1. 下载libfdk-aac源代码 可以在官网(https://github.com/mstorsjo/fdk-aac)下载最新的libfdk-aac源代码,也可以选择在其他开源镜像网站上下载。 2. 编译安装libfdk-aac 通过以下命令进入libfdk-aac源代码目录,执行configure和make命令进行编译和安装: ``` $ cd /path/to/libfdk-aac $ ./configure --prefix=/usr/local --enable-shared $ make && sudo make install ``` 其中,--prefix=/usr/local表示将libfdk-aac安装到系统默认的库目录下,--enable-shared表示编译生成共享库文件。 3. 配置FFmpeg编译选项 在FFmpeg编译时,需要指定使用libfdk-aac编码库,可以通过以下命令进行配置: ``` $ ./configure --enable-gpl --enable-libfdk-aac --enable-nonfree $ make && sudo make install ``` 其中,--enable-gpl表示启用GPL协议,--enable-libfdk-aac表示启用libfdk-aac编码库,--enable-nonfree表示启用非免费的编码库。 4. 使用libfdk-aac进行音频编码FFmpeg进行音频编码时,需要指定使用libfdk-aac编码库,可以通过以下命令进行操作: ``` $ ffmpeg -i input.wav -c:a libfdk_aac -b:a 128k output.aac ``` 其中,-c:a libfdk_aac表示使用libfdk-aac编码库进行音频编码,-b:a 128k表示设置输出音频的比特率为128kbps。 通过以上步骤,就可以成功地使用libfdk-aac扩展FFmpeg编码功能,获得更高质量的音频输出效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值