web-dev-qa-db-ja.com

FFmpegとrav1eを使用して高品質のAV1ファイルを作成するにはどうすればよいですか?

Ubuntu Bionic Beaver 18.04 LTSを使用していますが、FFmpegとlibrav1eを使用して高品質のAV1ファイルを作成したいと考えています。 librav1eとしてのFFmpegへのrav1eサポートの 最近の追加 に拍車をかけられました。

私が使用したい資料はここにあります:

  1. Sintelトレーラービデオ (720p非圧縮1.7GB)
  2. シンテルトレーラーオーディオ (flac 5MB)

まだ多くのドキュメントと公開された実験が行われていないFFmpegの下でのrav1eサポートの非常に初期(2019年11月)です。 Ubuntu LTSリリースですべてが機能するのを見るのは素晴らしいことです!

5
andrew.46

この目標は4比較的簡単なステップで達成できるようです。そのため、Bionic Beaver 18.04 LTSは、FFmpegとrav1eを使用したAV1エンコーディングに対応できます。

1。 Rustの最新のコピーを入手...

Bionic BeaverのコピーはRustつまり古すぎます)なので、次のように新しいコピーを取得します。

Sudo apt-get install curl
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

デフォルトに従い(「Enter」を押すだけ)、次に実行します。

source ~/.profile

最新のRustや友達への即時アクセスを許可します。

2。 rav1eをインストールします

実行可能ファイル(rav1e --fullhelpコマンドは-rav1e-paramsオプションを使用してFFmpeg内から使用できるオプションを表示します)と、FFmpegがlibrav1eを正常にコンパイルおよび生成するために使用するライブラリーの両方をインストールするのが最善です。

最初に、単純なコピーと貼り付けのコードブロックを使用して実行可能ファイルを作成します。

Sudo apt-get install nasm && 
mkdir -pv $HOME/{bin,ffmpeg_sources,ffmpeg_build} && 
cd $HOME/ffmpeg_sources && 
wget https://github.com/xiph/rav1e/archive/v0.3.1.tar.gz && 
tar xvf v0.3.1.tar.gz && cd rav1e-0.3.1 && 
cargo build --release && 
find target -name rav1e -exec install -m 755 {} $HOME/bin \; && 
strip ~/bin/rav1e

次に、cargo-cアプレット、およびFFmpegに必要なライブラリとpkg-configファイルをインストールします。最初にone-offコマンドを実行してcargo-cをインストールします。

cargo install cargo-c

次に、インストールされているcargo-cを使用してrav1eを再度コンパイルします。

cd $HOME/ffmpeg_sources/rav1e-0.3.1 && 
cargo cinstall --release \
     --prefix=$HOME/ffmpeg_build \
     --libdir=$HOME/ffmpeg_build/lib \
     --includedir=$HOME/ffmpeg_build/include

次に、rav1e共有ライブラリを削除し、FFmpegが取得する静的ライブラリを残しておくのが最善です。

rm -v $HOME/ffmpeg_build/lib/librav1e.so*

3。 FFmpegをインストールする

次に FFmpeg tracサイト に移動し、指示に従ってFFmpegをインストールします。追加することを忘れないでください。

--enable-librav1e

./configure文字列に。その後、ハードワークが行われます:)

4。エンコーダーを実行します

その後、元の質問で言及されたテストファイルに対して非常に合理的なエンコードを実行できます。

ffmpeg -i sintel_trailer_2k_720p24.y4m -i sintel_trailer-audio.flac \
       -c:v librav1e -qp 80 -speed 4 \
       -tile-columns 2 -tile-rows 2 \
       -c:a libfdk_aac -b:a 128k \
       sintel_trailer_av1.mp4

ここで操作するものは次のとおりです。

  • -qp 80:「量子化」モードを使用して、0〜255の範囲でエンコードします。値が小さいほど品質が高くなり、デフォルトは100です。80はこのメディアクリップのスイートスポットのようです。
  • -speed 4:エンコードに使用する速度プリセット(0〜10)を選択します。0が最高品質で、10が最も高速です。この特定の設定は、私のシステム(第2世代のThreadripper)の速度と品質の妥協案です。
  • -tile-columns 2 -tile-rows 2 rav1eの タイルベースのエンコーディング を操作することで、かなりまともな速度の向上を実現できます。ここに示した例では、エンコーディングとデコーディングを4つのセグメントに分割し、提案された入力ビデオに適切な選択のように思われますが、自由に試してみてください。

これは、FFmpegとlibaom-av1で見られる速度を何度もエンコードし、間違いなくはるかに優れた品質を生み出します。間違いなく、このエンコード文字列はさらに洗練されている可能性があり、私はこれをrav1e、FFmpegおよびAV1エンコード成熟として実行します...

5。不必要なスクリーンショット

OK、オプションの5番目のステップがあります。実行中の完成した出力ファイルのスクリーンショットを撮ります:)

enter image description here

追記...

  • エンコード時間:av1へのエンコードは悪名高く遅く、初期の頃は予期されていませんでした。提案されたコマンドラインの前にコマンドtimeを追加することにより、いくつかの興味深い統計を生成できます。

    FFmpeg + rav1e 0.3.1    FFmpeg + rav1e 0.2.1  FFmpeg + rav1e 0.2.0
    real    10m50.144s      real    15m22.059s    real   14m22.045s
    user    42m20.816s      user    50m40.257s    user   48m32.285s
    sys     2m5.363s        sys     0m52.360s     sys    0m49.788s
    

    これは、ビデオエンコーディング用に特別に構築された第2世代のThreadripperコンピュータ上にあり、独自の数値は間違いなく異なります...

  • FFmpegドキュメント:rav1eを使用したエンコーディングのFFmpeg実装に関するドキュメント。これは、FFmpegのマニュアルページを検索することでも確認できます。 、man ffmpeg-allまたはman ffmpeg-codecs。ネイティブのrav1eオプションはrav1e --helpで確認でき、-rav1e-paramsオプションを使用してFFmpegコマンドラインに追加できます...

  • FFmpegとBlenderのショートムービー「Sintel」...:AV1エンコーディングだけでなくSintelトレーラーを使用する自分のページVP9、Theora、GPU H.264エンコーディングでのエンコーディングにも使用できます。エンコーディングの知識を拡張したい場合、または単にSintelをもう少しだけ試してみたい場合に興味深い...

9
andrew.46