视频处理——ffmpeg

概念

一个视频是由特定的视频容器,比如flv,hls,mp4包起来的多个流(一个或多个音频、视频、subtitle),每个流的编码可能不一样,比如视频的h265,音频的aac等。

视频处理的过程是:[分解视频=》多个输入路]=》[寻找合适解码器=》解码]=》过滤(缩放,裁剪)=》根据指定格式编码=》合流


FFMPEG

市面上最强的视频处理工具是ffmpeg,解决方案覆盖了多输入(实时流、设备、文件、http),处理包括多种编码的编解码和过滤, 到输出到文件或者实时流

使用:

 ./ffmpeg -i source.mov -t 100 -vcodec libx264 -acodec copy -vf scale="400:'if(gt(a,4/3),240,300)'" 1.gif

./ffmpeg -i x01.mov -ss 180 -fs 2048k -vcodec libx264 2m.mp4

./ffmpeg -i 2.mp4 -t 0.001 1.jpeg

 ./ffmpeg -i source.mov -t 100 -vcodec libx264 -acodec copy -vf scale="400:'if(gt(a,4/3),240,300)'" 31.mp4

./ffmpeg -i http://127.0.0.1:8020/help/2.mp4 -vcodec libx264 -acodec copy -vf scale="400:'if(gt(a,4/3),240,300)'"  -b 192k 31.mp4

./ffmpeg -i x1.mov -t 100  -vcodec libx264 -f hls index.m3u8

./ffprobe -v error -show_entries stream 2.mp4 

./ffprobe -v error -show_entries stream=width,height 2.mp4 

./ffmpeg -i input.flv -f image2 -vf fps=fps=1 out%d.png

./ffmpeg -i input.flv -f image2 -vf fps=fps=1/20 out%d.png

./ffmpeg -i 2.mp4 -i logo.png -filter_complex "overlay=x='if(gte(t\,2)\,((t-2)*80)-w\,NAN)':y=0" -vc libx264 over.mp4

./ffprobe -v error -show_entries stream=width,height,codec_name -of default=noprint_wrappers=1 31.mp4 

./ffmpeg -i 13554301041685ec0e0365712.mp4 -ab 32k  32.aac

./ffmpeg -i 13554301041685ec0e0365712.mp4  -vf "scale=iw*min(205/iw\,100/ih):ih*min(205/iw\,100/ih),pad=205:100:(205-iw)/2:(100-ih)/2" 2.mp4

./ffmpeg -i 13554301041685ec0e0365712.mp4  -vf "scale=iw*min(200\,max(iw\,ih))/max(iw\,ih):ih*min(200\,max(iw\,ih))/max(iw\,ih)" 21.mp4

./ffmpeg -i input -vf pad=iw :iw*3/4:0:(oh-ih)/2:color output   (16:9到4:3的通用命令)

./ffmpeg -i IMG_4940.MOV -strict -2 -vf scale=853:480,crop=480:480:186:0 out.mp4

./ffmpeg -v error -i 35377eb0d1b2caeaac70b019bb1274a6 -i logo.png -ss 20 -filter_complex overlay=x=W-w:y=H-h-5,fps=15,scale=trunc(iw*min(320\,max(iw\,ih))/max(iw\,ih)/2)*2:trunc(ih*min(320\,max(iw\,ih))/max(iw\,ih)/2)*2:flags=lanczos,palettegen -y palette.png

./ffmpeg -v error -i 35377eb0d1b2caeaac70b019bb1274a6  -i palette.png -i logo.png -ss 20 -lavfi "overlay=-w:-h,overlay=x=W-w:y=H-h-5,fps=15,scale=trunc(iw*min(320\,max(iw\,ih))/max(iw\,ih)/2)*2:trunc(ih*min(320\,max(iw\,ih))/max(iw\,ih)/2)*2:flags=lanczos [x]; [x][1:v] paletteuse" -y 1604271337db8bde001a48336883dcfc31b2a3ff68.gif

./ffmpeg -v error -i 35377eb0d1b2caeaac70b019bb1274a6 -i logo.png -filter_complex "overlay=x=W-w:y=H-h-5,scale=trunc(iw*min(320\,max(iw\,ih))/max(iw\,ih)/2)*2:trunc(ih*min(320\,max(iw\,ih))/max(iw\,ih)/2)*2" -ss 20 -y 1604271337db8bde001a48336883dcfc31b2a3ff68.mp4

左上角

./ffmpeg -i pair.mp4 -i logo.png -filter_complex overlay pair1.mp4

右上角:

./ffmpeg -i pair.mp4 -i logo.png -filter_complex overlay=W-w-5  pair2.mp4

左下角:

./ffmpeg -i pair.mp4 -i logo.png -filter_complex overlay=5:H-h-5  pair2.mp4

右下角:

./ffmpeg -i pair.mp4 -i logo.png -filter_complex overlay=W-w-5:H-h-5  pair2.mp4


1、2秒后logo从左到右移动:

ffplay -i jidu.mp4  -vf movie=logo.png[logo];[in][logo]overlay=x='if(gte(t\,2)\,((t-2)*80)-w\,NAN)':y=0

 

2、2秒后logo从左到右移动后停止在左上角

ffplay -i jidu.mp4  -vf movie=logo.png[logo];[in][logo]overlay=x='if(gte(((t-2)*80)-w\,W)\,0\,((t-2)*80)-w)':y=0

3、每隔10秒交替出现logo。

ffmpeg -y -t 60 -i jidu.mp4 -i logo.png -i logo2.png -filter_complex "overlay=x=if(lt(mod(t\,20)\,10)\,10\,NAN ):y=10,overlay=x=if(gt(mod(t\,20)\,10)\,W-w-10\,NAN ) :y=10" overlay.mp4



编译的过程:


环境

export LIBRARY_PATH=/home/nemo/pkgs/media/binary/lib:$LIBRARY_PATH
export LD_LIBRARY_PATH=/home/nemo/pkgs/media/binary/lib:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=/home/nemo/pkgs/media/binary/lib/pkgconfig
export CPLUS_INCLUDE_PATH=/home/nemo/pkgs/media/binary/include:$CPLUS_INCLUDE_PATH
export C_INCLUDE_PATH=/home/nemo/pkgs/media/binary/include:$C_INCLUDE_PATH
export CFLAGS="$CFLAGS -fPIC"

编译依赖库:

下载openarm libx264 libx265
./configure --prefix=/home/nemo/pkgs/media/binary;make install

编译ffmpeg:
./configure --prefix=/home/nemo/pkgs/media/binary --enable-static --enable-shared --enable-gpl --enable-libx264 --enable-libx265 --enable-libopencore-amrnb --enable-libopencore-amrwb  --enable-version3;make install

部分参数说明:

a) 通用选项
-L license
-h 帮助
-fromats 显示可用的格式,编解码的,协议的。。。
-f fmt 强迫采用格式fmt
-I filename 输入文件
-y 覆盖输出文件
-t duration 设置纪录时间 hh:mm:ss[.xxx]格式的记录时间也支持
-ss position 搜索到指定的时间 [-]hh:mm:ss[.xxx]的格式也支持
-title string 设置标题
-author string 设置作者
-copyright string 设置版权
-comment string 设置评论
-target type 设置目标文件类型(vcd,svcd,dvd) 所有的格式选项(比特率,编解码以及缓冲区大小)自动设置 ,只需要输入如下的就可以了:
ffmpeg -i myfile.avi -target vcd /tmp/vcd.mpg
-hq 激活高质量设置
-itsoffset offset 设置以秒为基准的时间偏移,该选项影响所有后面的输入文件。该偏移被加到输入文件的时戳,定义一个正偏移意味着相应的

流被延迟了 offset秒。 [-]hh:mm:ss[.xxx]的格式也支持


b) 视频选项
-b bitrate 设置比特率,缺省200kb/s
-r fps 设置帧频 缺省25
-s size 设置帧大小 格式为WXH 缺省160X128.下面的简写也可以直接使用:
Sqcif 128X96 qcif 176X144 cif 252X288 4cif 704X576
-aspect aspect 设置横纵比 4:3 16:9 或 1.3333 1.7777
-croptop size 设置顶部切除带大小 像素单位
-cropbottom size -cropleft size -cropright size
-padtop size 设置顶部补齐的大小 像素单位
-padbottom size -padleft size -padright size -padcolor color 设置补齐条颜色(hex,6个16进制的数,红:绿:兰排列,比如 000000代表黑色)
-vn 不做视频记录
-bt tolerance 设置视频码率容忍度kbit/s
-maxrate bitrate设置最大视频码率容忍度
-minrate bitreate 设置最小视频码率容忍度
-bufsize size 设置码率控制缓冲区大小
-vcodec codec 强制使用codec编解码方式。 如果用copy表示原始编解码数据必须被拷贝。
-sameq 使用同样视频质量作为源(VBR)
-pass n 选择处理遍数(1或者2)。两遍编码非常有用。第一遍生成统计信息,第二遍生成精确的请求的码率
-passlogfile file 选择两遍的纪录文件名为file

码率、帧率和文件大小

概述

        码率和帧率是视频文件的最重要的基本特征,对于他们的特有设置会决定视频质量。如果我们知道码率和时长那么可以很容易计算出输出文件的大小。 

帧率:帧率也叫帧频率,帧率是视频文件中每一秒的帧数,肉眼想看到连续移动图像至少需要15帧。

码率:比特率(也叫码率,数据率)是一个确定整体视频/音频质量的参数,秒为单位处理的字节数,码率和视频质量成正比,在视频文件中中比特率用bps来表达。

计算输出文件大小

(视频码率+音频码率) * 时长 /8 = 文件大小K


c)高级视频选项
-g gop_size 设置图像组大小
-intra 仅适用帧内编码
-qscale q 使用固定的视频量化标度(VBR)
-qmin q 最小视频量化标度(VBR)
-qmax q 最大视频量化标度(VBR)
-qdiff q 量化标度间最大偏差 (VBR)
-qblur blur 视频量化标度柔化(VBR)
-qcomp compression 视频量化标度压缩(VBR)
-rc_init_cplx complexity 一遍编码的初始复杂度
-b_qfactor factor 在p和b帧间的qp因子
-i_qfactor factor 在p和i帧间的qp因子
-b_qoffset offset 在p和b帧间的qp偏差
-i_qoffset offset 在p和i帧间的qp偏差
-rc_eq equation 设置码率控制方程 默认tex^qComp
-rc_override override 特定间隔下的速率控制重载
-me method 设置运动估计的方法 可用方法有 zero phods log x1 epzs(缺省) full
-dct_algo algo 设置dct的算法 可用的有 0 FF_DCT_AUTO 缺省的DCT 1 FF_DCT_FASTINT 2 FF_DCT_INT 3 FF_DCT_MMX 4 FF_DCT_MLIB 5
FF_DCT_ALTIVEC
-idct_algo algo 设置idct算法。可用的有 0 FF_IDCT_AUTO 缺省的IDCT 1 FF_IDCT_INT 2 FF_IDCT_SIMPLE 3 FF_IDCT_SIMPLEMMX 4
FF_IDCT_LIBMPEG2MMX 5 FF_IDCT_PS2 6 FF_IDCT_MLIB 7 FF_IDCT_ARM 8 FF_IDCT_ALTIVEC 9 FF_IDCT_SH4 10 FF_IDCT_SIMPLEARM
-er n 设置错误残留为n 1 FF_ER_CAREFULL 缺省 2 FF_ER_COMPLIANT 3 FF_ER_AGGRESSIVE 4 FF_ER_VERY_AGGRESSIVE
-ec bit_mask 设置错误掩蔽为bit_mask,该值为如下值的位掩码 1 FF_EC_GUESS_MVS (default=enabled) 2 FF_EC_DEBLOCK (default=enabled)
-bf frames 使用frames B 帧,支持mpeg1,mpeg2,mpeg4
-mbd mode 宏块决策 0 FF_MB_DECISION_SIMPLE 使用mb_cmp 1 FF_MB_DECISION_BITS 2 FF_MB_DECISION_RD
-4mv 使用4个运动矢量 仅用于mpeg4
-part 使用数据划分 仅用于mpeg4
-bug param 绕过没有被自动监测到编码器的问题
-strict strictness 跟标准的严格性
-aic 使能高级帧内编码 h263+
-umv 使能无限运动矢量 h263+
-deinterlace 不采用交织方法
-interlace 强迫交织法编码 仅对mpeg2和mpeg4有效。当你的输入是交织的并且你想要保持交织以最小图像损失的时候采用该选项。可选的方法是
不交织,但是损失更大
-psnr 计算压缩帧的psnr
-vstats 输出视频编码统计到vstats_hhmmss.log
-vhook module 插入视频处理模块 module 包括了模块名和参数,用空格分开
D)音频选项
-ab bitrate 设置音频码率
-ar freq 设置音频采样率
-ac channels 设置通道 缺省为1
-an 不使能音频纪录

-acodec codec 使用codec编解码


E)音频/视频捕获选项
-vd device 设置视频捕获设备。比如/dev/video0
-vc channel 设置视频捕获通道 DV1394专用
-tvstd standard 设置电视标准 NTSC PAL(SECAM)
-dv1394 设置DV1394捕获
-av device 设置音频设备 比如/dev/dsp


F)高级选项
-map file:stream 设置输入流映射
-debug 打印特定调试信息
-benchmark 为基准测试加入时间
-hex 倾倒每一个输入包
-bitexact 仅使用位精确算法 用于编解码测试
-ps size 设置包大小,以bits为单位
-re 以本地帧频读数据,主要用于模拟捕获设备
-loop 循环输入流。只工作于图像流,用于ffserver测试


关于实时流,一般andorid系统使用rtmp(Real Time Streaming Protocol), 而ios用hls(HTTP Live Streaming)


-preset的参数主要调节编码速度和质量的平衡,有ultrafast、superfast、veryfast、faster、fast、medium、slow、slower、veryslow、placebo
-tune的参数主要配合视频类型和视觉优化的参数,或特别的情况。如果视频的内容符合其中一个可用的调整值又或者有其中需要,则可以使用此选项,否则建议不使用(如tune grain是为高比特率的编码而设计的)。
tune的值有: film:  电影、真人类型; 
animation:  动画; 
grain:      需要保留大量的grain时用; 
stillimage:  静态图像编码时使用; 
psnr:      为提高psnr做了优化的参数; 
ssim:      为提高ssim做了优化的参数; 
fastdecode: 可以快速解码的参数; 
zerolatency:零延迟,用在需要非常低的延迟的情况下,比如电视电话会议的编码。

更多高级参数:

  • tune,film|animation|grain|stillimage|psnr|ssim|fastdecode|zerolatency
  • preset,ultrafast|superfast|veryfast|faster|fast|medium|slow|slower|veryslow|placebo
  • pass,1|2,选择处理遍数(1或者2)。两遍编码非常有用。第一遍生成统计信息,第二遍生成精确的请求的码率
  • vprofile, baseline|main|high|high10|high422|high444
  • crf,恒定Rate Factor (码率系数)缺省值23。设置这个就不要设置【b】
  • maxrate,指定允许的最大码率,一般如果要用cbr模式编码的话会用这个,值参考【b】参数
  • minrate,指定允许的最小码率,一般如果要用cbr模式编码的话会用这个,值参考【b】参数
  • r, 帧速率(fps) (可以改,确认非标准桢率会导致音画不同步,所以只能设定为15或者29.97)


本机上的ffmpeg支持的编解码和视频容器有:

source path               .
C compiler                gcc
C library                 glibc
ARCH                      x86 (generic)
big-endian                no
runtime cpu detection     yes
yasm                      yes
MMX enabled               yes
MMXEXT enabled            yes
3DNow! enabled            yes
3DNow! extended enabled   yes
SSE enabled               yes
SSSE3 enabled             yes
AESNI enabled             yes
AVX enabled               yes
XOP enabled               yes
FMA3 enabled              yes
FMA4 enabled              yes
i686 features enabled     yes
CMOV is fast              yes
EBX available             yes
EBP available             yes
debug symbols             yes
strip symbols             yes
optimize for size         no
optimizations             yes
static                    yes
shared                    yes
postprocessing support    yes
new filter support        yes
network support           yes
threading support         pthreads
safe bitstream reader     yes
SDL support               no
opencl enabled            no
texi2html enabled         no
perl enabled              yes
pod2man enabled           yes
makeinfo enabled          no
makeinfo supports HTML    no


Enabled programs:
ffmpeg                  ffprobe                 ffserver


External libraries:
iconv                   libopencore_amrwb       libx264                 libx265                 lzma                    zlib
libopencore_amrnb


Enabled decoders:
aac                     avs                     flashsv2                mp3on4                  pjs                     truemotion2
aac_fixed               avui                    flic                    mp3on4float             png                     truespeech
aac_latm                ayuv                    flv                     mpc7                    ppm                     tscc
aasc                    bethsoftvid             fourxm                  mpc8                    prores                  tscc2
ac3                     bfi                     fraps                   mpeg1video              prores_lgpl             tta
ac3_fixed               bink                    frwu                    mpeg2video              ptx                     twinvq
adpcm_4xm               binkaudio_dct           g2m                     mpeg4                   qcelp                   txd
adpcm_adx               binkaudio_rdft          g723_1                  mpegvideo               qdm2                    ulti
adpcm_afc               bintext                 g729                    mpl2                    qdraw                   utvideo
adpcm_aica              bmp                     gif                     msa1                    qpeg                    v210
adpcm_ct                bmv_audio               gsm                     msmpeg4v1               qtrle                   v210x
adpcm_dtk               bmv_video               gsm_ms                  msmpeg4v2               r10k                    v308
adpcm_ea                brender_pix             h261                    msmpeg4v3               r210                    v408
adpcm_ea_maxis_xa       c93                     h263                    msrle                   ra_144                  v410
adpcm_ea_r1             cavs                    h263i                   mss1                    ra_288                  vb
adpcm_ea_r2             ccaption                h263p                   mss2                    ralf                    vble
adpcm_ea_r3             cdgraphics              h264                    msvideo1                rawvideo                vc1
adpcm_ea_xas            cdxl                    hap                     mszh                    realtext                vc1image
adpcm_g722              cfhd                    hevc                    mts2                    rl2                     vcr1
adpcm_g726              cinepak                 hnm4_video              mvc1                    roq                     vmdaudio
adpcm_g726le            cljr                    hq_hqa                  mvc2                    roq_dpcm                vmdvideo
adpcm_ima_amv           cllc                    hqx                     mxpeg                   rpza                    vmnc
adpcm_ima_apc           comfortnoise            huffyuv                 nellymoser              rscc                    vorbis
adpcm_ima_dk3           cook                    iac                     nuv                     rv10                    vp3
adpcm_ima_dk4           cpia                    idcin                   on2avc                  rv20                    vp5
adpcm_ima_ea_eacs       cscd                    idf                     opus                    rv30                    vp6
adpcm_ima_ea_sead       cyuv                    iff_ilbm                paf_audio               rv40                    vp6a
adpcm_ima_iss           dca                     imc                     paf_video               s302m                   vp6f
adpcm_ima_oki           dds                     indeo2                  pam                     sami                    vp7
adpcm_ima_qt            dfa                     indeo3                  pbm                     sanm                    vp8
adpcm_ima_rad           dirac                   indeo4                  pcm_alaw                screenpresso            vp9
adpcm_ima_smjpeg        dnxhd                   indeo5                  pcm_bluray              sdx2_dpcm               vplayer
adpcm_ima_wav           dpx                     interplay_acm           pcm_dvd                 sgi                     vqa
adpcm_ima_ws            dsd_lsbf                interplay_dpcm          pcm_f32be               sgirle                  wavpack
adpcm_ms                dsd_lsbf_planar         interplay_video         pcm_f32le               shorten                 webp
adpcm_psx               dsd_msbf                jacosub                 pcm_f64be               sipr                    webvtt
adpcm_sbpro_2           dsd_msbf_planar         jpeg2000                pcm_f64le               smackaud                wmalossless
adpcm_sbpro_3           dsicinaudio             jpegls                  pcm_lxf                 smacker                 wmapro
adpcm_sbpro_4           dsicinvideo             jv                      pcm_mulaw               smc                     wmav1
adpcm_swf               dss_sp                  kgv1                    pcm_s16be               smvjpeg                 wmav2
adpcm_thp               dvaudio                 kmvc                    pcm_s16be_planar        snow                    wmavoice
adpcm_thp_le            dvbsub                  lagarith                pcm_s16le               sol_dpcm                wmv1
adpcm_vima              dvdsub                  libopencore_amrnb       pcm_s16le_planar        sonic                   wmv2
adpcm_xa                dvvideo                 libopencore_amrwb       pcm_s24be               sp5x                    wmv3
adpcm_yamaha            dxa                     loco                    pcm_s24daud             srt                     wmv3image
aic                     dxtory                  mace3                   pcm_s24le               ssa                     wnv1
alac                    dxv                     mace6                   pcm_s24le_planar        stl                     ws_snd1
alias_pix               eac3                    mdec                    pcm_s32be               subrip                  xan_dpcm
als                     eacmv                   metasound               pcm_s32le               subviewer               xan_wc3
amrnb                   eamad                   microdvd                pcm_s32le_planar        subviewer1              xan_wc4
amrwb                   eatgq                   mimic                   pcm_s8                  sunrast                 xbin
amv                     eatgv                   mjpeg                   pcm_s8_planar           svq1                    xbm
anm                     eatqi                   mjpegb                  pcm_u16be               svq3                    xface
ansi                    eightbps                mlp                     pcm_u16le               tak                     xl
ape                     eightsvx_exp            mmvideo                 pcm_u24be               targa                   xma1
apng                    eightsvx_fib            motionpixels            pcm_u24le               targa_y216              xma2
ass                     escape124               movtext                 pcm_u32be               tdsc                    xsub
asv1                    escape130               mp1                     pcm_u32le               text                    xwd
asv2                    evrc                    mp1float                pcm_u8                  theora                  y41p
atrac1                  exr                     mp2                     pcm_zork                thp                     yop
atrac3                  ffv1                    mp2float                pcx                     tiertexseqvideo         yuv4
atrac3p                 ffvhuff                 mp3                     pgm                     tiff                    zero12v
aura                    ffwavesynth             mp3adu                  pgmyuv                  tmv                     zerocodec
aura2                   fic                     mp3adufloat             pgssub                  truehd                  zlib
avrn                    flac                    mp3float                pictor                  truemotion1             zmbv
avrp                    flashsv


Enabled encoders:
a64multi                cljr                    libx264                 pcm_s16be_planar        prores                  tiff
a64multi5               comfortnoise            libx264rgb              pcm_s16le               prores_aw               tta
aac                     dca                     libx265                 pcm_s16le_planar        prores_ks               utvideo
ac3                     dnxhd                   ljpeg                   pcm_s24be               qtrle                   v210
ac3_fixed               dpx                     mjpeg                   pcm_s24daud             r10k                    v308
adpcm_adx               dvbsub                  movtext                 pcm_s24le               r210                    v408
adpcm_g722              dvdsub                  mp2                     pcm_s24le_planar        ra_144                  v410
adpcm_g726              dvvideo                 mp2fixed                pcm_s32be               rawvideo                vc2
adpcm_ima_qt            eac3                    mpeg1video              pcm_s32le               roq                     vorbis
adpcm_ima_wav           ffv1                    mpeg2video              pcm_s32le_planar        roq_dpcm                wavpack
adpcm_ms                ffvhuff                 mpeg4                   pcm_s8                  rv10                    webvtt
adpcm_swf               flac                    msmpeg4v2               pcm_s8_planar           rv20                    wmav1
adpcm_yamaha            flashsv                 msmpeg4v3               pcm_u16be               s302m                   wmav2
alac                    flashsv2                msvideo1                pcm_u16le               sgi                     wmv1
alias_pix               flv                     nellymoser              pcm_u24be               snow                    wmv2
amv                     g723_1                  pam                     pcm_u24le               sonic                   wrapped_avframe
apng                    gif                     pbm                     pcm_u32be               sonic_ls                xbm
ass                     h261                    pcm_alaw                pcm_u32le               srt                     xface
asv1                    h263                    pcm_f32be               pcm_u8                  ssa                     xsub
asv2                    h263p                   pcm_f32le               pcx                     subrip                  xwd
avrp                    huffyuv                 pcm_f64be               pgm                     sunrast                 y41p
avui                    jpeg2000                pcm_f64le               pgmyuv                  svq1                    yuv4
ayuv                    jpegls                  pcm_mulaw               png                     targa                   zlib
bmp                     libopencore_amrnb       pcm_s16be               ppm                     text                    zmbv
cinepak


Enabled hwaccels:


Enabled parsers:
aac                     dca                     dvdsub                  h264                    mpegvideo               tak
aac_latm                dirac                   flac                    hevc                    opus                    vc1
ac3                     dnxhd                   g729                    mjpeg                   png                     vorbis
adx                     dpx                     gsm                     mlp                     pnm                     vp3
bmp                     dvaudio                 h261                    mpeg4video              rv30                    vp8
cavsvideo               dvbsub                  h263                    mpegaudio               rv40                    vp9
cook                    dvd_nav


Enabled demuxers:
aa                      daud                    ilbc                    mmf                     pcm_u24be               sup
aac                     dcstr                   image2                  mov                     pcm_u24le               svag
ac3                     dfa                     image2_alias_pix        mp3                     pcm_u32be               swf
acm                     dirac                   image2_brender_pix      mpc                     pcm_u32le               tak
act                     dnxhd                   image2pipe              mpc8                    pcm_u8                  tedcaptions
adf                     dsf                     image_bmp_pipe          mpegps                  pjs                     thp
adp                     dsicin                  image_dds_pipe          mpegts                  pmp                     threedostr
ads                     dss                     image_dpx_pipe          mpegtsraw               pva                     tiertexseq
adx                     dts                     image_exr_pipe          mpegvideo               pvf                     tmv
aea                     dtshd                   image_j2k_pipe          mpjpeg                  qcp                     truehd
afc                     dv                      image_jpeg_pipe         mpl2                    r3d                     tta
aiff                    dvbsub                  image_jpegls_pipe       mpsub                   rawvideo                tty
amr                     dxa                     image_pictor_pipe       msf                     realtext                txd
anm                     ea                      image_png_pipe          msnwc_tcp               redspark                v210
apc                     ea_cdata                image_qdraw_pipe        mtv                     rl2                     v210x
ape                     eac3                    image_sgi_pipe          mv                      rm                      vag
apng                    epaf                    image_sunrast_pipe      mvi                     roq                     vc1
aqtitle                 ffm                     image_tiff_pipe         mxf                     rpl                     vc1t
asf                     ffmetadata              image_webp_pipe         mxg                     rsd                     vivo
asf_o                   filmstrip               ingenient               nc                      rso                     vmd
ass                     flac                    ipmovie                 nistsphere              rtp                     vobsub
ast                     flic                    ircam                   nsv                     rtsp                    voc
au                      flv                     iss                     nut                     sami                    vpk
avi                     fourxm                  iv8                     nuv                     sap                     vplayer
avr                     frm                     ivf                     ogg                     sbg                     vqf
avs                     fsb                     ivr                     oma                     sdp                     w64
bethsoftvid             g722                    jacosub                 paf                     sdr2                    wav
bfi                     g723_1                  jv                      pcm_alaw                segafilm                wc3
bfstm                   g729                    live_flv                pcm_f32be               shorten                 webm_dash_manifest
bink                    genh                    lmlm4                   pcm_f32le               siff                    webvtt
bintext                 gif                     loas                    pcm_f64be               sln                     wsaud
bit                     gsm                     lrc                     pcm_f64le               smacker                 wsvqa
bmv                     gxf                     lvf                     pcm_mulaw               smjpeg                  wtv
boa                     h261                    lxf                     pcm_s16be               smush                   wv
brstm                   h263                    m4v                     pcm_s16le               sol                     wve
c93                     h264                    matroska                pcm_s24be               sox                     xa
caf                     hevc                    mgsts                   pcm_s24le               spdif                   xbin
cavsvideo               hls                     microdvd                pcm_s32be               srt                     xmv
cdg                     hnm                     mjpeg                   pcm_s32le               stl                     xvag
cdxl                    ico                     mlp                     pcm_s8                  str                     xwma
cine                    idcin                   mlv                     pcm_u16be               subviewer               yop
concat                  idf                     mm                      pcm_u16le               subviewer1              yuv4mpegpipe
data                    iff


Enabled muxers:
a64                     dv                      ipod                    mpeg2svcd               pcm_s32be               spdif
ac3                     eac3                    ircam                   mpeg2video              pcm_s32le               spx
adts                    f4v                     ismv                    mpeg2vob                pcm_s8                  srt
adx                     ffm                     ivf                     mpegts                  pcm_u16be               stream_segment
aiff                    ffmetadata              jacosub                 mpjpeg                  pcm_u16le               swf
amr                     filmstrip               latm                    mxf                     pcm_u24be               tee
apng                    flac                    lrc                     mxf_d10                 pcm_u24le               tg2
asf                     flv                     m4v                     mxf_opatom              pcm_u32be               tgp
asf_stream              framecrc                matroska                null                    pcm_u32le               truehd
ass                     framemd5                matroska_audio          nut                     pcm_u8                  uncodedframecrc
ast                     g722                    md5                     oga                     psp                     vc1
au                      g723_1                  microdvd                ogg                     rawvideo                vc1t
avi                     gif                     mjpeg                   oma                     rm                      voc
avm2                    gxf                     mkvtimestamp_v2         opus                    roq                     w64
bit                     h261                    mlp                     pcm_alaw                rso                     wav
caf                     h263                    mmf                     pcm_f32be               rtp                     webm
cavsvideo               h264                    mov                     pcm_f32le               rtp_mpegts              webm_chunk
crc                     hds                     mp2                     pcm_f64be               rtsp                    webm_dash_manifest
dash                    hevc                    mp3                     pcm_f64le               sap                     webp
data                    hls                     mp4                     pcm_mulaw               segment                 webvtt
daud                    ico                     mpeg1system             pcm_s16be               singlejpeg              wtv
dirac                   ilbc                    mpeg1vcd                pcm_s16le               smjpeg                  wv
dnxhd                   image2                  mpeg1video              pcm_s24be               smoothstreaming         yuv4mpegpipe
dts                     image2pipe              mpeg2dvd                pcm_s24le               sox


Enabled protocols:
async                   ffrtmphttp              http                    mmsh                    rtmpt                   tcp
cache                   file                    httpproxy               mmst                    rtp                     udp
concat                  ftp                     icecast                 pipe                    srtp                    udplite
crypto                  gopher                  md5                     rtmp                    subfile                 unix
data                    hls


Enabled filters:
acompressor             asettb                  decimate                hqdn3d                  pixdesctest             silenceremove
acrossfade              ashowinfo               deflate                 hqx                     pp                      sine
adelay                  asplit                  dejudder                hstack                  pp7                     smartblur
adrawgraph              astats                  delogo                  hue                     psnr                    smptebars
aecho                   astreamselect           deshake                 idet                    pullup                  smptehdbars
aemphasis               atadenoise              detelecine              il                      qp                      spectrumsynth
aeval                   atempo                  dilation                inflate                 random                  split
aevalsrc                atrim                   displace                interlace               realtime                spp
afade                   avectorscope            drawbox                 interleave              removegrain             ssim
afftfilt                bandpass                drawgraph               join                    removelogo              stereo3d
aformat                 bandreject              drawgrid                kerndeint               repeatfields            stereotools
agate                   bass                    dynaudnorm              lenscorrection          replaygain              stereowiden
ahistogram              bbox                    earwax                  life                    reverse                 streamselect
ainterleave             biquad                  ebur128                 lowpass                 rgbtestsrc              super2xsai
alimiter                blackdetect             edgedetect              lut                     rotate                  swaprect
allpass                 blackframe              elbg                    lut3d                   sab                     swapuv
allrgb                  blend                   eq                      lutrgb                  scale                   tblend
allyuv                  boxblur                 equalizer               lutyuv                  scale2ref               telecine
alphaextract            cellauto                erosion                 mandelbrot              select                  testsrc
alphamerge              channelmap              extractplanes           maskedmerge             selectivecolor          testsrc2
amerge                  channelsplit            extrastereo             mcdeint                 sendcmd                 thumbnail
ametadata               chorus                  fade                    mergeplanes             separatefields          tile
amix                    chromakey               fftfilt                 metadata                setdar                  tinterlace
amovie                  codecview               field                   movie                   setfield                transpose
anequalizer             color                   fieldmatch              mpdecimate              setpts                  treble
anoisesrc               colorbalance            fieldorder              mptestsrc               setsar                  tremolo
anull                   colorchannelmixer       find_rect               negate                  settb                   trim
anullsink               colorkey                flanger                 nnedi                   showcqt                 unsharp
anullsrc                colorlevels             format                  noformat                showfreqs               uspp
apad                    colormatrix             fps                     noise                   showinfo                vectorscope
aperms                  compand                 framepack               null                    showpalette             vflip
aphasemeter             compensationdelay       framerate               nullsink                showspectrum            vibrato
aphaser                 concat                  framestep               nullsrc                 showspectrumpic         vignette
apulsator               convolution             fspp                    overlay                 showvolume              volume
arealtime               copy                    geq                     owdenoise               showwaves               volumedetect
aresample               cover_rect              gradfun                 pad                     showwavespic            vstack
areverse                crop                    haldclut                palettegen              shuffleframes           w3fdif
aselect                 cropdetect              haldclutsrc             paletteuse              shuffleplanes           waveform
asendcmd                curves                  hflip                   pan                     sidechaincompress       xbr
asetnsamples            dcshift                 highpass                perms                   sidechaingate           yadif
asetpts                 dctdnoiz                histeq                  perspective             signalstats             zoompan
asetrate                deband                  histogram               phase                   silencedetect


Enabled bsfs:
aac_adtstoasc           h264_mp4toannexb        mjpeg2jpeg              mov2textsub             mpeg4_unpack_bframes    remove_extradata
chomp                   hevc_mp4toannexb        mjpega_dump_header      mp3_header_decompress   noise                   text2movsub
dump_extradata          imx_dump_header


Enabled indevs:
dv1394                  fbdev                   lavfi                   oss                     v4l2


Enabled outdevs:
fbdev                   oss                     v4l2


参考资料:

bitrate和QP都没有缺省值,一旦设置他们就表示要按照相应的码率控制方法进行编码,CRF有缺省值23,没有任何关于编码控制的设置时就按照CRF缺省值23来编码。        


    一般的使用建议:    
    CQP – 一般不推荐使用,在一些算法验证工作中会使用这种模式     
    CRF – 适合在关注一遍编码质量而输出文件大小或码率不是太紧要的场景下使用,一般网络压片使用CRF。     
    1 pass ABR – 适用于流媒体或者目标码率受限的实时应用场景。    
    2 pass VBR – 适用于有目标码率限制而又有时间可以进行二次编码的非实时应用。
 
2. CQP,恒定QP. 无缺省值
        最简单的码率控制方式,每帧图像都按照一个特定的QP来编码,每帧编码后的数据量有多大是未知的。
        参数qp_constant设置的是P帧的QP。I,B帧的QP根据f_ip_factor, f_pb_factor,计算得到。
        连续多个B帧时,QP会渐增。        x264 YUV420格式 8比特采样的QP范围是[0, 51]。QP值越小,编码视觉质量越好。QP=0为无失真编码。
        在研究编码算法的时候,一般会选用CQP方法,设定QP为24,28,32,36,40等(一般选4个QP值),编码得到RD曲线,然后比较算法优劣。 
        相同视觉质量时,CQP编码输出的文件会比CRF模式更大。一般而言CRF都能代替CQP方法,不过CQP因为完全不需要预测所以它会运行得更快一些。 
        帧的重要级别为:IDR帧 > I帧 > P帧 > 做参考的B帧 > 不做参考的B帧。QP可以依次增大。  
 
       QPmin,默认值: 0。定义X264可以使用的最小量化值。量化值越小,输出视频质量就越好。
               当QP小于某一个值后,编码输出的宏块质量与原始块极为相近,这时没必要继续降低QP。
               如果开启了自适应量化器(默认开启),不建议提高QPmin的值,因为这会降低平滑背景区域的视觉质量。
       QPmax,默认值: 51。定义X264可以使用的最大量化值。默认值51是H.264规格中可供使用的最大量化值。
               如果想要控制X264输出的最低品质,可以将此值设置的小一些。
               QPmin和QPmax在CRF,ABR方法下是有效的,过低的设置QPmax,可能造成ABR码率控制失败。不建议调整这个参数。
       QPstep,默认值: 4。设置两帧间量化值的最大变化幅度。 
       帧间QP变化,帧内宏块QP不变,输出码率未知,各帧输出视觉质量有变化(高QP低码率的情况下会更明显)。
 
3. CRF,恒定Rate Factor (码率系数)缺省值23
       CQP是把某个量化值作为目标,bitrate是把某个输出文件大小作为目标,而CRF则是把某个输出“视觉质量”作为目标。
       CRF可以提供跟QP一样的视觉质量,但是文件更小,CRF是通过降低那些“less important”帧的质量来达到此目的的。
       “less important”的意思是那些过于耗费码率又难以用肉眼察觉的帧,比如复杂或者高速运行的场景。省下来的码率会分配给其它更有效的帧。
       在X264编码器内部CRF和bitrate采用了相同的调整策略,只是它不遵循一个特定的输出码率。
       它也是通过改变不同重要级别帧(I,P,B类型),以及帧内不同宏块类型(高速运动,复杂纹理,平坦区域)的QP值,以此来调整输出视觉质量。
       和QP的范围一样RF的范围也是[0, 51]。其中0为无损模式,23为缺省,51质量最差。和QP一样的趋势。RF值加6,输出码率大概减少一半;减6,输出码率翻倍。
       从主观上讲,18~28是一个合理的范围,18往往被认为从视觉上看是近似无损的。
       帧间QP变化,帧内宏块QP变化,输出码率未知,各帧输出视觉质量基本恒定。
 
4. ABR, 恒定平均目标码率。想要选择这种码率控制方法,必须先设置bitrate。
       X264中bitrate的单位是Kbps(K bit per second). --bitrate 128指的是设置目标码率为128Kbps, 这样一秒钟的数据量为 128/8比特 = 16K字节。
       如果输入为352x288@15fps,相当于128Kbit/(352*288*15) = 0.086比特每像素。编码后每个像素平均分配不到0.1个比特。
       与ABR相应的技术有CBR,VBR。这些码率控制技术首先都是在音频编码中采用,是解决音频编码采用什么样的比特率最优的问题。
       CBR编码码比特率基本保持恒定在目标比特率,有利于流式播放。
       CBR的缺点在于复杂场景码率不够用,简单场景码率浪费,因此编码内容的视觉质量不稳定。通常在较低比特率下,这种质量的变化会更加明显。
       VBR编码为简单场景分配较大的QP,为复杂的场景分配较小的QP,得到基本稳定的输出视觉质量。   
          相对于CBR,在相同文件大小的条件下,VBR的输出结果要比CBR好的多,这有利于媒体下载和本地存储。
       VBR的缺点在于输出码流大小不可控。同时对于复杂度恒定的内容(例如新闻播音)没什么优势。
       ABR编码为简单场景分配较少的比特,从而留出足量的比特用于生成高质量的复杂部分。使得有限的比特数能够在不同的场景间合理分配,这类似于VBR。
          同时ABR分配码率,使得在一定时间内,平均码率趋近于目标码率,这样可以控制输出文件大小,这点类似于CBR。
       因此可以认为ABR是CBR和VBR的一种折中优化方案。
       分析视频编码码率控制可以通过三个因素:
       1. 视觉质量稳定性,利于视觉主观质量;
       2. 即时输出码率,相当于每帧编码输出比特数;
       3. 输出视频文件大小可控,利于传输,存储。
       比较这三种码率控制方式如下:
       #        视觉质量稳定性         即时输出码率        输出文件大小
       CBR          不稳定               恒定               可控
       VBR           稳定                变化              不可控
       ABR         基本稳定               变化               可控 (即时码率变化,但一段时期内平均码率趋近目标码率)


       在当前X264版本中(version 142),选用ABR需要注意两个设置,1.fps;2.输出帧pts计算。  
       1. fps。ABR会根据帧率来估算每帧的平均数据量,bitrate/fps为平均一帧数据量。
          当输入视频源为YUV数据,需要显式的指定正确的帧率--fps,否则X264会用缺省的25fps来计算,有可能控制不到设定的目标码率。
       2. pts计算。ABR算法中用到不同帧的pts作为帧间距离,如果没有设置输出帧的pts值,X264会报“non-strictly-monotonic PTS”警告。
          编码出来的视频文件码率很小,根本达不到bitrate的设置,同时视频质量很差,几乎都为马赛克。两种方法解决这个问题:
          a. 设置param.b_vfr_input = 0,这时用fps而不是timebase,timestamps来计算帧间距离
          b. 在解码后主动更新pts, pic_out.i_pts++;
         这两种方式都可以避免ABR码率控制失效的问题。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值