2

HTTP ライブ ストリーミング サービス用にマルチキャスト ビデオ ストリームを小さな ts ファイルに分割したところ、非常にうまく機能しました。次に、ソースのビットレートが高すぎる (1.5mbps) ことがわかったので、FFmpeg を使用して ts ファイルをより小さいビットレート (500kbps) にトランスコードするバックグラウンド ジョブを設定しました。問題は、500k の .m3u8 再生が (新しいファイルをロードするたびに) スタッターし、1.5mbps ほどスムーズではないことです。

私のトランスコーディングコマンドラインは次のようなものです:

ffmpeg -i /home/rca/tst.ts -f mpegts -acodec libmp3lame -ar 48000 -ab 64k -vcodec libx264 -b 500k /home/rca/tst.ts

これについてのアイデアはありますか?ありがとうございました!

4

1 に答える 1

1

解像度を下げるか、フレームをドロップします。これは、低帯域幅接続のトレード スペースです。

幸いなことに、同僚 ( @enobrev ) が、帯域幅を削減するさまざまな方法をレビューしてくれました。

生のエンコードされていない形式から始めるのが最善です。そうしないと、ffmpeg でビット レートを設定してもあまり効果がありません (ただし、解像度とフレーム レートを下げることはできます)。

ffmpeg -i audio.wav -i "concat:0.avi|1.avi|2.avi" -vcodec libx264 -preset fast -crf 23 -threads 0 -b:v 64000 -r 10 -vf "scale=240:-1" -ab 24k -ar 22050 -map 0 -vbsf h264_mp4toannexb -f segment -segment_time 10 -segment_format mpegts -segment_list autoStream.m3u8 -segment_list_type m3u8 out_lowres_64kbps%d.ts

ffmpeg -i audio.wav -i "concat:0.avi|1.avi|2.avi" -vcodec libx264 -preset fast -crf 23 -threads 0 -b:v 300000 -r 24 -vf "scale=480:-1" -ab 96k -ar 22050 -map 0 -vbsf h264_mp4toannexb -f segment -segment_time 10 -segment_format mpegts -segment_list autoStream.m3u8 -segment_list_type m3u8 out_midres_300kbps%d.ts

ffmpeg -i audio.wav -i "concat:0.avi|1.avi|2.avi" -vcodec libx264 -preset fast -crf 23 -threads 0 -b:v 1200000 -r 24 -vf "scale=640:-1" -ab 192k -ar 44100 -map 0 -vbsf h264_mp4toannexb -f segment -segment_time 10 -segment_format mpegts -segment_list autoStream.m3u8 -segment_list_type m3u8 out_hires_1.2mbps%d.ts

調整できるパラメーターは他にもたくさんありますが、上記では、ビット レート -b:v、フレーム レート -r、ビデオ解像度 -vf、オーディオ ビット レート -ab (と思います)、およびオーディオ サンプル レート - を設定しています。 ar

于 2012-06-08T15:03:33.870 に答える