如果使用最新版本的ffmpeg-0.11 libx264-125并使用默认编码,则配置文件- IDC在Eyecard中会一直保持配置文件_ h264 _ high (配置文件- IDC=100 )
AVDictionary *opts=NULL;
av_dict_set(opts,' profile ',' baseline ',0 );
/*开放the编码解码器* /
if(avcodec_open2(m_pencoderctx,encoder,opts) ) ) ) ) ) ) ) ) )。
et/kisaa 133/article/details/7792008
FFMPEG生成高质量的h264编码视频
FFMPEG转换h264格式的视频。 分两个阶段生成,以便视频的每一秒都有一个关键帧。 第一步生成两个临时文件,然后组合生成最终的视频文件。 (windows和linux系统通用) )。(一) ) )。
f mpeg-I input.MP4-y input.temp.wav-s640x 360-pix _ fmt YUV 420 p-frawvideo-y-| x264-profile baseline-lete
(二) ) )。
f mpeg-I input.temp.wav-FH 264-I input.temp.264-y-vcodec copy-acodeclibfaac-ab 50k output.MP4
这样产生的视频质量高,不会出现锯齿和花屏。
FFmpeg码率控制及内置编码参数介绍
一、码率控制参数二、编码速度编码质量视觉优化参数一、码率控制:
勇敢的荷花常用CRF、Two-Pass ABR两种
CRF(Constant Rate Factor - 限制码率因子)
适用范围:优点:在输出文件大小不太重要的情况下,这种方法可以使整个文件达到特定的视频质量。 编码模式在单遍编码模式中提供最大压缩效率,而每个帧根据所需的视频质量获得所需的比特数。
缺点:缺点是无法获取特定大小的视频文件,或者将输出比特率限制在特定大小。
参数分析:
1 )量化比例范围为0~51,其中0为可逆模式,23为默认值,51为最差可能。 这个数字越小,画质越好。 主观上,18~28是合理的范围。 18虽然视觉上容易受损,但输出视频的质量与输入视频一模一样或相差不大。 但是,在技术上仍然是有损压缩。
2 ) Crf值加上6,输出编码率减少约一半; Crf值减去6,输出码率将加倍。 通常,在保证可接受的视频质量的基础上选择最大的Crf值。 如果输出视频质量好,则尝试更大的值;如果外观不好,则尝试勇敢的衬衫磅值。
使用-命令行:
使用方法-在代码中使用源代码时,可以在av_dict_set中设置为AVDictionary,并作为参数传递给avcodec_open2
双通模式) )。
应用范围:如果目标是大小已确定的文件,并且帧与帧之间的视频质量不重要,则此方法非常适用。 这可以用一个例子很好地说明。 例如,视频文件预计为10min(600s ),200 MB:200 * 8192/600=~2730 kb 2730-128 )音频的常用比特率)=2602
kb使用方法 - 命令行
其他码率控制方式
ABR(Average Bitrate - 平均码率)
解析:
它提供了某种“运行均值”的目标,终极目标是最终文件大小匹配这个“全局平均”数字(因此基本上来说,如果编码器遇到大量码率开销非常小的黑帧,它将以低于要求的比特率编码,但是在接下来几秒内的非黑帧它将以高质量方式编码方式使码率回归均值)使用两遍编码模式时这个方法变得更加有效,你可以和“max bit rate ”配合使用来防止码率的波动。
使用方法 - 命令行
使用方法 - 源码
如果设置了AVCodecContext中bit_rate的大小,则采用abr的控制方式
如果没有设置AVCodecContext中的bit_rate,则默认按照crf方式编码,crf默认大小为23
CBR(Constant BitRate - 恒定码率)
解析:
使用方法 - 命令行
ffmpeg -i <input> -c:v libx264 -x264-params "nal-hrd=cbr:force-cfr=1" -b:v 1M -minrate 1M -maxrate 1M -bufsize 2M <output>
// VP9
ffmpeg -i <input> -c:v libvpx-vp9 -b:v 1M -maxrate 1M -minrate 1M <output>
CQP(Constant Quantization Parameter - 固定质量参数)
解析:
值越大,压缩率越大,质量越低。
使用方法 - 命令行
最大比特率的CRF/2-pass模式
你可以通过声明-maxrate确保最大码率限制在一个范围里,对于流式传输非常有用,可以配合到(2-Pass)ABR或CRF模式一起使用。
使用方法 - 命令行
ffmpeg -i <input> -c:v libx265 -b:v 1M -x265-params pass=1:vbv-maxrate=1000:vbv-bufsize=2000 -f mp4 /dev/null
ffmpeg -i <input> -c:v libx265 -b:v 1M -x265-params pass=2:vbv-maxrate=1000:vbv-bufsize=2000 <output>
编写代码的话,指定 AVCodecContext 的 rc_max_rate 和 rc_buffer_size 即可。bufsize 根据你希望比特率获得多大的可变性而设置,默认为 maxrate 的两倍,如果想限制流的比特率,可以设置为 maxrate 的一半。
配合 CRF 模式使用的时候,如果设置的 crf 值过低,视频码率可能超出 -maxrate 的时候,编码器会自动调整 crf,避免出现较大的码率波动。然而,x264 不会严格控制你指定的最大码率,除非使用 2 pass 模式。
使用方法 - 源码
二、编码速度&编码质量&视觉优化参数
preset
主要调节编码速度和质量的平衡,有ultrafast、superfast、veryfast、faster、fast、medium、slow、slower、veryslow、placebo这10个选项,从快到慢。
tune
主要配合视频类型和视觉优化的参数况。如果视频的内容符合其中一个可用的调整值又或者有其中需要,则可以使用此选项,否则建议不使用(如tune grain是为高比特率的编码而设计的)。
tune的值有: film: 电影、真人类型;
animation: 动画;
grain: 需要保留大量的grain时用;
stillimage: 静态图像编码时使用;
psnr: 为提高psnr做了优化的参数;
ssim: 为提高ssim做了优化的参数;
fastdecode: 可以快速解码的参数;
zerolatency:零延迟,用在需要非常低的延迟的情况下,比如电视电话会议的编码。
profile
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则多应用于广电和存储领域。
设置preset、tune、profile
使用方法 - 命令行
命令行的方式详见文档。
使用方法 - 源码
参考资料;