You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置FFmpeg实现m3u8文件中ts分片的多线程下载?

如何让FFmpeg多线程下载m3u8提升速度

刚好碰到过类似的问题,FFmpeg默认处理HLS(m3u8)时是单线程下载分片的,这就导致带宽利用率上不去,下载速度慢得让人着急。给你两个实用的优化方案,亲测有效:

1. 直接用FFmpeg内置参数开启多线程

不需要额外工具,在你原来的命令基础上添加几个参数就能开启多线程下载:

ffmpeg -threads 8 -http_persistent 1 -hls_flags multi_threaded_demux -i <source m3u8 file> -c copy target.mp4

这里的参数解释下:

  • -threads 8:指定FFmpeg使用的线程数,你可以根据自己的CPU和网络情况调整(比如4、8、16,别超过CPU核心数太多)
  • -http_persistent 1:开启HTTP持久连接,避免每次下载分片都重新握手建立连接,减少不必要的开销
  • -hls_flags multi_threaded_demux:启用HLS多线程解复用,让FFmpeg同时下载多个ts分片,直接拉满带宽

2. 配合aria2c多线程下载(速度提升更明显)

如果FFmpeg自带的多线程效果还是不够理想,试试用aria2c先批量下载所有分片,再用FFmpeg合并——这种方式对大部分m3u8都能带来显著的速度提升:

第一步:用aria2c批量下载分片

直接让aria2c解析m3u8文件,同时开启多线程下载:

aria2c -x 16 -s 16 -i <source m3u8 file> -d ./ts_fragments

参数说明:

  • -x 16:最大同时下载的线程数
  • -s 16:每个分片文件的最大连接数
  • -d ./ts_fragments:指定分片保存的目录,方便后续合并

第二步:用FFmpeg合并分片

下载完成后,需要创建一个分片列表文件(比如命名为filelist.txt),内容格式要像这样:

file './ts_fragments/xxx.ts'
file './ts_fragments/yyy.ts'
file './ts_fragments/zzz.ts'
...

你可以用脚本自动生成这个列表(比如Linux下用ls ./ts_fragments/*.ts | sed 's/^/file /' > filelist.txt),然后用FFmpeg合并:

ffmpeg -f concat -safe 0 -i filelist.txt -c copy target.mp4
  • -f concat:使用FFmpeg的concat解复用器来合并文件
  • -safe 0:允许使用跨目录或者绝对路径的文件,避免报错

小提醒

  • 有些网站的m3u8有防盗链限制,这时候不管用FFmpeg还是aria2c,都需要添加请求头参数(比如FFmpeg用-headers "Referer: 原网页URL",aria2c用-H "Referer: 原网页URL")
  • 线程数不是越高越好,太高可能会触发服务器的限流机制,反而导致速度变慢,建议从8-16开始测试,找到适合自己网络的数值

内容的提问来源于stack exchange,提问作者xichun lin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:05:12