最初に、FFmpegプロファイルと直接コマンドラインオプションの違いを理解する必要があります。ffmpegがインストールされている場所に-vpre
ある.ffpreset
ファイルを使用します/usr/share/ffmpeg/
。これは一連のoption = value ペアであり、あなたの場合は自分で定義する必要があったでしょう(少なくともbaseline
ffmpegに同梱されているプリセットはわかりません)。
プリセットを自分で作成し、コマンドラインオプションの用途を理解していない限り、プリセットを使用しないことをお勧めします。私は何年もffmpegを使用してきましたが、プリセットを使用したことがありません。
ほとんどのデバイスと互換性のあるH.264ビデオを生成するための一般的なコマンドラインは次のとおりです。
ffmpeg -i <input> \
-c:v libx264 -crf 23 -profile:v baseline -level 3.0 -pix_fmt yuv420p \
-c:a aac -ac 2 -b:a 128k \
-movflags faststart \
output.mp4
いくつかのメモ:
H.264 / AACは、HTML5での幅広いサポートに最適な組み合わせです。ただし、H.264デコーダーを備えていないブラウザーには、VP8 / Vorbisビデオも必要です。コマンドラインの例については、この回答を参照してください。その他のコーデックについては、Wikipediaのブラウザーサポートページも参照してください。
H.264は、モバイルデバイス全体でも適切に機能します。
-profile:v baseline
そして-level 3.0
オプションは、のみ264のCPU集約型の機能を扱うことができない古いモバイルデバイスのために必要とされます。通常、これらを省略したり、代わりにを使用したりできます-profile:v main
。
CRFは品質を設定します(18〜28は妥当な範囲です。値が低いほど品質が高くなります)。もちろん、などの固定ビットレートを使用することもでき-b:v 1000k
ます。ビデオの解像度に一致するビットレートを選択してください。一部の低電力デバイスは、不必要に高いビットレートを処理できない場合があります。
-movflags faststart
コンテナメタデータをファイルの最後に残すのではなく、ファイルの先頭に移動するため、このオプションはストリーミングに不可欠です。これにより、ファイルが完全に読み込まれるのを待たずに、すぐに再生を開始できます。
ただし、それはすべて、対象とするすべてのデバイスの最小公分母を見つけることに帰着します。これは常に存在するとは限りません。確かに、H.264 以外の(つまり、より悪い)コーデックは使いたくないでしょう。実際、ベースラインエンコードされたビデオをメインプロファイルまたはハイプロファイルをデコードできるクライアントに提供することも賢明ではありません。デコードの複雑さの軽減と品質のトレードオフを考えます。
私の経験から、AndroidデバイスはMP4コンテナーでAAC-LCオーディオを使用してBaseline H.264を問題なく再生できます。私はそれで問題を経験したことがありません。実際、公式にはサポートされていませんが、一部のデバイスはより高いプロファイルを再生する場合があります。iOSは一般的にベースラインH.264もサポートしますが、一部のデバイスでもメインプロファイルを使用できます。参照この記事をいくつかのガイドラインについては(少し古くなっています)。
再生に問題のあるユーザーがいる場合は、問題の原因となっているビデオを見つけ、使用しているハードウェアとプレーヤーソフトウェアの詳細を取得する必要があります。次に、その特定のケースのトラブルシューティングについて説明します。