回答:
これは、@ abrahabによる最後のコメントに対する回答です。
mp4box
ファイルをnginx経由で擬似ストリーミングできるようにする必要はありません。MP4ストリーミングモジュールはmp4box
、moovアトムの配置に関係なく処理します(moovアトムをファイルの先頭に移動します)。
500サーバーエラーについては、mp4boxで「-frag」オプションを使用していますか?MP4ストリーミングモジュールは、断片化されたMP4ファイルを読み取ることができません。mp4box
疑似ストリーミングの良い使用法は、より良いシークのためにビデオをインターリーブすることです。Moovアトムシフトは追加の利点です。
私は常にmp4box
FFmpegエンコードされたファイルにこれを行います
MP4Box -add MyVideo.mp4 -isma Myvideo-box.mp4
これは、デフォルトで500ミリ秒のチャンクでMP4ファイルをインターリーブします。
通常、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アトムを先頭に移動する必要があります。このアトム(本質的に、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ビデオに十分な場合があります。もちろん、必要なビットレートは、コンテンツの複雑さに依存します。これには試行錯誤が必要です。
ffmpeg -i 1.flv -vcodec libx264 -f mp4 -an -g 1 -f mp4 -g 30 -level 3 new.mp4
後、mp4box
及びMP4が求めるとnginxのレポートすることはできません500 internal server error
開始パラメータのより多くのこと0
。際にせずに符号化された映像-vcoded libx264
(デフォルトのMP4コーダ)すべての作業ファイル(ただし、品質!病気!):(申し訳ありませんが、今、あなたの答えを
-movflags faststart
まさに私が必要としたもののために+1
これを行うことで、すべてを再エンコードせずに、ストリーミングできないAVIまたはMP4を単純に変換できます。
ffmpeg -i INPUT.mp4 -c copy -movflags faststart STREAMABLE_OUTPUT.mp4
moovアトムだけを移動する必要があるため、何も再エンコードする必要はありません。
ffmpegでこれを試すことができます:
ffmpeg.exe -i "INPUT_FILE.AVI" -threads 2 -s 800x600 -r 25.00 -threads 1 -pix_fmt yuv420p -g 300 -qmin 3 -b 2048k -async 1 -acodec pcm_s16le -ar 22050 -ac 1 -ab 128k -y "OUTPUT_FILE.mp4"
-acodec pcm_s16le
(エラー:)でも機能しませんCould not write header for output file #0 (incorrect codec parameters ?): Invalid argument
。IETFドラフトのような正当な理由は、これらのパラメーターを正確に選択する理由も欠落しているようです。
MP4Box -isma -inter 500 Myvideo.mp4