如何为FFmpeg HLS脚本添加更多视频分辨率及指定输出路径
FFmpeg多分辨率HLS编码脚本修改方案
一、扩展到5种分辨率的修改
原脚本支持3路分辨率,要扩展到5路,需同步调整滤镜链、编码参数和流映射这几个核心部分,以下是修改后的完整脚本(以1080p、720p、480p、360p、240p为例):
ffmpeg -i /Volumes/4\ XXX/XXX/XXX\ XXX/XXX/MYVIDEO.mov \ -filter_complex \ "[0:v]split=5[v1][v2][v3][v4][v5]; \ [v1]scale=w=1920:h=1080[v1out]; \ [v2]scale=w=1280:h=720[v2out]; \ [v3]scale=w=854:h=480[v3out]; \ [v4]scale=w=640:h=360[v4out]; \ [v5]scale=w=426:h=240[v5out]" \ # 1080p视频参数 -map "[v1out]" -c:v:0 libx264 -b:v:0 5000k -maxrate:v:0 5350k -bufsize:v:0 7500k \ # 720p视频参数 -map "[v2out]" -c:v:1 libx264 -b:v:1 2800k -maxrate:v:1 2996k -bufsize:v:1 4200k \ # 480p视频参数 -map "[v3out]" -c:v:2 libx264 -b:v:2 1500k -maxrate:v:2 1647k -bufsize:v:2 2250k \ # 360p视频参数 -map "[v4out]" -c:v:3 libx264 -b:v:3 1000k -maxrate:v:3 1098k -bufsize:v:3 1500k \ # 240p视频参数 -map "[v5out]" -c:v:4 libx264 -b:v:4 500k -maxrate:v:4 549k -bufsize:v:4 750k \ # 对应各分辨率的音频参数 -map a:0 -c:a aac -b:a:0 192k -ac 2 \ -map a:0 -c:a aac -b:a:1 128k -ac 2 \ -map a:0 -c:a aac -b:a:2 128k -ac 2 \ -map a:0 -c:a aac -b:a:3 96k -ac 2 \ -map a:0 -c:a aac -b:a:4 64k -ac 2 \ -f hls \ -hls_time 10 \ -hls_playlist_type vod \ -hls_flags independent_segments \ -hls_segment_type mpegts \ -hls_segment_filename stream_%v/data%03d.ts \ -master_pl_name MYVIDEO.m3u8 \ -var_stream_map "v:0,a:0 v:1,a:1 v:2,a:2 v:3,a:3 v:4,a:4" \ stream_%v/playlist.m3u8
关键修改点说明:
- 滤镜链调整:把
split=3改成split=5,新增[v4][v5]两个分流标签,再对应添加这两路的scale滤镜,分辨率可根据需求自行调整(比如换成320x180等)。 - 视频编码参数:每新增一路分辨率,复制一组
-map "[vXout]"开头的视频参数,调整对应的流索引(v:0到v:4)和码率(码率建议随分辨率降低按比例调整,避免小分辨率码率过高)。 - 音频编码参数:对应新增的视频流,添加
-map a:0开头的音频参数,流索引从a:0到a:4,码率也可按需调整(低分辨率搭配低码率音频更合理)。 - 流映射更新:在
-var_stream_map里加入新增的v:3,a:3 v:4,a:4,确保每一路视频对应一路音频。
如果要扩展到6种分辨率,重复上述步骤即可:将split改为6,新增第6个分流标签和scale滤镜,添加对应的视频、音频参数,更新var_stream_map。
二、指定自定义输出路径
原脚本输出到根目录是因为未指定前缀路径,只需在所有输出路径前加上目标路径即可,例如要输出到/Users/你的用户名/Videos/hls_output/:
- 提前创建目标目录(避免ffmpeg因目录不存在报错):
mkdir -p /Users/你的用户名/Videos/hls_output/
- 修改脚本中的路径参数:
将:
-hls_segment_filename stream_%v/data%03d.ts \ -master_pl_name MYVIDEO.m3u8 \ stream_%v/playlist.m3u8
替换为:
-hls_segment_filename /Users/你的用户名/Videos/hls_output/stream_%v/data%03d.ts \ -master_pl_name /Users/你的用户名/Videos/hls_output/MYVIDEO.m3u8 \ /Users/你的用户名/Videos/hls_output/stream_%v/playlist.m3u8
所有ts分片、播放列表都会生成到指定目录下,也可以使用相对路径(如./output/),确保路径正确即可。
内容的提问来源于stack exchange,提问作者Andy Nickless
相关产品推荐
相关产品推荐

