使用“var_stream_map”时出现 HLS 转换问题

使用“var_stream_map”时出现 HLS 转换问题

我正在使用以下命令将现有的 .mp4 视频转换为多种视频和音频格式

ffmpeg -y \
    -i sample.mp4 \
    -hls_list_size 0 \
    -hls_key_info_file keyfile \
    -b:v:0 1080k -b:v:1 720k -b:v:2 480k -b:v:3 240k -b:a:0 64k -b:a:1 32k \
    -map 0:v -map 0:v -map 0:v -map 0:v -map 0:a -map 0:a \
    -var_stream_map "v:0,a:0 v:1,a:0 v:2,a:0 v:3,a:1" \
    -master_pl_name master.m3u8 \
    "output/%v/manifest.m3u8"

要求是将现有的视频转换为四种质量,即 1080k、720k、480k 和 240k。音频转换为 64k 和 32k 两种格式。

预期输出为

  1. 视频质量为 1080k,音频质量为 64k
  2. 视频质量为 720k,音频质量为 64k
  3. 视频质量为 480k,音频质量为 64k
  4. 视频质量为 240k,音频质量为 32k

提到的命令是创建一个主播放列表,其内容如下

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-STREAM-INF:BANDWIDTH=1258400,RESOLUTION=1280x720,CODECS="avc1.64001f,mp4a.40.2"
0/manifest.m3u8

#EXT-X-STREAM-INF:BANDWIDTH=862400,RESOLUTION=1280x720,CODECS="avc1.64001f,mp4a.40.2"
1/manifest.m3u8

#EXT-X-STREAM-INF:BANDWIDTH=598400,RESOLUTION=1280x720,CODECS="avc1.64001f,mp4a.40.2"
2/manifest.m3u8

#EXT-X-STREAM-INF:BANDWIDTH=299200,RESOLUTION=1280x720,CODECS="avc1.64001f,mp4a.40.2"
3/manifest.m3u8

有人能告诉我哪里错了吗?

此外,任何解释“-map”和“-var_stream_map”选项的文档都将非常感激。

FFMPEG 文档

有例子,但是这些选项的解释不是很清楚

答案1

数字 1080、720、480、240 通常表示分辨率,它们的后缀是p,而不是k。您已将这些数字分配给比特率选项,这不会重新缩放流。

添加-filter:v:0 scale=-2:1080 -filter:v:1 scale=-2:720 -filter:v:2 scale=-2:480 -filter:v:3 scale=-2:240

您还需要替换比特率值,例如

-b:v:0 4000k -b:v:1 2000k -b:v:2 1000k -b:v:3 300k

但实际值将取决于您的业务需求。


您的输入音频是 6 声道。Web 播放器通常需要 2 声道。因此添加-ac 2

相关内容