查找所有 MKV 文件并删除所有字幕

Dav*_*ter 5 windows subtitles batch-file matroska

我目前正在查看一个名为mkvmerge的 Windows 程序。我想创建一个批处理文件,从指定的路径递归查找所有 MKV 文件,并从找到的 MKV 文件中删除所有字幕(如果找到的 MKV 包含字幕),最后删除所有已删除字幕的原始 MKV 文件。

我已经完成了大约 2 个小时的谷歌搜索,我发现你必须能够写出这样的东西:

FOR /F "delims=*" %%A IN ('dir /b *.MKV') DO "C:\mkvmerge.exe" -o "fixed_%%A" -a 4 -s 7 --compression -1:none "%%A"
Run Code Online (Sandbox Code Playgroud)

我仍在尝试,但如果有人能给我一些帮助,我将不胜感激。

Kar*_*ran 8

mkvmerge.exe所在的同一目录中将以下内容另存为类似DelMKVSubs.bat内容,根据您的要求编辑rootfolder变量并运行批处理文件:

@echo off
cls
set rootfolder=C:\
echo Enumerating all MKVs under %rootfolder%
echo.
for /r %rootfolder% %%a in (*.mkv) do (
    for /f %%b in ('mkvmerge -i "%%a" ^| find /c /i "subtitles"') do (
        if [%%b]==[0] (
            echo "%%a" has no subtitles
        ) else (
            echo.
            echo "%%a" has subtitles
            mkvmerge -q -o "%%~dpna (No Subs)%%~xa" -S "%%a"
            if errorlevel 1 (
                echo Warnings/errors generated during remuxing, original file not deleted
            ) else (
                del /f "%%a"
                echo Successfully remuxed to "%%~dpna (No Subs)%%~xa", original file deleted
            )
            echo.
        )
    )
)
Run Code Online (Sandbox Code Playgroud)

批处理文件应该很容易理解,但这里有一个概述:

  1. 它用于for /r递归搜索%rootfolder%所有 MKV

  2. 然后mkvmerge -i在每个 MKV 上运行以检查是否存在字幕轨道

  3. 如果 MKV 确实包含字幕轨道,它会mkvmerge -S在跳过所有此类轨道的同时运行以重新混合文件

  4. 最后它检查 mkvmerge 的退出代码,如果这个(即errorlevel)是 0 表示成功,没有警告/错误,它会删除原始文件

欲了解更多看到了mkvmerge文档for /?if /?在命令提示符下等。