모든 MKV 파일 찾기 및 모든 자막 삭제


5

나는 현재 Windows 프로그램을보고있다. mkvmerge . 모든 경로에서 재귀 적으로 모든 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"

나는 여전히 노력하고 있지만, 누군가가 나에게 약간의 도움을 줄 수 있다면, 정말로 감사 할 것입니다.


1
어느 부분이 작동하지 않는지, 오류는 무엇입니까? for ... do 부분을 테스트 했습니까? %% A를 반향합니다. 첫 번째 시험에서 나온 이름 중 하나에 대해 하나의 DO를 시도 했습니까?
Jan Doggen

그것은 인터넷에서 나온 예입니다. 나는 내가하고있는 일을 알고있다. 이것은 제가 구입 한 모든 법률 비디오에 대한 자동화 된 미디어 센터를 설정하는 마지막 부분입니다. 지금은이 코드를 스스로 가르치려고합니다. 그래서이 배치 파일을 작성할 수 있습니다.
David Custer

1
그런 다음 "일괄 프로그래밍"또는 "일괄 파일 프로그래밍"을 배우십시오 (이들은 "자습서"와 함께 검색어입니다). 그리고 내가 제안한 두 단계로 노력을 나누십시오.
Jan Doggen

내가 할 일이있어. mkvmerge -o ./newfiles/ basename "$i" mkv.mkv --no-subtitles "$ i"; 완료되었지만 올바르게 작동하지 않는 것 같습니다.
David Custer

1
불완전한 @DavidCuster 세게 때리다 - 리눅스와 OSX에서 주로 사용되는 스크립팅 언어. Windows에서 작동시킬 수도 있지만, 가치가있는 것보다 더 많은 노력을 기울일 수 있습니다. 찾다 Windows batch script 또는 Windows batch for loop. 다행히 누군가가 대답으로 좋은 설명을 게시 할 것입니다. 직접 해보 겠지만 일괄 스크립팅은 매우 불안정하기 때문에 참조를 찾아야합니다.
evilsoup

답변:


8

다음과 같이 저장하십시오. DelMKVSubs.bat 같은 디렉토리에있다. mkvmerge.exe 에 있습니다. 루트 폴더 변수를 요구 사항에 따라 배치 파일을 실행하십시오.

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

배치 파일은 쉽게 이해할 수 있어야하지만 다음과 같은 개요가 있습니다.

  1. 그것은 사용 for /r 재귀 적으로 검색 %rootfolder% 모든 MKV

  2. 그런 다음 실행됩니다. mkvmerge -i 각 MKV에 자막 트랙이 있는지 확인

  3. MKV에 자막 트랙이 포함되어 있으면 MKV가 실행됩니다. mkvmerge -S 그런 모든 트랙을 건너 뛰면서 파일을 재조정합니다.

  4. 마지막으로 mkvmerge의 종료 코드를 확인하고 errorlevel )는 경고 / 오류없이 0을 나타내며 원본 파일을 삭제합니다

자세한 내용은 mkvmerge 문서 그리고 또한 for /?, if /? 명령 프롬프트에서.


이 작품! 내 환경 변수 경로에 MKVToolNix를 넣습니다. 나는 너에게 충분히 감사 할 수 없다. 나는 지금 네가 한 일을 너 자신을 위해 배우려고 노력하고있다. 나는 네가 한 일을 스스로 할 수 있기를 바란다. 그것은 꽤 훌륭합니다! 고맙습니다! 고맙습니다! 고맙습니다! ;) 한 가지 질문이 있습니다. mkvmerge -i를 실행할 때 영어 자막이 있으면 다시 매핑하기 전에 해당 디렉토리로 추출하도록 말할 수 있습니까? 나는 현재이 문제를 조사하고 있으며 이것을 스스로 파악하려고 노력 중이다. 방금 너에게 물어볼지도 모른다고 생각 했어.
David Custer

환영합니다. 도움이된다면 답을 수락하는 것을 잊지 마십시오! MKV에서 트랙을 추출 (자막)하려면 적절한 이름의 문서를보십시오. mkvextract .
Karan

OOps. 내가 할 수 있는지 몰랐다. 그걸 알아 내려고 잠깐 나갔다. soooooooo 많이 고마워요!
David Custer

배치 명령에 대한 추가 도움말이 필요하면 언제나 사람들에게 참조하십시오. 이 지역 .
Karan

감사! 나는 그것을 읽고있다. 나는 당신의 mkvextract 사용을 시도하고 편집 할 것입니다. 내가 끝나면 게시 할게. 오늘은 좋지 않을 수도 있습니다. 나는 당신만큼 빠르지 않습니다.
David Custer

0

고마워, 카란. 나에게도 매우 유용했다. 스크립트를 수정하여 보관하려는 자막에 대한 언어 (3LC (eng, ned, swe 등)로 지정)를 선택할 수 있도록했습니다. 또한 입력 파일이 삭제 된 부분을 제거하고 출력 파일에 접미사를 추가하기로 결정했습니다.

내 버전은 다음과 같습니다.

:: remux all mkvs under a certain subfolder with all subitles
:: but those as specified by %language% parameter removed.

@echo off
setlocal enabledelayedexpansion

:: set your variables here
set rootfolder="C:\temp\New folder"
set language=eng
set suffix= (eng sub)

:: do the remuxing
echo Remuxing all mkvs in %rootfolder% and its subfolders.
for /r %rootfolder% %%a in (*.mkv) do (
    set subs=
    set mkv=%%a
    for /f "tokens=3 delims=: " %%b in ('mkvmerge -I "%%a" ^| findstr /i /r ".*subtitles.*language:%language%.*"') do (
        set subs=!subs!,%%b
    )
    for /f "tokens=*delims=," %%c in ("!subs!") do (
        set subs=%%c
    )
    if not exist "%%~dpna%suffix%%%~xa" if not "!subs!"=="" (
        mkvmerge -q -o "%%~dpna%suffix%%%~xa" -s !subs! "%%a"
        if errorlevel 1 (
            echo Warnings/errors generated during remuxing of "%%a".
        ) else (
            echo Successfully remuxed to "%%~dpna (eng subs)%%~xa".
        )
    ) else (
        echo Input file "%%a" has no subtitles in %language% or output file "%%~dpna%suffix%%%~xa" already exists. Skipping this file.
    )
)
pause
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.