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


15

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

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

回答:


25

最初に、FFmpegプロファイルと直接コマンドラインオプションの違いを理解する必要があります。ffmpegがインストールされている場所に-vpreある.ffpresetファイルを使用します/usr/share/ffmpeg/。これは一連のoption = value ペアであり、あなたの場合は自分で定義する必要があったでしょう(少なくともbaselineffmpegに同梱されているプリセットはわかりません)。

プリセットを自分で作成し、コマンドラインオプションの用途を理解していない限り、プリセットを使用しないことをお勧めします。私は何年も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もサポートしますが、一部のデバイスでもメインプロファイルを使用できます。参照この記事をいくつかのガイドラインについては(少し古くなっています)。

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


1
そのような詳細な回答をありがとう、私はそれを繰り返し読み続けます:)また、私は-acodec libmp3lame -ab 160kでエンコードし、iPadのAppleデバイスを使用しているユーザーはビデオを見ることができても音が聞こえないと言っているのでオーディオコーデックまたはビットレート。AndroidとWindowsのユーザーはそれが問題なく、ビデオストリームにオーディオがあるので、aacの代わりにlibmp3lameを使用すると、Appleユーザーがビデオにオーディオがない理由がわかりません。
C0nw0nk 2014

MP4コンテナでMP3オーディオが使用されることはほとんどありません。おそらくAACがより安全な選択です。
slhck 2014

まあ私はMP3のみを使用しています。なぜなら、aacでlibmp3lameに切り替えてbit_rate、width heightエラーを取得し続け、それらのすべてのエラーが停止し、Appleユーザーはオーディオがないと言いますが、他の誰もが同じファイルを見ることができ、音で問題ありません。他のすべてのデバイス上で、おそらく、私が知っている:(とApple MP3に応じて問題ないはずバグ見つけdeveloper.apple.com/library/mac/documentation/...
C0nw0nk

@ user2068371このリンクは、MP4コンテナ形式ではなく、MPEG-2トランスポートストリームを参照しています。
llogan 2015年

1
@ user2068371 MediaElementjsで問題が発生したことはありません。H.264およびMP3は、すべてのブラウザーでサポートされているわけではありません。特にHTML5ビデオの場合、常にH.264 / AACを使用し、フォールバックとしてVP8 / Vorbisを使用することもできます。AAC変換に問題がある場合は、それについて新しい質問をし、コマンドラインの完全な出力も含めるようにしてください。
slhck
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.