Я создаю потоковое веб-приложение, которое использует FFMPEG. Клиент отправляет видео с веб-камеры, используя FFMPEG (в процессе конвертируя поток webm в mpeg-ts), через RTMP, а сервер мультимедиа принимает поток mpeg-ts, транскодирует его в HLS с несколькими уровнями качества для ABR (используя основной список воспроизведения) ,
Пока у меня все это работает, за исключением того, что моя команда транскодирования создает сегменты HLS, которые имеют чрезвычайно низкое качество; видео очень пиксельное, а наилучший уровень качества (1080p) выглядит как 240p с разрешением до 1080p. Чтобы проверить мою команду FFMPEG, я повторно смешал образец высококачественного фильма 1080p в mpeg-ts (я проверил качество, оно выглядит так же, как и оригинал), и я использую эту команду для перекодирования этого фильма в HLS для теста :
ffmpeg.exe -threads 4 -filter_complex_threads 4 -vsync 1 -i output.ts -filter_complex
"[v:0]split=5[s0][s1][s2][s3][s4];
[s0]scale=w=1920:h=1080:flags=lanczos,yadif[v0];
[s1]scale=w=1280:h=720:flags=lanczos,yadif[v1];
[s2]scale=w=854:h=480:flags=lanczos,yadif[v2];
[s3]scale=w=480:h=360:flags=lanczos,yadif[v3];
[s4]scale=w=426:h=240:flags=lanczos,yadif[v4]"
-map "[v0]" -pix_fmt yuv420p -r 23.976 -vcodec libx264 -b:v 3400k -preset medium -profile:v baseline -keyint_min 24 -g 48 -x264opts no-scenecut -strict experimental -map_metadata -1
-map "[v1]" -pix_fmt yuv420p -r 23.976 -vcodec libx264 -b:v 1725k -preset medium -profile:v baseline -keyint_min 24 -g 48 -x264opts no-scenecut -strict experimental -map_metadata -1
-map "[v2]" -pix_fmt yuv420p -r 23.976 -vcodec libx264 -b:v 960k -preset medium -profile:v baseline -keyint_min 24 -g 48 -x264opts no-scenecut -strict experimental -map_metadata -1
-map "[v3]" -pix_fmt yuv420p -r 23.976 -vcodec libx264 -b:v 510k -preset medium -profile:v baseline -keyint_min 24 -g 48 -x264opts no-scenecut -strict experimental -map_metadata -1
-map "[v4]" -pix_fmt yuv420p -r 23.976 -vcodec libx264 -b:v 320k -preset medium -profile:v baseline -keyint_min 24 -g 48 -x264opts no-scenecut -strict experimental -map_metadata -1
-map a:0 -map a:0 -map a:0 -map a:0 -map a:0 -c:a aac -b:a 96k -af “aresample=async=1:min_hard_comp=0.100000:first_pts=0”
-f hls -var_stream_map "v:0,a:0 v:1,a:1, v:2,a:2, v:3,a:3, v:4,a:4"
-hls_wrap 24 -hls_time 10 -master_pl_name master.m3u8 "C:/Users/John/Desktop/ffmpeg-20181218-978c935-win64-static/bin/vs%v/manifest.m3u8"
Я очень новичок в FFMPEG, я сослался на эту статью для опций видео и изменил ее, чтобы создать HLS вместо mp4. Само собой разумеется, я справился с этим довольно плохо, хотя сама команда работает и делает то, что мне нужно (кроме дерьмового качества). Может ли кто-нибудь помочь мне оптимизировать эту команду, чтобы она транскодировала видео с гораздо меньшими потерями?