如何通过批处理 mkvEXTRACT.exe 特定曲目?
how to mkvEXTRACT.exe specific tracks via batch?
所以这是交易......我正在尝试使用 mkvextract.exe 通过批处理脚本从 mkv 容器中提取特定曲目,我能想到的唯一方法是通过批处理和提取部分曲目其余的手动(这花费了我很多时间)。实际上有更好、更聪明、更快的方法来实现这一目标吗?我需要提取的是:
文件夹"subs"
中所有带有原名的字幕轨道
文件夹 "atchmnts" 中所有具有原始名称的附件(更新:我管理了这个)
并且在文件夹 "xml" 中使用 XML 格式的原始名称跟踪章节(更新:完成 xDeathwing。不过,它不是最初要求的原始文件名,在这种情况下没问题,因为每个 mkv 总是有 1 xml 个文件)
到目前为止我同意这个:
@echo off
mkvextract.exe attachments "video.mkv" 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
mkvextract.exe chapters "video.mkv" --redirect-output chapters.xml
mkvextract.exe --ui-language en tracks "video.mkv" 0:"%CD%\%~sub.ass" <b>(Update: this one
actually working, but I can extract only one track instead of all of them and also its not
keeping original filename as given by mkvextract - "video_track4_eng.ass" - and also
I assume this will work only if track ID/language was defined during muxing process)</b>
md "atchmnts"
md "subs"
md "xml"
move "*.ttf" "atchmnts\"
move "*.otf" "atchmnts\"
move "*.png" "atchmnts\"
move "*.srt" "subs\"
move "*.ass" "subs\"
move "*.sub" "subs\"
move "*.xml" "xml\"
pause
exit
我知道 https://mkvtoolnix.download/doc/mkvextract.html,但无法真正找到我要找的东西并修复我的脚本。
将以上所有内容提取到一个文件夹中,然后通过 dir 命令循环将所有文件移动到相关文件夹是一种选择
这里我为 .xml .sub 和 .ext 编写了一个小的批处理文件
您可以自由编辑脚本
如果需要,我也可以添加删除剩下的选项
这个批处理文件也可以变成一个更通用的文件,它带有变量
@Echo off
if NOT exist xml md xml
if NOT exist subs md subs
if NOT exist atchmnts md atchmnts
set i=1&set j=1&set k=1
setlocal enabledelayedexpansion
for /F %%a IN ('dir /b') do (
if /I %%~xa==.xml set "xml[!i!]=%%~a"&&set /a i+=1
if /I %%~xa==.sub set "sub[!j!]=%%~a"&&set /a j+=1
if /I %%~xa==.ext set "ext[!k!]=%%~a"&&set /a k+=1
)
set /a i-=1&set /a j-=1& set /a k-=1
if %i% GTR 0 echo xml
for /L %%i in (1,1,%i%) do echo %%i- "!xml[%%i]!"&&move %~dp0\!xml[%%i]! %~dp0\xml
if %j% GTR 0 echo sub
for /L %%i in (1,1,%j%) do echo %%i- "!sub[%%i]!"&&move %~dp0\!sub[%%i]! %~dp0\sub
if %k% GTR 0 echo ext
for /L %%i in (1,1,%k%) do echo %%i- "!ext[%%i]!"&&move %~dp0\!ext[%%i]! %~dp0\ext
pause
所以这是交易......我正在尝试使用 mkvextract.exe 通过批处理脚本从 mkv 容器中提取特定曲目,我能想到的唯一方法是通过批处理和提取部分曲目其余的手动(这花费了我很多时间)。实际上有更好、更聪明、更快的方法来实现这一目标吗?我需要提取的是:
文件夹"subs"
中所有带有原名的字幕轨道
文件夹 "atchmnts" 中所有具有原始名称的附件(更新:我管理了这个)
并且在文件夹 "xml" 中使用 XML 格式的原始名称跟踪章节(更新:完成 xDeathwing。不过,它不是最初要求的原始文件名,在这种情况下没问题,因为每个 mkv 总是有 1 xml 个文件)
到目前为止我同意这个:
@echo off
mkvextract.exe attachments "video.mkv" 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
mkvextract.exe chapters "video.mkv" --redirect-output chapters.xml
mkvextract.exe --ui-language en tracks "video.mkv" 0:"%CD%\%~sub.ass" <b>(Update: this one
actually working, but I can extract only one track instead of all of them and also its not
keeping original filename as given by mkvextract - "video_track4_eng.ass" - and also
I assume this will work only if track ID/language was defined during muxing process)</b>
md "atchmnts"
md "subs"
md "xml"
move "*.ttf" "atchmnts\"
move "*.otf" "atchmnts\"
move "*.png" "atchmnts\"
move "*.srt" "subs\"
move "*.ass" "subs\"
move "*.sub" "subs\"
move "*.xml" "xml\"
pause
exit
我知道 https://mkvtoolnix.download/doc/mkvextract.html,但无法真正找到我要找的东西并修复我的脚本。
将以上所有内容提取到一个文件夹中,然后通过 dir 命令循环将所有文件移动到相关文件夹是一种选择
这里我为 .xml .sub 和 .ext 编写了一个小的批处理文件 您可以自由编辑脚本 如果需要,我也可以添加删除剩下的选项 这个批处理文件也可以变成一个更通用的文件,它带有变量
@Echo off
if NOT exist xml md xml
if NOT exist subs md subs
if NOT exist atchmnts md atchmnts
set i=1&set j=1&set k=1
setlocal enabledelayedexpansion
for /F %%a IN ('dir /b') do (
if /I %%~xa==.xml set "xml[!i!]=%%~a"&&set /a i+=1
if /I %%~xa==.sub set "sub[!j!]=%%~a"&&set /a j+=1
if /I %%~xa==.ext set "ext[!k!]=%%~a"&&set /a k+=1
)
set /a i-=1&set /a j-=1& set /a k-=1
if %i% GTR 0 echo xml
for /L %%i in (1,1,%i%) do echo %%i- "!xml[%%i]!"&&move %~dp0\!xml[%%i]! %~dp0\xml
if %j% GTR 0 echo sub
for /L %%i in (1,1,%j%) do echo %%i- "!sub[%%i]!"&&move %~dp0\!sub[%%i]! %~dp0\sub
if %k% GTR 0 echo ext
for /L %%i in (1,1,%k%) do echo %%i- "!ext[%%i]!"&&move %~dp0\!ext[%%i]! %~dp0\ext
pause