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


25

どのようにして変換することができますsome.flvsome.aviまたはsome.wmvこのビデオはJW Playerで再生可能とシークになることを確認するためにFFmpegのと?

回答:


9

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

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


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

私は常にmp4boxFFmpegエンコードされたファイルにこれを行います

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

これは、デフォルトで500ミリ秒のチャンクでMP4ファイルをインターリーブします。


1
新しいファイルを作成せずに「インプレース」ファイルインターリーブを行うには、直接使用しますMP4Box -isma -inter 500 Myvideo.mp4
Vineet

45

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アトムを先頭に移動する必要があります。このアトム(本質的に、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コーダ)すべての作業ファイル(ただし、品質!病気!):(申し訳ありませんが、今、あなたの答えを
アップ投票

これは、ビデオ変換の問題ではなく、NginXでのh.264プラグインの問題のようです。私はWebビデオストリーミング自体の専門家ではありませんが、Stack Overflowで既にこれについて質問されているのを見ることができますか?stackoverflow.com/questions/11079748/…–
slhck

また、nginxはこのビデオ形式を適切に読み取れないかもしれないと考えています。youtubeからのビデオもよく再生されます。はい、スタック上でnginxの問題について尋ねられますが、答えはありません。:(
アブラハブ

3
-movflags faststartまさに私が必要としたもののために+1
アンドリュー

:リンクは、web.archive.org使用する必要が死んでいるweb.archive.org/web/20140201142344/http://www.longtailvideo.com/...
malat

5

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

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

moovアトムだけを移動する必要があるため、何も再エンコードする必要はありません。


-1

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"

5
インターネットストリーミングビデオ用の22 kHz PCMステレオオーディオ あまりにも効率的に聞こえません。そして、なぜオーディオビットレートを128kに設定するのですか?
-slhck

@ slhck、22kから44kに変更できます。「
置き換えます。Searush12年

1
@SEARAS問題はサンプリングレートではありません。オーディオが非圧縮PCMステレオであるという事実です。インターネットストリーミング用。それはわかりません。
slhck

この回答の品質は非常に低いため、削除する必要があります。パラメーターは、コンテンツのフレームレート、ビデオ解像度、およびオーディオサンプリングレートを変更し、非効率または低品質の結果を生成する場合があります(ffmpegは、より安全またはより良いパラメーターを選択できます)。パフォーマンスは、スレッド数が少ないという制限によっても損なわれ、-acodec pcm_s16le(エラー:)でも機能しませんCould not write header for output file #0 (incorrect codec parameters ?): Invalid argument。IETFドラフトのような正当な理由は、これらのパラメーターを正確に選択する理由も欠落しているようです。
LiveWireBT
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.