多媒体科技音视频开发集锦视频编码

FFmpeg 编译支持AV1编解码器libaom-av1

2019-03-27  本文已影响2人  smallest_one

目录

  1. 参考
  2. 编译libaom-av1
  3. 编译FFmpeg增加libaom-av1支持

1. 参考

2. 编译libaom-av1

2.1 下载源码

git clone https://aomedia.googlesource.com/aom

2.2 编译环境要求

  1. CMake >=3.5
  2. Perl
  3. 对于x86平台,推荐安装yasm或者最新版本的nasm
  4. 构建文档需要doxygen
  5. 构建单元测试需要python
  6. 构建Emscripten需要可移植的EMSDK,编译成js用的。

2.3 编译

$ cd path/to/aom
$ mkdir mybuild
$ cmake -B./mybuild -H. -DBUILD_SHARED_LIBS=1
$ cd mybuild
$ make

3. 编译FFmpeg增加libaom-av1支持

3.1 编写aom.pc

参考 FFmpeg 编译支持AV1编解码器dav1d#编写dav1d.pc

3.2 编译FFmpeg

./configure --prefix=../buildout --enable-shared --disable-static --enable-libaom
# 编译后检查一下config.h中AOM是否配置成功了,如`#define CONFIG_LIBAOM 1`。
make
make install

3.3 使用libaom-av1编解码器

编码示例:把mp4文件中的h264格式转码为av1格式,使用libaom-av1编码器

$ffmpeg -i julin_5s.mp4 -c:v libaom-av1 -c:a copy -strict -2 julin_5s_av1.mp4

打印的输出如下:

ffmpeg version N-93462-ge9c9514 Copyright (c) 2000-2019 the FFmpeg developers
  built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.9) 20160609
  configuration: --prefix=../buildout --enable-shared --disable-static --enable-libdav1d --enable-libaom
  libavutil      56. 26.100 / 56. 26.100
  libavcodec     58. 47.105 / 58. 47.105
  libavformat    58. 26.101 / 58. 26.101
  libavdevice    58.  7.100 / 58.  7.100
  libavfilter     7. 48.100 /  7. 48.100
  libswscale      5.  4.100 /  5.  4.100
  libswresample   3.  4.100 /  3.  4.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'julin_5s.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    artist          : yinyuetai.com
    album           : Yinyuetai
    date            : 05/25/16 09:57:09
    encoder         : Lavf57.71.100
    comment         : Yinyuetai-1TR1042
  Duration: 00:00:05.02, start: 0.000000, bitrate: 1310 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x720, 1178 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> av1 (libaom-av1))
  Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
[libaom-av1 @ 0x1859a80] v1.0.0
Output #0, mp4, to 'julin_5s_av1.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    artist          : yinyuetai.com
    album           : Yinyuetai
    date            : 05/25/16 09:57:09
    comment         : Yinyuetai-1TR1042
    encoder         : Lavf58.26.101
    Stream #0:0(und): Video: av1 (libaom-av1) (av01 / 0x31307661), yuv420p, 1280x720, q=-1--1, 256 kb/s, 23.98 fps, 24k tbn, 23.98 tbc (default)
    Metadata:
      handler_name    : VideoHandler
      encoder         : Lavc58.47.105 libaom-av1
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
frame=   19 fps=1.7 q=0.0 size=       0kB time=00:00:00.76 bitrate=   0.5kbits/s speed=
......
video:138kB audio:79kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.700814%

解码示例:使用libaom-av1编码器把mp4文件中的av1视频格式解码为yuv的原始数据

ffmpeg -c:v libaom-av1 -i julin_5s_av1.mp4 -f rawvideo julin_5s_av1_yuv

打印的输出如下:

ffmpeg version N-93462-ge9c9514 Copyright (c) 2000-2019 the FFmpeg developers
  built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.9) 20160609
  configuration: --prefix=../buildout --enable-shared --disable-static --enable-libdav1d --enable-libaom
  libavutil      56. 26.100 / 56. 26.100
  libavcodec     58. 47.105 / 58. 47.105
  libavformat    58. 26.101 / 58. 26.101
  libavdevice    58.  7.100 / 58.  7.100
  libavfilter     7. 48.100 /  7. 48.100
  libswscale      5.  4.100 /  5.  4.100
  libswresample   3.  4.100 /  3.  4.100
[libaom-av1 @ 0x1d4ae40] v1.0.0
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'julin_5s_av1.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2mp41
    artist          : yinyuetai.com
    album           : Yinyuetai
    date            : 05/25/16 09:57:09
    encoder         : Lavf58.26.101
    comment         : Yinyuetai-1TR1042
  Duration: 00:00:05.02, start: 0.000000, bitrate: 359 kb/s
    Stream #0:0(und): Video: av1 (Main) (av01 / 0x31307661), yuv420p(tv, progressive), 1280x720, 225 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 24k tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
File 'julin_5s_av1_yuv' already exists. Overwrite ? [y/N] y
[libaom-av1 @ 0x1d5b180] v1.0.0
Stream mapping:
  Stream #0:0 -> #0:0 (av1 (libaom-av1) -> rawvideo (native))
Press [q] to stop, [?] for help
Output #0, rawvideo, to 'julin_5s_av1_yuv':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2mp41
    artist          : yinyuetai.com
    album           : Yinyuetai
    date            : 05/25/16 09:57:09
    comment         : Yinyuetai-1TR1042
    encoder         : Lavf58.26.101
    Stream #0:0(und): Video: rawvideo (I420 / 0x30323449), yuv420p, 1280x720, q=2-31, 265155 kb/s, 23.98 fps, 23.98 tbn, 23.98 tbc (default)
    Metadata:
      handler_name    : VideoHandler
      encoder         : Lavc58.47.105 rawvideo
frame=   25 fps=0.0 q=-0.0 size=   33536kB time=00:00:01.04 bitrate=263474.4kbits/s spe
frame=   49 fps= 49 q=-0.0 size=   66048kB time=00:00:02.04 bitrate=264746.8kbits/s spe
frame=   78 fps= 52 q=-0.0 size=  105216kB time=00:00:03.25 bitrate=264944.1kbits/s spe
frame=  109 fps= 54 q=-0.0 size=  146944kB time=00:00:04.54 bitrate=264784.5kbits/s spe
frame=  120 fps= 56 q=-0.0 Lsize=  162000kB time=00:00:05.00 bitrate=265155.6kbits/s speed=2.33x    
video:162000kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000000%
上一篇 下一篇

猜你喜欢

热点阅读