web-dev-qa-db-ja.com

HTTPストリーミングに対応したMP4ビデオを作成する

どのように変換できますかsome.flvまたはsome.aviまたはsome.wmvこの動画がJW Playerで再生およびシークできるようにするために、FFmpegを使用しますか?

27
abrahab

これは@abrahabによる最後のコメントへの回答です。

Nginxを介してファイルを疑似ストリーミングできるようにするために、ファイルをmp4boxする必要はありません。 MP4ストリーミングモジュールは、moovアトムの配置に関係なく処理します(mp4boxはmoov atomをファイルの先頭に移動します)。


500サーバーエラーの場合、mp4boxで「-frag」オプションを使用していますか? MP4ストリーミングモジュールは、断片化されたMP4ファイルを読み取ることができません。疑似ストリーミングでのmp4boxの良い使い方は、ビデオをインターリーブしてシークを向上させることです。 Moov atomシフトは追加の利点です。

私はいつもFFmpegでエンコードされたファイルをmp4boxに対して実行します

MP4Box -add MyVideo.mp4 -isma Myvideo-box.mp4

これにより、デフォルトで500ミリ秒のチャンクでMP4ファイルがインターリーブされます。

9
Vineet

MP4のH.264

通常、MP4コンテナ内でx264ビデオを作成します。このオプションは、基本的にすべてのデバイスとブラウザでサポートされています。

以下で十分です。入力名とCRFオプションを必ず置き換えてください。後者は品質を設定します。正味の値の範囲は19〜25です。値が低いほど品質は高くなりますが、ビットレートも高くなります。

ffmpeg -i input.avi -c:v libx264 -crf 23 -c:a aac -movflags faststart output.mp4

GUIの方法が好きな場合は、エンコーディングに Handbrake を使用することもできます。

faststartオプションの使用

次に、MP4コンテナのMOOVアトムを先頭に移動する必要があります。このatom(本質的には、MP4コンテナー内のデータの単位)には、ビデオ/オーディオストリーム自体に関する重要なメタデータが含まれます。-movflags faststartはまさにそれを行うべきです。

FFmpegバージョンにこのオプションがない場合は、アップグレードを検討してください。アップグレードできない場合は、以下のツールのいずれかを使用して同じことを達成できます。

  • QTIndexSwapper 、Adobe AIRアプリケーション

  • MP4Box 、フリーでオープンソース、次のようなコマンドを実行します。ここで、間隔(ここでは500)を変更できます。

    mp4box -inter 500 input.mp4

  • Pythonのqt-faststart 、Pythonがインストールされているすべての場所で機能します。

    qtfaststart input.mp4

それだけです。

ビットレート/品質の制御

もちろん、ストリーミングの場合、実際にはビットレートを特定の範囲内に制限する必要があります。詳しくは レート制御方法に関する私のブログ投稿 を参照してください。

たとえば、-maxrate 2M -bufsize 2Mエンコードオプションに対して、エンコードを2 Mbit/sに制限します。これは720pビデオに十分な場合があります。もちろん、必要なビットレートはコンテンツの複雑さに依存します。これには試行錯誤が必要です。

46
slhck

これを行うことで、ストリーミングできないAVIまたはMP4を、すべてを再エンコードせずに単純に変換できます。

ffmpeg -i INPUT.mp4 -c copy -movflags faststart STREAMABLE_OUTPUT.mp4

Moov atomを移動するだけなので、何も再エンコードする必要はありません。

6
user769852