web-dev-qa-db-ja.com

どのffmpegコマンドラインが、すべてのデバイスで互換性のあるビデオを生成しますか?

したがって、H264ビデオMP4はAppleのIPadでオーディオを再生しないと言っているユーザーがいて、MP4ビデオをAndroidでも正しく再生できるようにするのに苦労しています。

2つの異なるコマンドラインがあり、どのコマンドラインを使用する必要があります。

-profile:v baseline -level 3.0

そして:

-vpre baseline

すべてのデバイスで機能するようにするには、どれを使用すればよいですか?

私はまた、現在のオーディオビットレートが

-ab 192k

多分私はそれを下げるべきです

-ab 160k

MP3オーディオをMP4ファイルにエンコードするために使用されるコマンドライン。

"C:/server/ffmpeg/bin/ffmpeg.exe" -y -i Z:/server/websites/ps/public_www/media/com_hwdmediashare/files/55/ac/fb/54bbf30bb11a0f6b9dc832114c26fd29.mp4 -strict experimental -acodec libmp3lame -ar 44100 -ac 2 -ab 192k -s 480x360 -aspect 16:9 -r 24000/1001 -vcodec libx264 -b:v 1000k -minrate 800k -maxrate 1000k -bufsize 800K -crf 18 -preset veryslow -f mp4 -threads 0 -movflags +faststart Z:/server/websites/ps/public_www/media/com_hwdmediashare/files/55/ac/fb/98382d43d31d4ff91ea44cb2aa1bbc49.mp4 2>&1
15
C0nw0nk

まず、FFmpegプロファイルと直接コマンドラインオプションの違いを理解する必要があります。 -vpreは、.ffpresetまたはffmpegがインストールされている場所にある/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オプションは、H.264のCPU集中型機能を処理できない古いモバイルデバイスでのみ必要です。通常、これらを省略したり、代わりに-profile:v mainを使用したりできます。

  • CRFは品質を設定します(18〜28は妥当な範囲です。値が低いほど品質が高くなります)。もちろん、-b:v 1000kなどで固定ビットレートを使用することもできます。ビデオの解像度に一致するビットレートを選択してください。一部の低電力デバイスは、不必要に高いビットレートを処理できない場合があります。

  • -movflags faststartオプションは、コンテナメタデータをファイルの最後に残すのではなく、ファイルの先頭に移動するため、ストリーミングに不可欠です。これにより、ファイルが完全に読み込まれるのを待たずに、すぐに再生を開始できます。

ただし、すべてが対象となるすべてのデバイスに共通する最低限の要素を見つけることにつながります。これは常に存在するとは限りません。確かに、H.264以外の(つまりworse)コーデックは使用したくないでしょう。実際、ベースラインエンコードされたビデオをメインプロファイルまたはハイプロファイルをデコードできるクライアントに提供することも賢明ではありません。デコードの複雑さの軽減と品質のトレードオフを考えます。

私の経験から、Androidデバイスは、MP4コンテナでAAC-LCオーディオを使用してBaseline H.264を問題なく再生できます。問題は一度もありません。プロファイルも正式にはサポートされていませんが、iOSは一般的にベースラインH.264もサポートしていますが、一部のデバイスでもメインプロファイルを使用できます。ガイドラインについては この投稿 (少し古い)を参照してください。

再生に問題のあるユーザーがいる場合は、問題の原因となっているビデオを見つけ、使用しているハードウェアとプレーヤーソフトウェアの詳細を取得する必要があります。次に、その特定のケースのトラブルシューティングについて説明します。

23
slhck