Encontre todos os MKV, extraia legendas em inglês, remova todas as legendas, exclua MKV original das legendas removidas [closed]

0

Até agora :

@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.
        )
    )
)

Que localiza todos os arquivos MKV recursivamente a partir de um caminho especificado e remove todas as legendas dos arquivos MKV encontrados (se o MKV encontrado contiver legendas), finalmente excluindo todos os arquivos MKV originais que tiveram as legendas removidas.

Eu estou olhando para adicionar quando corre mkvmerge -i se tem legendas em inglês, diga para extraí-los para o diretório do arquivo MKV antes de remuxar (usando mkvextract ).

    
por David Custer 25.05.2013 / 02:24

1 resposta

1

Identifique legendas em inglês em arquivos de vídeo MKV com GNU sed :

@echo off&setlocal
set "rootfolder=C:\video\test"
echo Enumerating all MKVs under %rootfolder%
echo.
for /r "%rootfolder%" %%a in (*.mkv) do (
    for /f %%b in ('mkvmerge  --ui-language en -i "%%a" ^| find /c /i "subtitles"') do (
        if "%%b"=="0" (
            echo(%%a has no subtitles
        ) else (
            echo(%%a has subtitles
            set "line="
            for /f "delims=" %%i in ('mkvmerge --ui-language en --identify-verbose "%%a" ^| sed "/subtitles/!d;/language:eng/!d;s/.* \([0-9]*\):.*//"') do (
                echo(english Track ID: %%i
                call set line=%%line%% %%i:"%%~dpna (Sub Track %%i).sub"
            )
            setlocal enabledelayedexpansion
            mkvextract tracks "%%a" --ui-language en !line! ||(echo Demuxing error!&goto:eof)
            endlocal
            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(
        )
    )
)
    
por 26.05.2013 / 00:44