迄今为止:
@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”,原始文件已删除 ) 回声( ) ) )