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

如何用批处理脚本为目录中所有*.ts文件生成m3u8播放列表

生成非连续TS分片的HLS播放列表(批处理方案)

你说得对,单纯用dir命令只能生成文件名列表,而有效的HLS播放列表需要包含特定的M3U8标签(比如头部信息、分片时长标记等)。这里给你写一个完整的批处理脚本,能自动生成符合标准的HLS播放列表,还可以选择获取真实的分片时长。

基础版本(固定分片时长)

如果你的TS分片时长都比较接近,或者暂时不需要精确时长,可以用这个版本:

@echo off
setlocal enabledelayedexpansion

:: 配置HLS参数
set "hls_version=3"          :: HLS版本,一般用3即可
set "target_duration=10"     :: 分片最大时长(秒),设为你分片的最长时长或稍大值

:: 创建播放列表并写入头部
echo #EXTM3U > playlist.m3u8
echo #EXT-X-VERSION:%hls_version% >> playlist.m3u8
echo #EXT-X-TARGETDURATION:%target_duration% >> playlist.m3u8

:: 遍历按名称排序的TS文件,写入分片信息
for /f "delims=" %%f in ('dir /o:n /b *.ts') do (
    echo #EXTINF:%target_duration%, >> playlist.m3u8
    echo %%f >> playlist.m3u8
)

:: 写入结束标记
echo #EXT-X-ENDLIST >> playlist.m3u8

echo 已生成有效HLS播放列表:playlist.m3u8
endlocal

怎么用:

  1. 把这段代码复制到记事本,保存为generate_hls.bat(注意保存类型选“所有文件”)
  2. 把这个批处理文件放到你的TS分片所在的目录里
  3. 双击运行它,就会生成playlist.m3u8

进阶版本(自动获取真实分片时长)

如果需要精确的分片时长(播放器会更准确地控制播放节奏),可以用这个版本(需要提前安装ffmpeg并添加到系统环境变量):

@echo off
setlocal enabledelayedexpansion

set "hls_version=3"
set "max_duration=0"

:: 先遍历所有分片,获取最长时长作为TARGETDURATION
for /f "delims=" %%f in ('dir /o:n /b *.ts') do (
    for /f "tokens=1-3 delims=:. " %%a in ('ffmpeg -i "%%f" 2^>^&1 ^| findstr /i "Duration"') do (
        set /a "current=%%a*3600 + %%b*60 + %%c"
        if !current! gtr !max_duration! set "max_duration=!current!"
    )
)

:: 创建播放列表头部
echo #EXTM3U > playlist.m3u8
echo #EXT-X-VERSION:%hls_version% >> playlist.m3u8
echo #EXT-X-TARGETDURATION:%max_duration% >> playlist.m3u8

:: 再次遍历分片,写入每个分片的精确时长
for /f "delims=" %%f in ('dir /o:n /b *.ts') do (
    for /f "tokens=1-3 delims=:. " %%a in ('ffmpeg -i "%%f" 2^>^&1 ^| findstr /i "Duration"') do (
        set /a "total=%%a*3600 + %%b*60 + %%c"
    )
    echo #EXTINF:!total!, >> playlist.m3u8
    echo %%f >> playlist.m3u8
)

echo #EXT-X-ENDLIST >> playlist.m3u8

echo 已生成带精确时长的HLS播放列表:playlist.m3u8
endlocal

关键说明:

  • #EXTM3U:必须是播放列表的第一行,标记这是一个M3U8文件
  • #EXT-X-VERSION:指定HLS版本,不同版本支持的特性不同,v3是兼容性较好的选择
  • #EXT-X-TARGETDURATION:告诉播放器所有分片的最大时长,必须大于等于所有分片的实际时长
  • #EXTINF:时长,:每个分片的前置标记,后面跟分片的时长(秒),逗号不能省略
  • #EXT-X-ENDLIST:标记播放列表结束,播放器读到这里就知道没有更多分片了

注意事项:

  • 进阶版本需要安装ffmpeg:你可以从ffmpeg官网下载,然后把ffmpeg.exe所在的路径添加到系统的PATH环境变量里,这样批处理才能调用它
  • 如果你的TS文件名有特殊字符(比如空格),脚本也能正常处理,因为用了delims=保留完整文件名
  • 脚本会自动按文件名排序(dir /o:n),和你之前的命令一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:16:17