-1

所以这就是交易......我正在尝试使用 mkvextract.exe 通过批处理脚本从 mkv 容器中提取特定轨道,我能想到的唯一方法是通过批处理提取部分轨道并手动提取其余轨道(这个成本我很多时间)。实际上是否有更好、更智能、更快的方法来实现这一目标?我需要提取的只是:

文件夹“subs”中具有原始名称的所有字幕轨道
“atchmnts”文件夹中具有原始名称的所有附件(更新:我管理了这个)
和文件夹“xml”中具有XML格式原始名称的章节轨道(更新:完成xDeathwing .tho,它不是原始请求的原始文件名,在这种情况下它可以,因为每个 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" (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)

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,但无法真正找到我要查找的内容并修复我的脚本。

4

1 回答 1

1

将以上所有内容提取到一个文件夹中,然后通过 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
于 2016-01-03T10:59:41.927 回答