Как конвертировать видео mkv в hls с помощью скомпилированного ffmpeg

#ffmpeg

Вопрос:

С помощью следующих команд преобразование видео mkv в видеопотоки на основе главного списка воспроизведения HLS работает неправильно.

 ffmpeg -i input.mkv   -y -vsync 0 -c:v h264_cuvid -c:v h264_nvenc -c:a copy   -map 0:v:0 -map 0:a:0 -vf fade,hwupload_cuda,scale_npp=854:358 -b:v:0 1M -b:a:0 128k   -map 0:v:0 -map 0:a:0 -vf fade,hwupload_cuda,scale_npp=1280:536 -b:v:1 3M -b:a:1 192k   -var_stream_map "v:0,a:0,name:480p v:1,a:1,name:720p"   -hls_time 10 -hls_list_size 0 -hls_time 3 -hls_flags independent_segments -f hls -hls_playlist_type event -master_pl_name "master-pl.m3u8" output-%v.m3u8  

И он генерирует вывод следующим образом, что неверно.

 #EXTM3U #EXT-X-VERSION:6 #EXT-X-STREAM-INF:BANDWIDTH=1240800,RESOLUTION=1280x536,CODECS="avc1.4d401f,ac-3" output-480p.m3u8  #EXT-X-STREAM-INF:BANDWIDTH=3511200,RESOLUTION=1280x536,CODECS="avc1.4d401f,ac-3" output-720p.m3u8  

Вопрос

Как создать мастер-плейлист с помощью ffmpeg (который был скомпилирован для работы с графическим процессором nvidia)

Конфигурации компиляции GPU

 --enable-nonfree --disable-shared --enable-gpl --enable-libx264 --enable-cuda --enable-nvenc --enable-cuvid --enable-cuda-nvcc --enable-openssl --enable-libnpp --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64   

Я скопировал видео с несколькими разрешениями, созданное на основе следующих команд, которое работает хорошо, но оно работает с процессором, который я хотел бы преобразовать в графический процессор.

 ffmpeg -i input.mkv  -map 0:v:0 -map 0:a:0 -map 0:v:0 -map 0:a:0 -map 0:v:0 -map 0:a:0  -c:v libx264 -crf 22 -c:a aac -ar 48000  -filter:v:0 scale=w=480:h=360 -maxrate:v:0 600k -b:a:0 64k  -filter:v:1 scale=w=640:h=480 -maxrate:v:1 900k -b:a:1 128k  -filter:v:2 scale=w=1280:h=720 -maxrate:v:2 900k -b:a:2 128k  -var_stream_map "v:0,a:0,name:360p v:1,a:1,name:480p v:2,a:2,name:720p"  -preset slow -hls_list_size 0 -threads 0 -f hls -hls_playlist_type event -hls_time 3  -hls_flags independent_segments -master_pl_name "name-pl.m3u8"  "name-%v.m3u8"  

Комментарии:

1. Лучше сгенерировать основной плейлист жестко закодированным способом. С помощью пары строк кода это можно обработать

2. Я дам ответ ниже, совсем позже

3. «работает неправильно» Как это должно работать и что он делает вместо этого?

4. По какой-то причине он генерирует неправильные разрешения