транскодирование ffmpeg и HLS

1271
vayvanne

Транскодирование входного потока в меньшие пары:

ffmpeg -re -v info -i "rtmp://localhost/live/stream live=1" \ -c:v libx264 -b:v 500k -vf scale=540:-1 -preset faster -copyts \ -c:a aac -b:a 64k -ac 2 -flags +global_header \ -f flv "rtmp://localhost/live/500k live=1" \ -c:v libx264 -b:v 800k -vf scale=720:-1 -preset faster -copyts \ -c:a aac -b:a 64k -ac 2 -flags +global_header \ -f flv "rtmp://localhost/live/800k live=1" 

Затем мне нужно передать их в приложение AMS livepkgr HLS:

ffmpeg -re -v info \ -i "rtmp://localhost/live/500k live=1" \ -c copy -copyts -flags +global_header \ -f flv "rtmp://localhost/livepkgr/500k?adbe-live-event=liveevent" \ -i "rtmp://localhost/live/800k live=1" \ -c copy -copyts -flags +global_header \ -f flv "rtmp://localhost/livepkgr/800k?adbe-live-event=liveevent" 

Результирующие потоки не выровнены по ключевым кадрам. Есть ли шанс сделать так с ffmpeg, как это делает FMLE-кодировщик? Спасибо за внимание.

0
Добавьте `-g` *` value` * к каждому кодированию. Gyan 8 лет назад 0
Спасибо. -г кажется устаревшим. Я нашел -x264opts keyint = 8: min-keyint = 8: no-scenecut, но проблема не в том, чтобы поместить ключевой кадр, а выровнять его в обоих потоках. Приведенное выше транскодирование ffmpeg не запускает оба потока одновременно, имеется небольшой сдвиг. В случае FMLE приложение livepkgr создает до 3 выровненных потоков, а ffmpeg - нет. Должна быть хитрость, чтобы приложение livepkgr создавало правильно выровненные файлы потоков, как это происходит в случае, когда кодировщик FMLE. vayvanne 8 лет назад 0

1 ответ на вопрос

0
Gyan

Try

ffmpeg -re -v info -i "rtmp://localhost/live/stream live=1" \ -filter_complex "[0:v]split[a][b];[a]scale=540:-1[oa];[b]scale=720:-1[ob]" \ -map [oa] -c:v libx264 -b:v 500k -preset faster -copyts \ -map 0:a -c:a aac -b:a 64k -ac 2 -flags +global_header \ -f flv "rtmp://localhost/live/500k live=1" \ -map [ob] -c:v libx264 -b:v 800k -preset faster -copyts \ -map 0:a -c:a aac -b:a 64k -ac 2 -flags +global_header \ -f flv "rtmp://localhost/live/800k live=1" 
Вот это да. Спасибо за отличную идею с фильтром @Mulvya. Кажется, что сдвиг вводится вышеописанным релейным скриптом, который на самом деле запускает выходные потоки не одновременно. Я реализовал ту же идею разделения / сопоставления для livepkgr, и она отлично работает. Тестовый игрок здесь [ссылка] (goo.gl/g97FuM), чтобы проверить. Но это удваивает использование процессора при транскодировании. Есть ли шанс избежать задания двойного транскодирования и одновременно запустить выходные потоки для сценария ретрансляции, описанного выше? Для случая, если выход из трех потоков? vayvanne 8 лет назад 0

Похожие вопросы