Retrouvez tous les fichiers MKV et supprimez tous les sous-titres

Je regarde actuellement un programme Windows appelé mkvmerge . Je voudrais créer un fichier batch pour trouver tous les fichiers MKV de manière récursive à partir d'un chemin spécifié, et supprimer tous les sous-titres des fichiers MKV trouvés (si le MKV trouvé contient des sous-titres), finalement en supprimant tous les fichiers MKV originaux qui ont supprimé les sous-titres.

J'ai fait environ 2 heures de googling, et je trouve que vous devez pouvoir écrire des choses comme ceci:

FOR /F "delims=*" %%A IN ('dir /b *.MKV') DO "C:\mkvmerge.exe" -o "fixed_%%A" -a 4 -s 7 --compression -1:none "%%A" 

J'essaie encore, mais si quelqu'un me donne un peu d'aide, j'apprécierais vraiment.

Enregistrez le suivant comme quelque chose comme DelMKVSubs.bat dans le même répertoire mkvmerge.exe , modifiez la variable racine selon vos besoins et exécutez le fichier de commandes:

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

Le fichier de commandes doit être assez facile à comprendre, mais voici un aperçu néanmoins:

  1. Il utilise for /r recherche récursive %rootfolder% pour tous les MKV

  2. Il exécute ensuite mkvmerge -i sur chaque MKV pour vérifier si une piste de sous-titres existe

  3. Si le MKV contient des pistes de sous-titres, il exécute mkvmerge -S pour remuxer le fichier en ignorant toutes ces pistes

  4. Enfin, il vérifie le code de sortie de mkvmerge et si ceci (c'est-à-dire le niveau d' errorlevel ) est 0 indiquant le succès sans aucun avertissement / erreur, il supprime le fichier d'origine

Pour plus d'informations, voir la documentation de mkvmerge et aussi for /? , if /? Etc. à l'invite de commande.

Merci, Karan, cela m'a été très utile aussi. J'ai modifié votre script afin que vous puissiez choisir une langue (spécifié par 3LC (eng, ned, swe, etc.)) pour les sous-titres que vous souhaitez conserver. De plus, j'ai supprimé la partie où les fichiers d'entrée ont été supprimés et j'ai choisi d'ajouter un suffixe au fichier de sortie.

Voici ma version:

 :: 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