web-dev-qa-db-ja.com

ライブrtspストリームから複数のビットレートHLSコンテンツを生成する方法

ライブrtspストリームからシングルビットレートのライブhlsコンテンツを生成しています。次のコマンドを使用しています

ffmpeg -v verbose -i rtsp://127.0.0.1:8080/test.sdp \
 -vcodec libx264 -acodec aac -ac 1 -strict -2 -crf 18 -profile:v baseline \
 -maxrate 400k -bufsize 1835k -pix_fmt yuv420p -flags -global_header \
 -hls_time 10 -hls_list_size 3 -hls_wrap 4 -hls_flags delete_segments \
 -start_number 1 /usr/local/Apache-Tomcat-7.0.53/webapps/ROOT/hls/index1.m3u8

上記のffmpgコマンドを変更して、複数のビットレート出力コンテンツを生成するにはどうすればよいですか?私を助けてください。

5
prashantas
ffmpeg -v verbose -i rtsp://127.0.0.1:8080/test.sdp \
-vcodec libx264 -acodec aac -ac 1 -strict -2 -crf 18 \
-profile:v baseline -maxrate 400k -bufsize 1835k \
-pix_fmt yuv420p -flags -global_header \
-hls_time 10 -hls_list_size 3 -hls_wrap 4 -hls_flags delete_segments \
-start_number 1 /usr/local/Apache-Tomcat-7.0.53/webapps/ROOT/hls/index1.m3u8 \
-vcodec libx264 -acodec aac -ac 1 -strict -2 -crf 18 \
-profile:v baseline -maxrate 700k -bufsize 1835k \
-pix_fmt yuv420p -flags -global_header \
-hls_time 10 -hls_list_size 3 -hls_wrap 4 -hls_flags delete_segments \
-start_number 1 /usr/local/Apache-Tomcat-7.0.53/webapps/ROOT/hls/index2.m3u8

上記のストリームを指すindex.m3u8を作成します。

#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=400000
hls/index1.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=700000
hls/index2.m3u8
7
vayvanne

Ffmpegを使用して単一の入力から複数の出力を生成するために必要な概念は、 https://trac.ffmpeg.org/wiki/Creating%20multiple%20outputs で非常に明確に示されています(少なくとも私にとってはそうでした)。 =

基本的に、ffmpeg -i someinput [output_options] someoutput1 [output2_options] someoutput2はパターンです。 rtspを入力として使用する方法をすでに知っており、特定のビットレートで単一の出力を生成する方法を知っているようです。出力ブロック全体(rtsp入力文字列の後のすべて)を繰り返し、毎回-sとビットレートで解像度を変更します(-crfを使用しているので、解像度を上げるにはそれを減らします) /高品質、低解像度、低品質の場合はそれを増やします)。

個人的には、HLSレンディションにcrfを使用し、libx265では、特定のフレームサイズの「理想的な」ビットレートを取得するために使用するルールはframe_width * frame_height * frame_rate * 0.1です。ターゲットにするビットレートを選択する場合は、方程式を反転させて、そこからフレームサイズを計算する必要があります。 「.1」の値は高くなる可能性がありますが、一般的にはあまりメリットが見られず(より複雑なコンテンツの方が高い値を使用する方がよい)、0.07を下回ることはめったにありません。

3
rainabba