ffmpegの4.0が出たようです。
FFmpeg 4.0 "Wu", a new major release, is now available!
— FFmpeg (@FFmpeg) 2018年4月20日
New filters, more hardware features, dropped Windows XP, removed ffserver, initial AV1 support, android_camera input device, codec2, SBC, aptX, TiVo ty+, and more.https://t.co/vw1gfar9Ll
https://www.ffmpeg.org/index.html#pr4.0
最近話題のAV1さんがいますね。
というわけでちょっと使ってみました。
準備
Windowsでのビルドがめんどくさかったのでここ( https://ffmpeg.zeranoe.com/builds/ )からビルド版をダウンロード。
エンコードしてみた
$ ./bin/ffmpeg -r 24 -s 352x288 -i C:/cygwin/home/yue/data/yuv/cif/bus_cif.yuv -frames 15 -b:v 95k -preset slow -vcodec libaom-av1 -strict -2 C:/cygwin/home/yue/data/rd_seq/cif/av1/test.ivf ffmpeg version N-90793-g30940be359 Copyright (c) 2000-2018 the FFmpeg developers built with gcc 7.3.0 (GCC) configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-bzlib --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth libavutil 56. 15.100 / 56. 15.100 libavcodec 58. 19.100 / 58. 19.100 libavformat 58. 13.100 / 58. 13.100 libavdevice 58. 4.100 / 58. 4.100 libavfilter 7. 18.100 / 7. 18.100 libswscale 5. 2.100 / 5. 2.100 libswresample 3. 2.100 / 3. 2.100 libpostproc 55. 2.100 / 55. 2.100 [rawvideo @ 0011edc0] Estimating duration from bitrate, this may be inaccurate Input #0, rawvideo, from 'C:/cygwin/home/yue/data/yuv/cif/bus_cif.yuv': Duration: 00:00:06.00, start: 0.000000, bitrate: 30412 kb/s Stream #0:0: Video: rawvideo (I420 / 0x30323449), yuv420p, 352x288, 30412 kb/s, 25 tbr, 25 tbn, 25 tbc Codec AVOption preset (Configuration preset) specified for output file #0 (C:/cygwin/home/yue/data/rd_seq/cif/av1/test.ivf) has not been used for any stream. The most likely reason is either wrong type (e.g. a video option with no video streams) or that it is a private option of some encoder which was not actually used for any stream. Stream mapping: Stream #0:0 -> #0:0 (rawvideo (native) -> av1 (libaom-av1)) Press [q] to stop, [?] for help [libaom-av1 @ 03b35680] 0.1.0-9265-gff07a1210 Output #0, ivf, to 'C:/cygwin/home/yue/data/rd_seq/cif/av1/test.ivf': Metadata: encoder : Lavf58.13.100 Stream #0:0: Video: av1 (libaom-av1) (AV01 / 0x31305641), yuv420p, 352x288, q=-1--1, 95 kb/s, 24 fps, 24 tbn, 24 tbc Metadata: encoder : Lavc58.19.100 libaom-av1 Side data: cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1 frame= 15 fps=0.1 q=-0.0 Lsize= 44kB time=00:00:00.62 bitrate= 576.5kbits/s speed=0.00485x video:44kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.472898%
15frameでだいたい2分くらい。
ビットレート95kbps指定の結果を比較
ffplayで再生して見比べてみる。fpsを24としてエンコードしている。
コーデック | AV1 (aom) | h264(x264) | h265(x265) |
---|---|---|---|
15フレームめ | |||
指定ビットレート | 95 kbps | 95 kbps | 95 kbps |
ファイルサイズ | 57.2 kB | 11.3 kB | 18.2 kB |
実際のビットレート | 732.16kbps | 144.64kbps | 232.96kbps |
すごーいきれーい、だが、ファイルサイズがかなり違う。
指定ビットレートが同じはずなのに・・・どこかで設定ミスっているかもしれない。
実際のビットレートが似ている結果を比較
なんとなくファイルサイズの似たのを探すと、h265のビットレート760kbps指定のが近かったのでそちらと比べてみる。
コーデック | AV1 (aom) | h264(x264) | h265(x265) |
---|---|---|---|
15フレームめ | |||
指定ビットレート | 95 kbps | 760 kbps | 760 kbps |
ファイルサイズ | 57.2 kB | 72.2 kB | 57.8 kB |
実際のビットレート | 732.16 kbps | 924.16 kbps | 739.84 kbps |
h264よりはきれいだが、h265と比べると265のほうがきれいに見える・・気がする。
RD曲線引いてみた
PSNRで適当に2枚ほど。上と同じくcif15frame。
高ビットレートでぐんと伸びる傾向がある。
presetを変えてもほとんど変わっていないので、チューニングされてないということだろうか。(それで言うとx264もだけど)
エンコード時間測ってみた
😇
追記
ファイルサイズから実際のビットレートの計算をするのが間違えていた(bit/Byte)ので修正しました。
追記2
自分でビルドしてみた。
環境
- ubuntu 16.04
- gcc 5.4.0
- cmake 3.5.1
aomのmake
$ git clone https://aomedia.googlesource.com/aom $ cd aom $ mkdir aom_build $ cd aom_build $ sudo apt-get install libwxbase3.0-dev libwxgtk3.0-dev $ sudo apt-get install yasm $ cmake .. $ make
ffmpegにlibaomをつなげてmake
$ git clone https://git.ffmpeg.org/ffmpeg.git $ git checkout remotes/origin/release/4.0 $ sudo cp aom_build/aom.pc /usr/local/lib/pkgconfig/ $ sudo cp aom_build/libaom.a /usr/local/lib/ $ ./configure --enable-version3 --enable-gpl --enable-libvmaf --enable-libx264 --enable-libx265 --enable-libvpx --enable-libaom --prefix=/usr/local --enable-nonfree --enable-static --disable-shared --extra-cflags="-I/usr/local/include -I/usr/include -I/path/to/aom" --extra-ldflags="-L/usr/local/lib" --enable-libfreetype $ make
libaomはデコードに使うらしい (https://www.ffmpeg.org/general.html#Alliance-for-Open-Media-libaom)