我想从目录中的 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 行命令复杂一点。有人可以帮忙吗?
这应该可以帮助您开始:
@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
完成上述工作后,这对我来说实际上是有效的:
@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 命令提示符执行此操作。
您可以使用 mkpl 命令行实用程序:https://github.com/MatteoGuadrini/mkpl
mkpl -d /folder/with/tsfiles -i ts -g UNICODE playlist.m3u8