すべてのエンコーダーが同じというわけではない

すべてのエンコーダーが同じというわけではない

私はソニーのアルファ6400 4kカメラで撮影した1分15秒のmp4動画を持っています。サイズは528MBです。私はこれを を使ってカットしたいと思っていますffmpeg。数秒カットしただけなのに、新しい動画は多くの小さくなります。そこで、元の未編集ファイルでいくつかテストしてみたところ、オプションなしの処理で生成されるファイルの方がはるかに小さいことがわかりました。

 ffmpeg -i C0034.MP4 C0034_ffmpeg.MP4

出力ファイルはC0034_ffmpeg.MP4102MBのスペースしか使用しません。これは入力ファイルの約1/5です。それなし1 秒あたりのフレーム数を減らす、解像度を小さくするなど、ファイル サイズを縮小できるオプションを適用します。

プリセット

によるとドキュメント:

プリセットは、特定のエンコード速度と圧縮率を提供するオプションのコレクションです。

私の理解では、これは-mx=X7zipの切り替え: 圧縮レベルが高いほど、ファイルサイズは小さくなります。時間はかかりますが、ファイルの品質には影響しません。

ffmpeg のデフォルトは中程度です。 に変更するとveryslow、83.4 MB のファイルになりましたが、 では同じファイルが 149 MB でしたultrafast。これは、最も強力な圧縮から最も低い圧縮まで約 66 MB の顕著な違いです。しかし、それでもultrafast生の入力ファイルより 379 MB 小さいので、デフォルトのmediumプリセットでは違いのほとんどを説明できないようです。

定率係数(CRF)

ffmpegの同じH264記事CRFを示しています。ドキュメントによると、ほとんどの用途で推奨されるレート制御モードです。これは、ffmpeg が品質とファイル サイズを決定するために使用される要素のようです。

CRF スケールの範囲は 0 ~ 51 です。0 はロスレス、23 はデフォルト、51 は最悪の品質です。

デフォルトでは 23 が使用されるため、技術的にはロスレス出力ファイルは得られません。しかし、出力ファイルが入力ファイルよりはるかに小さいにもかかわらず、見た目が悪くない理由も説明できます。

17 または 18 は視覚的にロスレスまたはほぼロスレスであると考えてください。入力と同じかほぼ同じように見えますが、技術的にはロスレスではありません。

いろいろ試してみると、CRF はプリセットよりもファイル サイズに大きく影響するようです (プリセットは圧縮のみを処理し、CRF は品質を処理するため、これは明らかです)。プリセットなしの組み合わせをいくつか試しました (デフォルトが使用されます)。

  • -crf 23~> 102 MB (デフォルト)
  • -crf 20~> 189MB
  • -crf 18~> 285MB
  • -crf 17~> 347MB
  • -crf 0~> 2.64 GB

最初のテストから、理由がわかったと思いました。23 と 17 の間に目立った違いがない場合でも (少なくとも私にとっては)、CRF はファイル サイズに大きな影響を与えます。

-crf 0しかし、(ロスレスという意味で) 元の入力ファイルより 5 倍近くも大きいのはなぜなのか、本当に不思議でした。この大きな差から、出力ファイルの品質が入力ファイルより優れていると推測しました。どうしてそんなことが可能なのでしょうか。ffmpeg出力ファイルをそのように大きくするにはどうすればいいのでしょうか。

答え1

すべてのエンコーダーが同じというわけではない

x264 は、非常に効率的な H.264 エンコーダーです。つまり、低いビットレートで高品質を出力できます。x264 は、視覚を欺くための巧妙な「心理視覚」トリックを使用して、効率の低いエンコーダーでは不足する可能性のあるビットを節約します。

カメラや携帯電話の H.264 エンコーダーは、他の優先事項 (少ないリソース、最低限必要なエンコード速度、バッテリー寿命など) のために、より多くの妥協を強いられます。そのため、同じフォーマットを作成しても、非常に非効率になる可能性があり、同じビットレートで x264 に匹敵することはできません。

x264 のデフォルト設定は良好なので、ファイル サイズが大幅に削減される可能性はありますが、一般ユーザーは品質の違いに気付かないことがよくあります。

ロスレスは大きい

この設定では、-crf 0特別な圧縮ロスレス モードを使用します。ファイル サイズを縮小するためのほとんどのトリックは、ロスレス モードでは使用できません。

ロスレスを扱う場合、入力ファイルのサイズは考慮する必要はありません。入力は、ビデオの基本的な構成要素である非圧縮の生のビデオに完全にデコードされます。生のビデオはロスレスですが、圧縮されていないため、ファイル サイズが最も大きくなります。ロスレス エンコーダーは、生のビデオを受け取り、ある程度圧縮しながらもロスレスのままにすることができます。ZIP に似ていますが、ビデオ用に設計されています。生のビデオよりは小さくなりますが、一般的なロスのある H.264 ほど小さくはありません。これは、すべての高度なトリックを使用できないためです。そうでなければ、ロスレスではなくなります。

入力よりも品質の良い出力を作成することはできません。フォーマットやエンコーダーに関係なく、入力と同じかそれ以下の品質しか得られません。

関連情報