查找所有 MKV,提取英文字幕,删除所有字幕,从已删除字幕中删除原始 MKV

查找所有 MKV,提取英文字幕,删除所有字幕,从已删除字幕中删除原始 MKV

迄今为止

@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 --identify-verbose "%%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.
        )
    )
)

从指定路径递归查找所有 MKV 文件,并从找到的 MKV 文件中删除所有字幕(如果找到的 MKV 包含字幕),最后删除所有已删除字幕的原始 MKV 文件。

我希望在运行时mkvmerge -i添加英文字幕,告诉它在重新混合之前将它们提取到 MKV 文件的目录中(使用mkvextract)。

答案1

使用以下方法识别 MKV 视频文件中的英文字幕GNU sed

@echo 关闭&设置本地
设置“根文件夹=C:\video\test”
echo 枚举 %rootfolder% 下的所有 MKV
回声。
对于 /r "%rootfolder%" %%a 在 (*.mkv) 中执行(
    对于 /f %%b 在 ('mkvmerge --ui-language en -i "%%a" ^| find /c /i "subtitles"') 中执行 (
        如果“%%b”==“0”(
            echo(%%a 没有字幕
        ) 别的 (
            echo(%%a 有字幕
            设置“行=”
            for /f "delims=" %%i in ('mkvmerge --ui-language en --identify-verbose "%%a" ^| sed "/subtitles/!d;/language:eng/!d;s/.* \([0-9]*\):.*/\1/"') do (
                echo(英语曲目ID:%%i
                调用设置 line=%%line%% %%i:“%%~dpna (子轨道 %%i).sub”
            设置本地启用延迟扩展
            mkvextract 轨道“%%a” --ui-language en !line! ||(echo Demuxing error!&goto:eof)
            端局部
            mkvmerge -q -o "%%~dpna (无订阅)%%~xa" -S "%%a"
            如果错误级别 1 (
                echo 重新混合过程中产生的警告/错误,原始文件未被删除
            ) 别的 (
                删除/f“%% a”
                echo 成功重新合并为“%%~dpna (No Subs)%%~xa”,原始文件已删除
            回声(

相关内容