ffmpeg 下实现 h265 hevc编码的 hls 服务的过程一些收藏和介绍
现状:
很多关于 h264生成 hls 的m3u8文章,但如果生成的是 h265的介绍还很少,对于此一般来说是一句简单的说明就是使用:
hevc_mp4代替h264_mp4toannexb即可,便于更多的介绍.
关于这个有一篇比较详细的中文介绍在这里:
https://blog.csdn.net/weixin_41422027/article/details/106649361
但没有给出具体的命令行参数.
官方对于此参数的一些介绍:
https://www.ffmpeg.org/ffmpeg-bitstream-filters.html#hevc_005fmp4toannexb
https://ffmpeg.org/ffmpeg-formats.html
https://developer.apple.com/documentation/http_live_streaming/http_live_streaming_hls_authoring_specification_for_apple_devices
也没有提及 hevc 的情况.
苹果也给出了解决方案,使用他们的mediafilesegmenter这一个命令,但这个命令的兼容性比较差,就是 iPhone 拍摄的视频都无法支持.
https://qiita.com/makotok7/items/bbcd24ab7b00adf8cc92 这里有一篇日文的文章介绍了使用说明
jeffcheng@Mac-Studio hls % mediafilesegmenter IMG_3337.MOV
Apr 9 2022 02:22:09.357: Processing file /Users/jeffcheng/Downloads/hls/IMG_3337.MOV
Apr 9 2022 02:22:09.374: Fragmented MP4 is the only supported container format for the segmentation of HEVC content
Apr 9 2022 02:22:09.374: Unsupported media type 'hvc1' in track 0
Apr 9 2022 02:22:09.374: Unable to find any valid tracks to segment.
Segmenting failed (-12780).
Bento4 这个网站提供了些工具,还没有试,软件还没有完全安装成功,因为我主要希望能通过 ffmpeg 来实现
https://codecalamity.com/encoding-uhd-4k-hdr10-videos-with-ffmpeg/
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
再通过:
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
生成 list
我在测试中,第一步
:strict-cbr 加上以后就无法运行,且在官网客个版本 ffmpeg 的编译下 都不行.而且我把一段 原文件是 h265,hdr,10bits 的mkv 文件通过第一步转成 mp4,在第二步生成的文件是无法在 Safari 里播放的,
但是把这个 mkv 文件直接通过第二步是成功的,仔细比较过,也没有发现有什么区别,就卡在这里了.
2022.4.10继续找
1.5. The container format for HEVC video MUST be fMP4.
评论