我为用于MUX MKV文件的Windows创建了一个批处理脚本。启动此命令时:
ffprobe -v 0 -select_streams s -show_entries stream=index:disposition=default -of compact=nk=0 file.mkv | findstr disposition:default=1
输出为:
stream|index=3|disposition:default=1
如何仅过滤和打印数字“ 3”并将其放入变量中?
您需要在批处理文件中的for
语句中执行命令,才能捕获输出行并进一步处理它们。在命令行和带有for /?
的零件上检查for /f
,并了解“ usebackq”。关键是,如果命令是在for语句中执行的,而不是直接在命令行提示符下执行的,则需要从命令中转义几个特殊字符。尝试使这部分工作,并根据需要发布您的解决方案以更新您的答案。然后我们可以进入提取数字的第二部分。
我提交了一个简化输出的新命令:
ffprobe -v 0 -select_streams s -show_entries stream=index:disposition=forced:stream_tags=language -of csv=nk=1:p=0 file.mkv | FINDSTR /C:"1,ita"
输出为:
3,1,ita
“ 3”是轨道ID,“ 1”是强制标志,“ ita”是轨道语言。要创建仅包含要在mkvmerge命令中插入的音轨ID(例如3)的变量,我运行了以下命令:
FOR /F "delims=, tokens=1" %%# IN ('ffprobe -v 0 -select_streams s -show_entries stream=index:disposition=forced:stream_tags=language -of csv=nk=1:p=0 file.mkv ^| FINDSTR /C:"1,ita"') DO SET subid=%%#
但是什么也没发生! Mkvmerge报告此错误:错误:Invalid track ID or language code in '-s '.
我真的不知道错误在哪里!