-1

これが取引です... mkvextract.exeを使用してバッチスクリプトを介してmkvコンテナーから特定のトラックを抽出しようとしていますが、考えることができる唯一の方法は、バッチを介してトラックの一部を抽出し、残りを手動で抽出することです(これにはコストがかかります)私に多くの時間)。これを達成するためのより優れた、よりスマートで高速な方法は実際にありますか? 抽出する必要があるのは次のとおりです。

フォルダー「subs」内の元の名前のすべての字幕トラック
フォルダー「atchmnts」内の元の名前のすべての添付ファイル(更新:これを管理しました)
およびフォルダー「xml」内のXML形式の元の名前のチャプタートラック(更新:xDeathwingにthxを実行) . 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

上記のすべてを1つのフォルダーに抽出し、dirコマンドをループしてすべてのファイルを適切なフォルダーに移動することはオプションです

ここでは、.xml .sub および .ext 用の小さなバッチ ファイルをコーディングしました。必要に応じてスクリプトを自由に編集できます。delete whats left オプションを追加できます。このバッチ ファイルは、変数を使用する、より一般化されたものにすることもできます。

@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 に答える