创建目录中所有 *.ts 文件的 m3u8 播放列表(使用批处理脚本)

问题描述 投票:0回答:3

我想从目录中的 300-400 *.ts 段创建一个 HLS 播放列表。

文件名不是连续数字(例如0005.ts、0014.ts、0024.ts、0035.ts等)。

我不太熟悉批处理文件的可能性,我只能发出以下命令:

dir /o:n /b *.ts > playlist.m3u8
,但结果显然不是播放列表,只是文件列表。

我需要在文件名之前和之间添加额外的行:

#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10.000,
0005.ts
#EXTINF:10.000,
0014.ts
#EXTINF:10.000,
0025.ts

我有一种感觉,它会比 1 行命令复杂一点。有人可以帮忙吗?

batch-file directory http-live-streaming playlist
3个回答
1
投票

这应该可以帮助您开始:

@setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
@rem @set prompt=$G

@if "%1" neq "" (@set _outFile=playlist.m3u8) else (@set "_outFile=%1")

@echo #EXTM3U > %_outFile%
@echo #EXT-X-TARGETDURATION:10 > %_outFile%
@echo #EXT-X-VERSION:3 > %_outFile%
@echo #EXT-X-MEDIA-SEQUENCE:0 > %_outFile%

@for /f %%G in ('dir /b *.ts') do @call :EmitFileEntries "%%G"
@exit /b 0

:EmitFileEntries
@echo #EXTINF:10.000, > %_outFile%
@echo %%~G > %_outFile%
@exit /b 0

0
投票

完成上述工作后,这对我来说实际上是有效的:

@echo #EXTM3U > %1
@echo #EXT-X-PLAYLIST-TYPE:VOD >> %1
@echo #EXT-X-TARGETDURATION:%2 >> %1
@echo #EXT-X-VERSION:4 >> %1
@echo #EXT-X-MEDIA-SEQUENCE:0 >> %1

@for %%G in (*.ts) do @call :EmitFileEntries "%1" %2 %%G
@echo #EXT-X-ENDLIST >> %1
@exit /b 0

:EmitFileEntries
@echo #EXTINF:%2, >> %1
@echo %3 >> %1
@exit /b 0

我要求您传递.m3u8的名称和片段持续时间。

使用 /u 参数启动 cmd。您可以从 PowerShell 命令提示符执行此操作。


0
投票

您可以使用 mkpl 命令行实用程序:https://github.com/MatteoGuadrini/mkpl

mkpl -d /folder/with/tsfiles -i ts -g UNICODE playlist.m3u8
© www.soinside.com 2019 - 2024. All rights reserved.