모든 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.