H264 Profile对比分析

Posted 贺二公子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了H264 Profile对比分析相关的知识,希望对你有一定的参考价值。

原文地址:https://blog.csdn.net/matrix_laboratory/article/details/72764621


Baseline

支持I/P 帧,只支持无交错(Progressive)和CAVLC
一般用于低阶或需要额外容错的应用,比如视频通话、手机视频等;

Main

支持I/P/B 帧,无交错(Progressive)和交错(Interlaced),CAVLC 和CABAC
用于主流消费类电子产品规格如低解码(相对而言)的mp4、便携的视频播放器、PSP和Ipod等;

High

在Main的基础上增加了8x8 内部预测、自定义量化、无损视频编码和更多的YUV 格式(如4:4:4)
用于广播及视频碟片存储(蓝光影片),高清电视的应用。

0. 前言

本文首先会谈谈profile和level是干什么的,然后聊聊用ffmpeg和x264命令行怎么指定对应参数,最后聊聊在代码中怎么使用设置profile和level。

1. H264 Profile

简单理解就是H264有多个版本,版本越高编码效率和压缩率就越高,对应的版本是Profile。
从低到高分别为:Baseline、Main、High
在相同配置情况下,High profile(HP)可以比Main profile(MP)节省10%的码流量,比MPEG-2 MP节省60%的码流量,具有更好的编码性能。(这是个普遍认可的一组数据)
 
【整理者】61ic.com
【提供者】QuestionMark

2. H264 Level

每个level都规定了一组对标准中语法成员(syntax element)所采用的各种参数值的限制。
在给定的profile下,level通常与解码器的处理能力和内存容量相对应。每一个档次设置不同的参数(如取样速率、图像尺寸、编码比特率等),得到对应的编解码器性能的不同level。

3. FFmpeg x264命令行编码

详细信息参考x264 –fullhelp

3.1 常用参数

crf

用于控制视频画质,取值为[0-51],数值越低画质越好
0:无损
51:最次
默认值23, 通常取值范围:[18-28]

crf每+6,比特率减半
crf每-6,比特率翻倍

profile:

baseline, main, high, high10, high422, high444

preset:

ultrafast,superfast, veryfast, faster, fast, medium, slow, slower, veryslow, placebo

tune:

和使用场景,视频源有关
film, animation, grain, stillimage, psnr, ssim, fastdecode, zerolatency

Tune the settings for a particular type of sourceor situation
此外x264编码还支持多线程,可用threads参数控制开启的线程个数,当threads为0时自动选择开启多少个线程。

3.2 实例

首先需要FFmpeg在编译的时候开启了支持x264。
下面是几个用ffmpeg进行转码的命令,video codec设置为libx264, audio codec为copy。

输入视频是用android Nexus 5X拍摄,视频时长约8s,720P,编码采用h264(baseline),比特率11848kb/s,详细信息如下:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'VID.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2017-03-08T06:38:22.000000Z
    com.android.version: 7.1.1
    com.android.capture.fps: 30.000000
  Duration: 00:00:07.87, start: 0.000000, bitrate: 12344 kb/s
    Stream #0:0(eng): Video: h264 (Baseline) (avc1 / 0x31637661), yuvj420p(pc, bt470bg/bt470bg/smpte170m), 1280x720, 11848 kb/s, SAR 1:1 DAR 16:9, 28.99 fps, 120 tbr, 90k tbn, 180k tbc (default)
    Metadata:
      rotate          : 270
      creation_time   : 2017-03-08T06:38:22.000000Z
      handler_name    : VideoHandle
    Side data:
      displaymatrix: rotation of 90.00 degrees
    Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, mono, fltp, 96 kb/s (default)
    Metadata:
      creation_time   : 2017-03-08T06:38:22.000000Z
      handler_name    : SoundHandle

CRF

ffmpeg -i VID.mp4 -c:v libx264 -profile high -crf xx -c:a copy -y vid_x264.mp4
CRF编码速度(dutation/t)比特率(kb/s)
org1.011848
230.43552
220.374018
180.3086661

Profile

ffmpeg -i VID.mp4 -c:v libx264 -profile high -c:a copy -y vid_x264.mp4
Profile编码速度(dutation/t)比特率(kb/s)
org1.011848
high4220.4943552
high0.4963552
main0.5113542
baseline0.7365331

Preset

ffmpeg -i VID.mp4 -c:v libx264 -profile high -crf 23 -preset ultrafast -c:a copy -y vid_x264.mp4
Profile编码速度(dutation/t)比特率(kb/s)
org1.011848
ultrafast2.8116585
faster0.6453596
medium0.4953552
veryslow0.0683242

tune

和使用场景和视频源有关

ffmpeg -i VID.mp4 -c:v libx264 -profile high -crf 23 -tune zerolatency -c:a copy -y vid_x264.mp4

比特率

线程

4. FFmpeg编码设置

5. 参考文献

[1] https://en.wikipedia.org/wiki/H.264/MPEG-4_AVC#Profiles
[2] H264视频编码级别说明profile level Encoder
[3] x264 FFmpeg Options Guide
[4] FFmpeg and H.264 Encoding Guide

以上是关于H264 Profile对比分析的主要内容,如果未能解决你的问题,请参考以下文章

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

H264和AAC

rtmp流媒体协议分析(h264aac)

h264 profile & level

H264 profile-iop 解释

从 sdp 中的 profile-level-id 识别 h264 配置文件和级别?