FFMpeg使用x264和x265编码库

FFMpeg使用x264和x265编码库

最近收到一个小任务是转换1920x1080@120Hz片源出来确认下平台120Hz的支持能力

然后看了下spec 120Hz的支持规格有

H264只有一个规格

Level Max macroblocks Max video bit rate (VCL) Examples for high resolution @ frame rate (max stored frames)
per second per frame BP, XP, MP (kbit/s) HiP (kbit/s) Hi10P (kbit/s) Hi422P, Hi444PP (kbit/s)
5.1 983,040 36,864 240,000 300,000 720,000 960,000 1,920×1,[email protected] (16) 4,096×2,[email protected] (5) 4,096×2,[email protected] (5)

H265 要5.0 level 以上才有

MPEG4也有,不过具体规格没去看

这边用ffmpeg命令生成

ffmpeg -i 132.mp4 -r 120 132.120hz.mp4

ffmpeg是默认编译的,转成120Hz的时候将编码格式默认转为了MPEG4了

General
Complete name                            : D:\Media\120Hz\[email protected]
Format                                   : MPEG-4
Format profile                           : Base Media
Codec ID                                 : isom (isom/iso2/avc1/mp41)
File size                                : 61.4 MiB
Duration                                 : 1 min 28 s
Overall bit rate                         : 5 837 kb/s
Writing application                      : Lavf59.4.101

Video
ID                                       : 1
Format                                   : AVC
Format/Info                              : Advanced Video Codec
Format profile                           : [email protected]
Format settings                          : CABAC / 4 Ref Frames
Format settings, CABAC                   : Yes
Format settings, Reference frames        : 4 frames
Codec ID                                 : avc1
Codec ID/Info                            : Advanced Video Coding
Duration                                 : 1 min 28 s
Bit rate                                 : 5 689 kb/s
Width                                    : 1 920 pixels
Height                                   : 1 080 pixels
Display aspect ratio                     : 16:9
Frame rate mode                          : Constant
Frame rate                               : 120.000 FPS
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 8 bits
Scan type                                : Progressive
Bits/(Pixel*Frame)                       : 0.023
Stream size                              : 59.8 MiB (97%)
Writing library                          : x264 core 150
Encoding settings                        : cabac=1 / ref=3 / deblock=1:0:0 / analyse=0x3:0x113 / me=hex / subme=7 / psy=1 / psy_rd=1.00:0.00 / mixed_ref=1 / me_range=16 / chroma_me=1 / trellis=1 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=1 / chroma_qp_offset=-2 / threads=34 / lookahead_threads=5 / sliced_threads=0 / nr=0 / decimate=1 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / bframes=3 / b_pyramid=2 / b_adapt=1 / b_bias=0 / direct=1 / weightb=1 / open_gop=0 / weightp=2 / keyint=250 / keyint_min=25 / scenecut=40 / intra_refresh=0 / rc_lookahead=40 / rc=crf / mbtree=1 / crf=23.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / ip_ratio=1.40 / aq=1:1.00
Language                                 : English
Color range                              : Limited
Color primaries                          : BT.709
Transfer characteristics                 : BT.709
Matrix coefficients                      : BT.709
Codec configuration box                  : avcC

Audio
ID                                       : 2
Format                                   : AAC LC
Format/Info                              : Advanced Audio Codec Low Complexity
Codec ID                                 : mp4a-40-2
Duration                                 : 1 min 28 s
Source duration                          : 1 min 28 s
Bit rate mode                            : Constant
Bit rate                                 : 132 kb/s
Channel(s)                               : 2 channels
Channel layout                           : L R
Sampling rate                            : 48.0 kHz
Frame rate                               : 46.875 FPS (1024 SPF)
Compression mode                         : Lossy
Stream size                              : 1.37 MiB (2%)
Source stream size                       : 1.37 MiB (2%)
Language                                 : English
Default                                  : Yes
Alternate group                          : 1
mdhd_Duration                            : 88192

因为我这边编译的ffmpeg 默认是不带x264和x265的,可以通过如下命令确认

ffmpeg -encoders

没有看到x264跟x265的支持,随手也添加下这两个的支持

x264和x265编译安装

编译帮助可以看官网介绍

https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu

编译x265

下载源码和配置Cmake参数

tar xjvf x265.tar.bz2
cd multicoreware*/build/linux
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$MY_TOOLS" \
 -DENABLE_SHARED=off ../../source
make
make install

编译x264

先下载编译x264支持库源码,配置编译安装prefix路径、是否静态库安装等等

 cd x264/
 make -j4
 ./configure --prefix=$MY_TOOLS --enable-static --enable-pic \
   --extra-cflags="-fPIE -pie" --extra-ldflags="-fPIE -pie" --disable-asm
 make -j4
 make install

重编译ffmpeg

然后在重新编译ffmpeg,主要是使能 --enable-libx264 --enable-libx265 编译配置

 ./configure --prefix=/home/workspace5/xxxxx/tools --disable-yasm \
 --enable-nonfree  --enable-shared  --enable-gpl --enable-libx264 \
 --enable-libx265 \
 --enable-debug=3 --disable-optimizations --disable-asm --disable-stripping \
 --extra-cflags=-I/home/workspace5/xxxxx/tools/include \
 --extra-ldflags=-L/home/workspace5/xxxxx/tools/lib \
 --enable-rpath --libdir=/home/workspace5/xxxxx/tools/lib \
 --extra-libs=-ldl
 make -j4
 make install

x264+ffmpeg编译错误处理

编译ffmpeg的时候出现ERROR: libx264 not found

最近用Linux编译ffmpeg的时候出现了错误ERROR: libx264 not found

查看config.log原因如下

./x264/libx264.a(opencl.o): In function `x264_opencl_close_library': 
opencl.c:(.text+0x572): undefined reference to `dlclose' 
./x264/libx264.a(opencl.o): In function `x264_opencl_load_library': 
opencl.c:(.text+0x5d7): undefined reference to `dlopen' 
opencl.c:(.text+0x5f1): undefined reference to `dlsym' 
opencl.c:(.text+0x60e): undefined reference to `dlsym' 
opencl.c:(.text+0x62b): undefined reference to `dlsym' 
opencl.c:(.text+0x648): undefined reference to `dlsym' 
opencl.c:(.text+0x665): undefined reference to `dlsym' 
./x264/libx264.a(opencl.o):opencl.c:(.text+0x682): more undefined references to `dlsym' follow 
./x264/libx264.a(opencl.o): In function `x264_opencl_load_library': 
opencl.c:(.text+0x8fd): undefined reference to `dlclose' 
./x264/libx264.a(opencl.o): In function `x264_opencl_lookahead_init': 
opencl.c:(.text+0x1841): undefined reference to `dlopen' 
opencl.c:(.text+0x185b): undefined reference to `dlsym' 
opencl.c:(.text+0x186d): undefined reference to `dlsym' 
opencl.c:(.text+0x1881): undefined reference to `dlsym' 
opencl.c:(.text+0x1895): undefined reference to `dlsym' 
opencl.c:(.text+0x18d4): undefined reference to `dlclose' 
collect2: ld returned 1 exit status

查阅资料需要在ffmpeg编译的时候额外指定一下-ldl库

例如进入ffmpeg源码目录

./configure --prefix=/home/workspace5/xxxxx/tools --disable-yasm --enable-nonfree --enable-shared \
               --enable-gpl --enable-libx264 --enable-debug=3 --disable-optimizations --disable-asm --disable-stripping  \
               --extra-cflags=-I/home/workspace5/xxxxx/tools/include --extra-ldflags=-L/home/workspace5/xxxxx/tools/lib \
               --enable-rpath --libdir=/home/workspace5/xxxxx/tools/lib --extra-libs=-ldl

重点在于

--extra-libs=-ldl

然后可以通过 如下命令获取x264的帮助,可以看到版本信息,编译和运行配置和格式支持及命令帮助等

$ffmpeg -h encoder=libx264
ffmpeg version N-103078-gbc5faac Copyright (c) 2000-2021 the FFmpeg developers
  built with gcc 4.8 (Ubuntu 4.8.4-2ubuntu1~14.04.4)
configuration: --prefix=/home/workspace5/xxxxx/tools --disable-yasm --enable-nonfree --enable-shared \
               --enable-gpl --enable-libx264 --enable-debug=3 --disable-optimizations --disable-asm --disable-stripping  \
               --extra-cflags=-I/home/workspace5/xxxxx/tools/include --extra-ldflags=-L/home/workspace5/xxxxx/tools/lib \
               --enable-rpath --libdir=/home/workspace5/xxxxx/tools/lib --extra-libs=-ldl
  libavutil      57\.  2.100 / 57\.  2.100
  libavcodec     59\.  3.102 / 59\.  3.102
  libavformat    59\.  4.101 / 59\.  4.101
  libavdevice    59\.  0.100 / 59\.  0.100
  libavfilter     8\.  1.103 /  8\.  1.103
  libswscale      6\.  0.100 /  6\.  0.100
  libswresample   4\.  0.100 /  4\.  0.100
  libpostproc    56\.  0.100 / 56\.  0.100
Encoder libx264 [libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10]:
    General capabilities: dr1 delay threads 
    Threading capabilities: other
    Supported pixel formats: yuv420p yuvj420p yuv422p yuvj422p yuv444p yuvj444p nv12 nv16 nv21
libx264 AVOptions:
  -preset                 E..V....... Set the encoding preset (cf. x264 --fullhelp) (default "medium")
  -tune                   E..V....... Tune the encoding params (cf. x264 --fullhelp)
  -profile                E..V....... Set profile restrictions (cf. x264 --fullhelp) 
  -fastfirstpass         E..V....... Use fast settings when encoding first pass (default true)
  -level                  E..V....... Specify level (as defined by Annex A)
  -passlogfile            E..V....... Filename for 2 pass stats
  -wpredp                 E..V....... Weighted prediction for P-frames
  -a53cc                 E..V....... Use A53 Closed Captions (if available) (default true)
  -x264opts               E..V....... x264 options
  -crf                     E..V....... Select the quality for constant quality mode (from -1 to FLT_MAX) (default -1)
  -crf_max                 E..V....... In CRF mode, prevents VBV from lowering quality beyond this point. (from -1 to FLT_MAX) (default -1)
  -qp                        E..V....... Constant quantization parameter rate control method (from -1 to INT_MAX) (default -1)
  -aq-mode                   E..V....... AQ method (from -1 to INT_MAX) (default -1)
     none            0            E..V.......
     variance        1            E..V....... Variance AQ (complexity mask)
     autovariance    2            E..V....... Auto-variance AQ
     autovariance-biased 3            E..V....... Auto-variance AQ with bias to dark scenes
  -aq-strength             E..V....... AQ strength. Reduces blocking and blurring in flat and textured areas. (from -1 to FLT_MAX) (default -1)
  -psy                   E..V....... Use psychovisual optimizations. (default auto)
  -psy-rd                 E..V....... Strength of psychovisual optimization, in : format.
  -rc-lookahead              E..V....... Number of frames to look ahead for frametype and ratecontrol (from -1 to INT_MAX) (default -1)
  -weightb               E..V....... Weighted prediction for B-frames. (default auto)
  -weightp                   E..V....... Weighted prediction analysis method. (from -1 to INT_MAX) (default -1)
     none            0            E..V.......
     simple          1            E..V.......
     smart           2            E..V.......
  -ssim                  E..V....... Calculate and print SSIM stats. (default auto)
  -intra-refresh         E..V....... Use Periodic Intra Refresh instead of IDR frames. (default auto)
  -bluray-compat         E..V....... Bluray compatibility workarounds. (default auto)
  -b-bias                    E..V....... Influences how often B-frames are used (from INT_MIN to INT_MAX) (default INT_MIN)
  -b-pyramid                 E..V....... Keep some B-frames as references. (from -1 to INT_MAX) (default -1)
     none            0            E..V.......
     strict          1            E..V....... Strictly hierarchical pyramid
     normal          2            E..V....... Non-strict (not Blu-ray compatible)
  -mixed-refs            E..V....... One reference per partition, as opposed to one reference per macroblock (default auto)
  -8x8dct                E..V....... High profile 8x8 transform. (default auto)
  -fast-pskip            E..V....... (default auto)
  -aud                   E..V....... Use access unit delimiters. (default auto)
  -mbtree                E..V....... Use macroblock tree ratecontrol. (default auto)
  -deblock                E..V....... Loop filter parameters, in  form.
  -cplxblur                E..V....... Reduce fluctuations in QP (before curve compression) (from -1 to FLT_MAX) (default -1)
  -partitions             E..V....... A comma-separated list of partitions to consider. Possible values: p8x8, p4x4, b8x8, i8x8, i4x4, none, all
  -direct-pred               E..V....... Direct MV prediction mode (from -1 to INT_MAX) (default -1)
     none            0            E..V.......
     spatial         1            E..V.......
     temporal        2            E..V.......
     auto            3            E..V.......
  -slice-max-size            E..V....... Limit the size of each slice in bytes (from -1 to INT_MAX) (default -1)
  -stats                  E..V....... Filename for 2 pass stats
  -nal-hrd                   E..V....... Signal HRD information (requires vbv-bufsize; cbr not allowed in .mp4) (from -1 to INT_MAX) (default -1)
     none            0            E..V.......
     vbr             1            E..V.......
     cbr             2            E..V.......
  -avcintra-class            E..V....... AVC-Intra class 50/100/200/300/480 (from -1 to 480) (default -1)
  -me_method                 E..V....... Set motion estimation method (from -1 to 4) (default -1)
     dia             0            E..V.......
     hex             1            E..V.......
     umh             2            E..V.......
     esa             3            E..V.......
     tesa            4            E..V.......
  -motion-est                E..V....... Set motion estimation method (from -1 to 4) (default -1)
     dia             0            E..V.......
     hex             1            E..V.......
     umh             2            E..V.......
     esa             3            E..V.......
     tesa            4            E..V.......
  -forced-idr            E..V....... If forcing keyframes, force them as IDR frames. (default false)
  -coder                     E..V....... Coder type (from -1 to 1) (default default)
     default         -1           E..V.......
     cavlc           0            E..V.......
     cabac           1            E..V.......
     vlc             0            E..V.......
     ac              1            E..V.......
  -b_strategy                E..V....... Strategy to choose between I/P/B-frames (from -1 to 2) (default -1)
  -chromaoffset              E..V....... QP difference between chroma and luma (from INT_MIN to INT_MAX) (default 0)
  -sc_threshold              E..V....... Scene change threshold (from INT_MIN to INT_MAX) (default -1)
  -noise_reduction           E..V....... Noise reduction (from INT_MIN to INT_MAX) (default -1)
  -x264-params        E..V....... Override the x264 configuration using a :-separated list of key=value parameters

添加完x264编码库后就是可以配置其Codec模式编码生成120Hz片源了,主要是配置 -c:v libx264, x265同理

ffmpeg -i 132.mp4 -c:v libx264 -r 120 132.120hz.mp4

关于 ffmpeg x264更多使用方法可以看

https://www.likecs.com/show-279356.html

H.264 Video Encoding Guide

代码的使用方法可以参考

FFmpeg H264编码

使用FFmpeg实现H.264编码

你可能感兴趣的:(FFMpeg使用x264和x265编码库)