所以这是交易......我试图通过使用mkvextract.exe的批处理脚本从mkv容器中提取特定的轨道,我能想到的唯一方法是通过批处理和其余部分提取部分轨道他们manualy(这花了我很多时间)。实际上是否有更好,更智能,更快速的方法来实现这一目标?我需要提取的是:
文件夹中包含原始名称的所有字幕轨道" subs"
所有附件在文件夹" atchmnts" (更新:我管理了这个)
和章节用XML格式的原始名称跟踪文件夹" xml" (更新:完成thx到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" (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,但无法找到我要找的内容并修复我的脚本。
答案 0 :(得分: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