最近,我正在为项目使用FFmpeg。我用FFmpeg转换mp3比特率和其他东西。那些工作完美。但是现在我想为m3u8文件中的mp3%2Fmusic%2F[outputN.ts]?alt=media
每个outputN.ts
文本添加一个。这是我的m3u8文件数据结构,
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:2
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:2.005333,
'output000.ts'
#EXTINF:2.005333,
'output001.ts'
例如,现在我想申请mp3%2Fmusic%2F
,并?alt=media
为每一个文本(output000.ts
,output001.ts
等)使用的是Windows此M3U8文件中键入cmd。
例如
#EXTINF:2.005333,
mp3%2Fmusic%2Foutput000.ts?alt=media
#EXTINF:2.005333,
mp3%2Fmusic%2Foutput001.ts?alt=media
@echo off
cd /d "D:\Folder\Where\Your\files\m3u8\are" && setlocal enabledelayedexpansion
>tmp.m3u8 (for /f tokens^=*eol^= %%# in (file.m3u8)do echo\%%~#|findstr /e [0-9]\.ts'>nul && (
set "_out=%%~#" && cmd.exe /v /s /c "echo\mp3%%2Fmusic%%2F!_out:'=!?alt=media") || echo\%%~# )
>nul move /y tmp.m3u8 file.m3u8 & endlocal
1.使用afor /f
来获得文件中各行之一的清单:
for /f tokens^=*eol^= %%# in (file.m3u8)do ...
2.您可以将echo\
用作当前行(%%~#
),然后将其findstr /e
与regex一起使用,以查找以结尾的过滤器行[numbers].ts'
echo\%%#|findstr /e .[0-9]\.ts' >nul
3.使用&&
和||
运算符(与return 0
/相同return non 0
),在当前循环的行中通过findstr
(&&
)找到字符串时,将进行替换,否则,该行将保持不变。
echo\%%~#|findstr /e [0-9]\.ts'>nul && (do ...) || do ...
观察:当当前行包含字符串时'output000.ts'
,我们将从字符串中删除出现的内容'
,定义该行,并使用substring:'=nothing!
已经与所需最终字符串/行连接的变量,通过 !_out:'=!
set "_out=%%~#" && cmd.exe /v /s /c "echo\mp3%%2Fmusic%%2F!_out:'=!?alt=media"
4.我们将使用一个临时文件来保存循环的所有操作,>tmp.file (loop actions)
完成后,我们将使用move命令以与循环中使用的文件相同的名称覆盖此临时文件:
>tmp.m3u8 (for /f ... )
>nul move /y tmp.m3u8 file.m3u8 ...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句