Как разделить и масштабировать потоки в ffmpeg с помощью cuda?
Итак, я хочу создавать потоки с несколькими разрешениями для потоковой передачи hls. Вот что я пробовал до сих пор:
ffmpeg -vsync 0 -hwaccel cuvid -i input.mkv -c:a aac -c:v h264_nvenc \
-c:s webvtt -crf 20 -filter_complex \
'[v:0]hwupload_cuda,split=2[vtemp001][vout002]:[vtemp001]hwupload_cuda,scale_npp=w=960:h=540:format=yuv420p:interp_algo=lanczos,hwdownload,format=yuv420p[vout001]' \
-map "[vout001]" -b:v:0 2000k -map "[vout002]" \
-b:v:1 6000k -map 0:v -map 0:a -map 0:s -map 0:v \
-map 0:a -map 0:s -var_stream_map 'v:0,a:0,s:0 v:1,a:1,s:1' \
-force_key_frames:v "expr:gte(t,n_forced*2.000)" -hls_time 6 -hls_playlist_type event -hls_flags \
delete_segments+independent_segments+discont_start+program_date_time \
-master_pl_name master.m3u8 -hls_segment_filename \
fire/segment_%v/file%06d.ts fire/stream_%v.m3u8
Запустив это, я получаю следующую ошибку:
Impossible to convert between the formats supported by the filter
'graph 0 input from stream 0:0' and the filter 'auto_scaler_0'
Error reinitializing filters!
Failed to inject frame into filter network: Function not implemented
Error while processing the decoded data for stream #0:0
Когда я делаю то же самое без графического процессора, я получаю сообщение об ошибке нехватки памяти, что для меня звучит так, будто я не могу сделать это без графического процессора (т. е. мне нужно запустить отдельные команды ffmpeg, чтобы заставить это работать на процессоре). Хотелось бы узнать, есть ли у кого-нибудь идеи или предложения.
Я попробовал что-то более простое для понимания здесь:
ffmpeg -vsync 0 -hwaccel cuvid -i input.mkv -c:v h264_nvenc -filter_complex \
'[v:0]hwupload_cuda,split=2[vtemp001][vout002];[vtemp001]hwupload_cuda,scale_npp=w=960:h=540:format=yuv420p:interp_algo=lanczos,hwdownload,format=yuv420p[vout001]' \
-map "[vout001]" -b:v:0 2000k output1.mkv -map "[vout002]" -b:v:1 6000k output2.mkv
Вышеупомянутое дает ту же ошибку, которая, как мне кажется, предполагает, что проблема связана с комплексом фильтров.