我正在使用以下命令将现有的 .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 两种格式。
预期输出为
- 视频质量为 1080k,音频质量为 64k
- 视频质量为 720k,音频质量为 64k
- 视频质量为 480k,音频质量为 64k
- 视频质量为 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”选项的文档都将非常感激。
有例子,但是这些选项的解释不是很清楚
答案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
。