如何用FFmpeg从M3U8播放列表选择指定分辨率下载视频
如何用FFmpeg从M3U8播放列表选择指定分辨率下载视频
我来帮你解决这个问题——你当前用的FFmpeg命令默认会拉取带宽最高的流(也就是最高分辨率版本),要指定分辨率下载其实很简单,给你两种实用方法:
方法一:通过流索引指定下载
这种方法适合你想先确认所有可用分辨率的情况:
先查看所有流的参数
用ffprobe(FFmpeg配套工具)解析主M3U8的流信息,执行这条命令:ffprobe -v error -show_entries stream=index,width,height,bit_rate -of csv=p=0 "https://sitevideo.com/list.m3u8"执行后会输出类似这样的内容(对应你提供的M3U8片段):
0,640,360,400000
1,1280,720,1500000
2,1920,1080,3000000
这里第一列是流索引,后面依次是分辨率、码率,你能轻松对应到标注为low的400k码率流(比如索引0)。修改FFmpeg命令指定流
在原命令基础上添加-map参数,明确指定要下载的视频和音频流:/home/user/bin/ffmpeg -user_agent "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0" -i "https://sitevideo.com/list.m3u8" -map 0:v:0 -map 0:a:0 -c copy "/home/file/video.ts"其中
-map 0:v:0表示选择输入文件(标记为0)的第一个视频流,-map 0:a:0选择第一个音频流,这样就会下载你想要的低分辨率版本了。
方法二:直接使用子播放列表URL
如果你已经从主M3U8内容里看到了对应目标分辨率的子播放列表(比如你提到的size1.m3u8对应low分辨率),可以直接用子列表的完整URL下载:
- 拼接完整URL:如果子列表是相对路径,就把主M3U8的域名加上,比如主URL是
https://sitevideo.com/list.m3u8,那子列表的完整地址就是https://sitevideo.com/size1.m3u8。 - 替换原命令的输入URL即可:
这种方法更直接,适合你已经明确知道子列表对应分辨率的场景。/home/user/bin/ffmpeg -user_agent "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0" -i "https://sitevideo.com/size1.m3u8" -c copy "/home/file/video_low.ts"
内容的提问来源于stack exchange,提问作者Bruno Andrade
相关产品推荐
相关产品推荐

