ffmpeg HEVC mp4 转 HLS 流

ffmpeg HEVC mp4 转 HLS 流

我正在使用 ffmpeg -f hls 选项从 1 个 mp4 源创建多种分辨率

它可以在带有常规 h.264 源 mp4 的 video.js 的所有浏览器上正常运行。

然而抛出 HEVC HDR 源(例如https://4kmedia.org/sony-food-fizzle-uhd-hdr-4k-demo/)将导致无法在 Safari 中播放

ffmpeg -i ../sample4k-hdr.mp4 \
-filter_complex \
"[0:v]split=7[v1][v2][v3][v4][v5][v6][v7]; \
[v1]scale=426:240[v1out]; \
[v2]scale=640:360[v2out]; \
[v3]scale=854:480[v3out]; \
[v4]scale=1280:720[v4out]; \
[v5]scale=1920:1080[v5out]; \
[v6]scale=2560:1440[v6out]; \
[v7]scale=3840:2160[v7out]" \
-map "[v1out]" -c:v:0 libx264 -x264-params "nal-hrd=cbr:force-cfr=1" -b:v:0 500k -maxrate:v:0 500k -minrate:v:0 500k -bufsize:v:0 1000k -preset slow -g 48 -sc_threshold 0 -keyint_min 48 \
-map "[v2out]" -c:v:1 libx264 -x264-params "nal-hrd=cbr:force-cfr=1" -b:v:1 1000k -maxrate:v:1 1000k -minrate:v:1 1000k -bufsize:v:1 2000k -preset slow -g 48 -sc_threshold 0 -keyint_min 48 \
-map "[v3out]" -c:v:2 libx264 -x264-params "nal-hrd=cbr:force-cfr=1" -b:v:2 1500k -maxrate:v:2 1500k -minrate:v:2 1500k -bufsize:v:2 3000k -preset slow -g 48 -sc_threshold 0 -keyint_min 48 \
-map "[v4out]" -c:v:3 libx264 -x264-params "nal-hrd=cbr:force-cfr=1" -b:v:3 3000k -maxrate:v:3 3000k -minrate:v:3 3000k -bufsize:v:3 6000k -preset slow -g 48 -sc_threshold 0 -keyint_min 48 \
-map "[v5out]" -c:v:4 libx264 -x264-params "nal-hrd=cbr:force-cfr=1" -b:v:4 5000k -maxrate:v:4 5000k -minrate:v:4 5000k -bufsize:v:4 10000k -preset slow -g 48 -sc_threshold 0 -keyint_min 48 \
-map "[v6out]" -c:v:5 libx264 -x264-params "nal-hrd=cbr:force-cfr=1" -b:v:5 9000k -maxrate:v:5 9000k -minrate:v:5 9000k -bufsize:v:5 18000k -preset slow -g 48 -sc_threshold 0 -keyint_min 48 \
-map "[v7out]" -c:v:6 libx264 -x264-params "nal-hrd=cbr:force-cfr=1" -b:v:6 30000k -maxrate:v:6 30000k -minrate:v:6 30000k -bufsize:v:6 60000k -preset slow -g 48 -sc_threshold 0 -keyint_min 48 \
-map a:0 -c:a:0 aac -b:a:0 48k \
-map a:0 -c:a:1 aac -b:a:1 64k \
-map a:0 -c:a:2 aac -b:a:2 96k \
-map a:0 -c:a:3 aac -b:a:3 128k \
-map a:0 -c:a:4 aac -b:a:4 192k \
-map a:0 -c:a:5 aac -b:a:5 384k \
-map a:0 -c:a:6 aac -b:a:6 384k \
-flags +cgop \
-movflags +faststart \
-pix_fmt yuv420p \
-color_trc bt709 \
-color_primaries bt709 \
-colorspace bt709 \
-tag:v hvc1 \
-ac 2 \
-f hls \
-hls_time 2 \
-hls_playlist_type vod \
-hls_flags independent_segments \
-hls_segment_type mpegts \
-hls_segment_filename stream_%v/data%02d.ts \
-master_pl_name master.m3u8 \
-var_stream_map "v:0,a:0 v:1,a:1 v:2,a:2 v:3,a:3 v:4,a:4 v:5,a:5 v:6,a:6" stream_%v.m3u8

我尝试使用 libx265 main 和不同的 h264 配置文件:baseline、main、high、high10 等,但没有成功。有些不会产生视频,只产生音频。

还尝试在 macos 上使用 videotoolbox 以及在 ubuntu 上使用 nvenc,但没有成功。

那么,在 HLS 转码期间是否可以使用 libx264 或 h264_nvenc 或 h264_videotoolbox 来保持质量?

  1. HEVC 转 HLS
  2. HEVC HDR 转 HLS

如果是,应该使用什么参数和配置文件?如果不是,可以使用 h265 完成吗?使用哪些参数和配置文件?

干杯

相关内容