GPU レベルで完全に高速化される ffmpeg を使用して、可変 HLS MBR ライブ ストリームを作成しようとしています。これは、高速化されたデコード、デインターレース、スケーリング、およびエンコードを意味します。これが私の壊れた例です...
ffmpeg -loglevel debug -hwaccel cuvid -c:v h264_cuvid -hwaccel_output_format cuda -vsync 0 -i "udp://@239.250.4.152:1234?fifo_size=1000000&overrun_nonfatal=1" \
-filter_complex "[0:v]yadif_cuda=0:-1:0,split=3[v1][v2][v3],[v1]copy[v1out],[v2]scale_npp=1280:720[v2out],[v3]scale_npp=720:405[v3out]" \
-map [v1out] -c:v:0 hevc_nvenc -b:v:0 4000k -g 48 \
-map [v2out] -c:v:1 hevc_nvenc -b:v:0 3000k -g 48 \
-map [v3out] -c:v:2 hevc_nvenc -b:v:0 2000k -g 48 \
-map a:0 -c:a:0 aac -b:a:0 128k -ac 2 \
-map a:0 -c:a:1 aac -b:a:1 96k -ac 2 \
-map a:0 -c:a:2 aac -b:a:2 64k -ac 2 \
-f hls \
-hls_playlist_type event \
-hls_segment_type mpegts \
-hls_time $seglen \
-hls_list_size $numsegs \
-hls_flags delete_segments+independent_segments \
-hls_segment_filename "$dst/stream_%v/$segments" \
-hls_base_url "$url" \
-master_pl_name "$dst/$index" \
-var_stream_map "v:0,a:0 v:1,a:1 v:2,a:2" \
"$dst/$index"
注: 私のグラフィック カードは、2 つ以上の同時エンコーディングを処理できます。「フィルター 'Parsed_split_1' とフィルター 'auto_scaler_0' でサポートされているフォーマット間で変換できません」という典型的なエラーが表示されます。
私の目標は本当ですか?または、このシナリオで GPU をできるだけ効率的に使用する適切な方法は何ですか? 助けてくれてありがとう。
Stream mapping:
Stream # 0: 3 (h264_cuvid) -> yadif_cuda (graph 0)
copy (graph 0) -> Stream # 0: 0 (h264_nvenc)
scale_npp (graph 0) -> Stream # 0: 1 (h264_nvenc)
scale_npp (graph 0) -> Stream # 0: 2 (h264_nvenc)
Stream # 0: 4 -> # 0: 3 (ac3 (native) -> aac (native))
Stream # 0: 4 -> # 0: 4 (ac3 (native) -> aac (native))
Stream # 0: 4 -> # 0: 5 (ac3 (native) -> aac (native))