web-dev-qa-db-ja.com

ffmpeg / avconvでビデオをWebMに変換する

一方で ホームビデオのサイズを最適化しようとしています XubuntuのPitiviを使用して、テストとしてWebMにいくつか変換しました。サイズの違いは重要です。結果のwebmファイルは、元のファイルの約10%にすぎませんが、画質はほとんど同じです。

また、avconvを使用して変換を試みたので、スクリプトを作成することもできましたが、結果のファイルは本当にひどく見えます。 Pitiviのレンダリング設定を確認した後、いくつかのパラメーターを試しました:avconv -i $1 -q 5 -qmin 0 -qmax 63 ${1%.*}.webm、しかし、品質はまだがらくたのように見えるので、私はいくつかの間違ったパラメータを欠落/使用しているようです。誰かがh264ムービーをwebmに変換してPitiviと同じ品質を得るために使用する正しいパラメーターを知っていますか?

これらはPitiviの設定です: creating the Pitivi ProjectRendering to webm (html5 video)codec configuration

18
jeroen

注:この情報は VP9エンコーディング のFFmpeg Wikiに基づいています。詳細については、その記事を参照してください。継続的に保守および拡張されます。最良の結果を得るには、最新バージョンのffmpegを使用する必要があります Webサイトからダウンロード (静的ビルドで十分です。libvps-vp9エンコーダーが含まれています)。

可変ビットレート

VBRエンコーディングは、エンコーダーがフレームに割り当てるビット数を自由に選択できるため、全体的な品質が最適になります。固定ビットレートストリーミング用のビデオを準備する場合を除き、このモードを選択します。

オプション1:一定品質のエンコード

通常、特定のファイルサイズをターゲットにしたくない場合は、ビットレートを自由に変化させる必要があります。これにより、最高の品質が得られます。これを行うには、ビットレートを0に設定し、一定のレート係数( [〜#〜] crf [〜#〜] )をターゲットの品質レベルに設定します。

ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 0 output.webm

CRF値は0〜63です。値が小さいほど品質が高くなります。推奨値は15〜35の範囲で、1080p HDビデオには31が推奨されます。 Googleには 詳細はこちら のガイドがあります。

オプション2:ターゲットビットレートでの2パスエンコーディング

ファイルに特定のターゲットビットレートまたはファイルサイズを設定する場合は、レートを指定し、2パスエンコーディングを使用する必要があります(これにより、最適な品質分布が保証されます)。ここでは5 MBit/sを選択していますが、これは1080pコンテンツには十分です。

ffmpeg -i input.mp4 -c:v libvpx-vp9 -b:v 5M -pass 1 -f webm /dev/null && \
ffmpeg -i input.mp4 -c:v libvpx-vp9 -b:v 5M -pass 2 output.webm

Windowsユーザーは、/dev/nullの代わりにNULを使用し、^の代わりに\を使用する必要があります。

固定ビットレート

まず、libvpx 固定ビットレートと可変ビットレートのエンコーディングモードを提供 。ファイルサイズごとの平均品質が低下するため、一定のビットレートは可能な限り避けてください(特定のファイルサイズまたはストリーミングシナリオをターゲットにしない限り)。それでも、他に何も機能しない場合は、一定のビットレートを設定してみてください。 1 MBit/sの場合:

ffmpeg -i input.mp4 -c:v libvpx-vp9 -minrate 5M -maxrate 5M -b:v 5M output.webm

出力を見て、ビットレートを好みに応じて増減します(またはファイルサイズの制限)。たとえば、500Kまたは5Mなどを使用できます。

エンコーダでCBRを使用するには、-minrate-maxrate、およびビットレート-b:vを指定する必要があります。それらはすべて同じ値である必要があります。そうしないと、代わりに別のターゲットビットレートが選択され、VBRエンコーディングが行われますが、品質が低下します。

オーディオ

VP9エンコーディングに現在選択されているオーディオコーデックはOpusです。 FFmpegはデフォルトで必要なエンコーダーとそのオプションを選択します。 -c:a libopusを明示的に設定したい場合は、同様に設定できます。その他のオプションについては、 libopusのドキュメント を参照してください。

53
slhck