Генерация потока hls с использованием кодека h265
Я пытаюсь конвертировать h264
видео в поток HLS, который использует h265
кодек. Как следует из этой статьи, мы должны использовать fragmented mp4
для hls/h265
стрим для работы на сафари.
Я могу конвертировать
h264
вh265
правильно используя эту командуffmpeg -i input.mp4 -c:v libx265 -tag:v hvc1 out.mp4
Я могу конвертировать входное видео (
h264
) в глс (fragmented mp4
) используя эту командуffmpeg -y -i input.mp4 \ -c copy -hls_segment_type fmp4 -hls_time 6 -hls_list_size 10 \ -hls_flags delete_segments+append_list+split_by_time \ -hls_playlist_type vod manifest.m3u8
Теперь, когда я использую приведенную выше команду, указав h265
, выходной поток hls не работает в Safari. Выкидывает эту ошибку
Plugin Handled Load
команда
ffmpeg -y -i input.mp4 \
-vf scale=640:360 -c:v libx265 -tag:v hvc1 -c:a copy \
-hls_segment_type fmp4 -hls_time 6 -hls_list_size 10 \
-hls_flags delete_segments+append_list+split_by_time \
-hls_playlist_type vod manifest.m3u8
В чем может быть проблема здесь?
2 ответа
Сегодня я протестировал это с ffmpeg 4.1.1 на macOS 10.14.3, и, похоже, он прекрасно работает. Сначала мне нужно перекодировать в MP4 (нельзя просто перейти непосредственно к манифесту HLS на этапе транскодирования, так как результирующий m3u8 не воспроизводится в Safari - это похоже на ошибку ffmpeg), но функция упаковки, кажется, работает отлично, и Я могу воспроизвести получившийся HEVC HLS m3u8 (даже в UHDp60 HDR10 - хотя и с довольно небольшой буферизацией на моем iPhone XS Max и нетонографическим отображением в macOS) в Safari как на macOS 10.14.3, так и на iOS 12.1. 0,2.
Как указано выше, мне сначала нужно перекодировать в MP4 (в следующем примере используется вход UHDp60 HEVC HDR10 и транскодирование в 1080p60 HEVC HDR10):
ffmpeg -y -i source.mp4 -c:v libx265 \
-tag:v hvc1 -pix_fmt yuv420p10le -s 1920x1080 \
-x265-params "colorprim=bt2020:transfer=smpte2084:colormatrix=bt2020nc:bitrate=4000:keyint=120:strict-cbr" \
-c:a copy ~/Sites/HLS/1080p/HDR10.mp4
Из полученного файла я могу сделать упаковку HLS:
ffmpeg -y -i ~/Sites/HLS/1080p/HDR10.mp4 -c copy \
-hls_segment_type fmp4 -hls_time 6 -hls_list_size 10 \
-hls_flags delete_segments+append_list+split_by_time \
-hls_playlist_type vod ~/Sites/HLS/1080p/HDR10.m3u8
В результате этих шагов создаются все необходимые файлы, чтобы иметь возможность войти на мой веб-сервер и автоматически воспроизвести список воспроизведения HLS в Safari. Safari теперь может даже воспроизводить потоковые файлы HEVC HDR10 MP4 с веб-сервера. Поэтому я бы предложил сначала попытаться сделать это - если ваш оригинальный MP4 не воспроизводится в Safari через веб-сервер, то маловероятно, что его упаковка HLS тоже подойдет.
У меня также возникли проблемы с созданием ffmpeg действующего списка воспроизведения HLS с файлами HEVC/h265 версии 4.3.2, которые будут воспроизводиться в Safari. Хотя VLC их воспроизводит нормально. Обновление до ffmpeg v4.4 также, похоже, полностью нарушает генерацию HLS для файлов h264.
В итоге я просто позволил ffmpeg перекодировать в hevc, а затем использовал bento4 для его фрагментации (используя bentomp4fragment
), а затем сгенерируйте для меня плейлист HLS (используя bentomp4dash
с--hls
опция включена)