MISE A JOUR du 2 février 2017
NOUVEAU La version 9.8.0 de MKVToolnix intègre désormais l'extraction des sous-titres DVBsub
Hello
Voici une V2.0 "alpha" en BAT :
Du code de bleusaille, pas très propre, plus ou moins auto-documenté et interactif, monté petit à petit à partir de (beaucoup de) recherches sur le net sur l'art du "batch" et de la ligne de commandes.
Il est (assez ?) facilement personnalisable en fonction des desiderata de chacun, j'ai laissé volontairement quelques "pause"(s) supprimables sans dommages pour suivre l'évolution du traitement. J'ai encore du mal à gérer proprement les affichages avec "echo", mais ça n'empêche pas le bazar de tourner.
La V2 se distingue de la V1 par l'adjonction d'une usine à gaz (entre "call" et"reprise") qui transforme les segments nettoyés avec Avidemux récupérés dans le fichier*.py créé par la sauvegarde du projet (débuts et durées en microsecondes) en ligne de commandes pour scission au format utilisé par MKVToolnix (débuts et fins en "hh:mm:ss,cc" cc étant les 100èmes de secondes), tout en conservant la possibilité de report manuel de ces valeurs dans un fichier texte ou directement en cours d'exécution.
La V2 exploite aussi l'extraction et le remultiplexage directs des sous-titres "DVBsub" par MKVToolnix mais en conservant la possibilité de les redimensionner et repositionner ainsi que d'en créer une version SRT.
Le choix des modalités d'exploitation et de nettoyage des divers flux avec Avidemux, MKVToolNix et FFmpeg est offert en coutr d'exécution pour pallier à certains problèmess liés aux erreurs de transmission ou de cogdage mieux traités selon les cas par l'un ou par l'autre de ces logiciels
RAPPEL :
Ici, il s'agit de nettoyer (début, pubs, fin) les enregistrements PVR de la TNT (et éventuellement FTA des satellites) et de les stocker de façon à ce que leurs caractéristiques de langues et sous-titres restent accessibles après coup à un maximum de lecteurs multimédia externes de tous types, les lecteurs "informatiques" tels que MPC-HC, SMplayer, VLC, etc. ne posant en principe pas de problèmes.
Si l'on désire sans se prendre la tête une vidéo personnalisable à tous points de vue mais figée, le logicie gratuit "Freemake Video Converter", bien que plutôt poussif pour la recherche des parties à nettoyer, reste le plus convivial.
Attention cependant à l'installation de décliner tous les parasites proposés !
Sinon, pour le cas où l'utilisation initiale de l'excellent programme "VidePub" ne permettrait pas de satisfaire les besoins spécifiques du/des lecteur(s) externe(s) de l'utilisateur, j'ai cherché à automatiser au maximum par un fichier BAT les opérations sous Windows et ceci en n'utilisant que des logiciels gratuits (ça doit pouvoir s'adapter à Linux) pour obtenir un fichier MKV facilement re-personnalisable en final, aussi passe-partout que possible, traité en un minimum de temps et sans pertes de qualité, par copie des composantes Vidéo, Audio, Sous-titres, et faculté de transcodage Audio pour certains lecteurs qui ne digèrent pas l'AC3 (majoritaire en TNT-HD) ou l'AAC (
replays, YouTube, etc) et retraitement des sous-titres.
Les liens vers ces logiciels sont indiqués ci-dessous, on trouvera aussi d'autres logiciels et quelques commentaires en p.4 du fil.
Pour commencer, il faut se créer un répertoire de travail, chez moi c'est "D:\Filmatraiter\Encours\" dans lequel on laissera à demeure un certain nombre d'outils, le fichier BAT "ToutAuto_v*.bat" et où l'on copiera (pour y garder l'original en secours) depuis la clé USB le fichier "*.mts" à traiter.
Une fois le MKV final obtenu, on supprimera tout le contenu ajouté dans le répertoire avec sauvegarde éventuelle dans un répertoire dédié au film toutes les composantes utiles pour un repersonnalisation éventuelle du MKV, y compris redimensionnement, réencodage, burinage des sous-titres, changement de conteneur, etc.
Petit glossaire à propos des sous-titres :
-
dvbsub : Codage original des sous-titres sous forme d'images genre BMP, avec couleurs et position variables utilisé dans les flux DVB(-T et -S).
On les trouve sous-forme classique (comme au cinéma, mais avec un peu de mise en page) et/ou pour malentendants avec commentaires annexes concernant les sons du film.
En général, ils ne peuvent être exploités par l'utilisateur qu'avec l'appareil qui a enregistré le flux "brut" ou les lecteurs informatiques (VLC, MPC-HC, SMplayer, etc). On peut cependant extraire facilement ces fichiers et les multiplexer ("soft") en MKV, c'est une option que je n'ai pas implémentée car elle peut poser des problèmes avec certains lecteurs externes.
-
vobsub : Egalement codés sous forme d'images, rendu visuel identique au
dvbsub. Obtenu par transcodage du
dvbsub, le
vobsub me semble plus largement accepté par les lecteurs externes. Il nécessite toutefois une reprise de la mise en page (plus ou moins automatique). Le codage se fait par paires *.idx et *.sub, multiplexables ("soft") en MKV et certains autres conteneurs.
-
SRT : Fichiers "texte" éditables de rendu traditionnel (films "VOST" au cinéma...), d'aspect éventuellement modifiable selon les goûts. Ils sont obtenus par reconnaissance optique du
dvbsub ou du
vobsub et multiplexables en MKV et autres conteneurs.
On peut aussi trouver pour les films ces fichiers SRT sur le net, mais il, faudra les resynchroniser, opération relativement avec "Subtitle Edit" et ses confrères.
La plupart des logiciels d'édition vidéo peuvent buriner définitivement ("hard") ces divers formats dans la vidéo, moyennant un réencodage de celle-ci.
LES OUTILS :
# Pour nettoyer directement et rapidement les début, pubs, fin :
Videpub
A installer et mettre un raccourci dans la boîte à outils.
Renommer auparavant "*.mts" en "*.ts"
# L'outil fondamental :
Avidemux Version actuelle : 2.6.18
A installer dans le dossier proposé par défaut et mettre un raccourci dans la boîte à outils.
# Son complémentaire :
FFmpeg Version actuelle 3.2.2
A dézipper, puis il suffit de copier l'exécutable "ffmpeg.exe" dans la boîte à outils.
# Pour remettre les sous-titres VobSub en bonne place (et faire plus encore):
BDSup2Sub
Il nécessite que Java soit installé
Celui-ci peut aussi fonctionner en
ligne de commande
Dézipper puis copier "BDSup2Sub512.jar" dans la boîte à outils.
# Pour transcoder les sous-titres en SRT :
Subtitle Edit Version actuelle 3.5.1
Dézipper la version portable et copier le dossier "SE351" lui-même dans la boîte à outils.
Lancer une1ère fois "SubtitleEdit.exe"
Menu "Options" > Choisir la langue > français
Menu "Orthographe" > télécharger Dictionnaires > français
# Pour finaliser et personnaliser :
MKVToolNix Version actuelle 9.7.1
Dézipper la version portable "*.7z"
Il suffit ici de copier dans la boîte à outils les exécutables :
"mkvextract.exe"
"mkvmerge.exe"
"mkvtoolnix-gui.exe"
Pour avoir le GUI en français et éventuellement utiliser d'autres possibilités de MKVToolNix, compléter la copie avec les autres fichiers et sous-répertoires de la distribution
# Pour vérifier en lecture les traitements :
MPC-HC
Bien d'autres conviennent : VLC, SMplayer, etc..., mais j'ai retenu MPC-HC pour l'utiliser en ligne de commandes.
Choisir la version installable de MPC-HC, l'installer avec les paramètres par défaut, sinon éditer son chemin d'accès dans le BAT (à faire impérativement si l'on veut utiliser un autre lecteur).
# IMPORTANT : Il est impératif d'ajouter la commande Windows "Paste" qui n'existe pas en standard.
Pour cela dézipper
http://www.c3scripts.com/tutorials/msdos/paste.zip
et coller le fichier "paste.exe" dans C:\Windows\
PRELIMINAIRES :
# Il faut modifier les options par défaut d'Avidemux ainsi :
- Lancer le GUI d'Avidemux
- Format de sortie : Choisir MKV muxer
- Configurer : cocher "Force display width", choisir "1920" (pour gérer les chaînes qui diffusent en 1440x1080), OK
- Menu "Editer" > Sauver les réglages courants comme défaut.
# Copier en passant par un éditeur de texte comme "Notepad++" dans la boîte à outils les deux fichiers suivants avec l'extension ".py" :
"brut.py"
Code : Tout sélectionner
#PY <- Needed to identify #
#--automatically built--
adm = Avidemux()
adm.videoCodec("Copy")
adm.audioClearTracks()
adm.setSourceTrackLanguage(0,"fra")
adm.setSourceTrackLanguage(1,"qaa")
adm.setSourceTrackLanguage(2,"qad")
adm.audioAddTrack(0)
adm.audioCodec(0, "copy");
adm.audioSetDrc(0, 0)
adm.audioSetShift(0, 0,0)
adm.audioAddTrack(1)
adm.audioCodec(1, "copy");
adm.audioSetDrc(1, 0)
adm.audioSetShift(1, 0,0)
adm.audioAddTrack(2)
adm.audioCodec(2, "copy");
adm.audioSetDrc(2, 0)
adm.audioSetShift(2, 0,0)
adm.setContainer("MKV", "forceDisplayWidth=True", "displayWidth=1920")
"brut_adm_AAC.py"
Code : Tout sélectionner
#PY <- Needed to identify #
#--automatically built--
adm = Avidemux()
adm.videoCodec("Copy")
adm.audioClearTracks()
adm.setSourceTrackLanguage(0,"fra")
adm.setSourceTrackLanguage(1,"und")
adm.setSourceTrackLanguage(2,"und")
adm.audioAddTrack(0)
adm.audioCodec(0, "FDK_AAC");
adm.audioSetDrc(0, 0)
adm.audioSetShift(0, 0,0)
adm.audioAddTrack(1)
adm.audioCodec(1, "FDK_AAC");
adm.audioSetDrc(1, 0)
adm.audioSetShift(1, 0,0)
adm.audioAddTrack(2)
adm.audioCodec(2, "FDK_AAC");
adm.audioSetDrc(2, 0)
adm.audioSetShift(2, 0,0)
adm.setContainer("MKV", "forceDisplayWidth=True", "displayWidth=1920")
Ce sont des enregistrements de projets Avidemux, personnalisables éventuellement par les utilisateurs d'Avidemux de préférence depuis le GUI d'Avidemux.
Ils correspondent ici aux choix des traitements de base des diverses pistes audio, mais peuvent faire bien plus.
Pour ceux qui voudraient les créer depuis Avidemux, ce qui serait la façon normale, il faut charger n'importe quelle vidéo typique "*.mts" (avec plusieurs pistes audio), choisie courte pour une indexation rapide, paramétrer les réglages personnalisés et sauver le projet en *.py.
Ensuite, avec l'éditeur supprimer ces 5 lignes:
Code : Tout sélectionner
adm.loadVideo("D:/Filmatraiter/Encours/*.mts")
adm.clearSegments()
adm.addSegment(0, 0, nnnnn000)
adm.markerA = 0
adm.markerB = nnnnnn000
Et ne pas oublier "ToutAuto_v21.bat" :
ATTENTION : utiliser à titre expérimental, en cours de tests, il y a quelques pauses excédentaires
Code : Tout sélectionner
@echo Methode de recherche des points de coupe avec : 1 = Avidemux 0 = Autres
@echo Autres (par exemple "VidePub" ou lecteurs PC) est plus rapide quand il n'y a pas de pubs pour reperer "Debut" et "Fin"
@echo mais Avidemux est plus performant pour balayer le film une fois l'indexation terminee et plus propre si coupes aux "keyframes"
set MethodeRecherche=0
set /p MethodeRecherche=
echo off
echo.
@echo retenu %MethodeRecherche%
echo.
echo.
::echo off
if "%MethodeRecherche%"=="0" goto :ModeTraitement
@echo Indexation, patienter plusieurs minutes ou plus la premiere fois, mais incontournable pour l'usage d'Avidemux
"C:\Program Files\Avidemux 2.6 - 64 bits\avidemux_cli.exe" --load brut.mts --autoindex --quit
echo.
echo.
echo.
@echo Nettoyer le fichier "brut.mts" avec Avidemux (ADM) selon Edition Effacer) avec curseur, molette, fleches G, D et H, B
@echo pour les "keyframes"
@echo @echo
@echo Pour continuer et finir le travail avec le GUI d'Avidemux plutot qu'avec le BAT,
@echo ne pas le fermer, le CONFIGURER selon ses desirs et sauver le fichier nettoye
@echo ATTENTION, dans ce cas, ABSENCE DES SOUS-TITRES dans le fichier sauve !
@echo Dans tous les cas SAUVER le PROJET en "nett_ADM.py" puis (pour le plan B) le film nettoye et configure en "nettADM.mkv"
@echo Fermer le GUI
@echo NOTA : Si le message "...too short" s'affiche en fin de sauvegarde avec le GUI, fermer le GUI.
@echo Le fichier d'index "brut.mts.idx2" reste valable ainsi que le "segments.txt"
@echo Effacer le fichier *.mkv resultant, relancer le BAT avec "Mode" = 0 et "Recherche coupes" = "Autres" = 0
@echo ATTENDRE svp
echo off
echo.
echo.
echo.
"C:\Program Files\Avidemux 2.6 - 64 bits\avidemux.exe" --load brut.mts
:ModeTraitement
@echo Mode de traitement
@echo Mode 0 = FFmpeg (plus rapide mais parfois pb de synchronisation A/V/ST, a confirmer)
@echo Mode 1 = Avidemux (plus lent, synchro meilleure a confirmer,
@echo mais plante parfois en traitement du "brut.mts" aux commutations de pub
@echo En principe, choisir le mode 1, il y aura repli automatique vers le mode 0 en cas de detection de plantage
echo on
set Mode=1
set /p Mode=
echo.
@echo retenu %Mode%
echo.
echo.
:ChoixSousTitres
@echo Choix sous-titres SUB : 0 = non 1 = oui
set SousTitresSUB=1
set /p SousTitresSUB=
echo off
echo.
@echo retenu %SousTitresSUB%
echo.
echo.
@echo Choix sous-titres SRT : 0 = non 1 = oui
echo on
set SousTitresSRT=0
set /p SousTitresSRT=
echo.
@echo retenu %SousTitresSRT%
echo off
echo.
echo.
echo off
if "%SousTitresSUB%"=="0" goto :segments
if "%SousTitresSUB%"=="1" goto :iniCAR
if "%SousTitresSRT%"=="0" goto :segments
if "%SousTitresSRT%"=="1" goto :segments
:iniCAR
set car=0.5,0.5
set format=1.8,50
:ReCorr
@echo Redimensionnement de la taille des caracteres des sous-titres : Coeffs largeur et hauteur
@echo actuel %car% modifiable
echo on
set /p car=
echo.
@echo retenu %car%
echo.
echo.
@echo Repositionnement des sous-titres : Format du film L/H, decalage vers le haut
@echo actuel %format% modifiable
set /p format=
echo.
@echo retenu %format%
echo.
echo.
@echo Choix controle des sous-titres : 0 = non 1 = oui
set Controle=1
set /p Controle=
echo off
echo.
@echo retenu %Controle%
echo.
echo.
:segments
echo off
if exist "nett_ADM.py" goto :call
@echo segments selon le fichier "segments.txt"
if exist "segments.txt" goto :copie _fichier
echo on
set/p segments=
goto :ChoixDecTN_ADM
:copie _fichier
echo on
@set/p segments=<segments.txt
echo.
@echo %segments%
::pause
echo.
goto :ChoixDecTN_ADM
echo off
:call
echo off
:: Récupération des n segments dans nett_ADM.py début et durée en microsecondes, ", et ")" parasites à la fin
if exist "segs.txt" del "segs.txt
FINDSTR "addSegment(" nett_ADM.py | clip
paste >segs.txt
if exist "segs1.txt" del "segs1.txt
for /f "tokens=1,2,3" %%A in ('findstr /rc:"adm.addSegment" segs.txt') do (
echo %%B% >> "segs1.txt"
echo %%C% >> "segs1.txt"
)
if exist "segsnet.txt" del "segsnet.txt"
if exist "cuthmsc.txt" del cuthmsc.txt"
:nett
type nul > cuthmsc.txt
:boucle
::Nettoyage points de coupe "cut" des débuts
set /p cutmus=<"segs1.txt"
@echo %cutmus%
:: Nettoyage de "0000," ou "0000)" résultat en cs
set cutcs=%cutmus:~0,-6%
@echo %cutcs%
set cutcsdeb=%cutcs%
:: Conversion HH:MM:SS.cc (format MKVToolNix) desv débuts de segments
if %cutcs% GEQ 100 goto :cutnonzero
set cutcs=100
:cutnonzero
set /a hours=(%cutcs%/360000)
@echo %hours%
set /a minutes=(%cutcs%/6000)-(hours*60)
@echo %minutes%
set /a seconds=(%cutcs%-(%minutes%*6000)-(%hours%*360000))/100
@echo %seconds%
set /a csecs=(%cutcs%-(%seconds%*100)-(%minutes%*6000)-(%hours%*360000))
@echo %csecs%
set hh=0
set mm=0
set ss=0
set cc=0
:hh
if %hours% GEQ 10 goto :hhok
if "%hours%"=="0" goto :hh00
set ohours=0%hours%
set hh=%ohours%
@echo %hh%
goto :mm
:hh00
set hh=00
@echo %hh%
goto :mm
:hhok
set hh=%hours%
:mm
if %minutes% GEQ 10 goto :mmok
if %minutes% EQU 0 goto :mm00
set ominutes="0%minutes%"
set ominutes1=%ominutes:~1,-1%
set mm=%ominutes1%
@echo %mm%
goto :ss
:mm00
set mm=00
@echo %mm%
goto :ss
:mmok
set mm=%minutes%
set mm1=%minutes:~0,-1%
:ss
if %seconds% GEQ 10 goto :ssok
if "%seconds%"=="0" goto :ss00
set oseconds=0%seconds%
set ss=%oseconds%
@echo %ss%
goto :cc
:ss00
set ss="00"
@echo %ss%
goto :cc
:ssok
set ss=%seconds%
:cc
if %csecs% GEQ 10 goto :ccok
if "%csecs%"=="0" goto :cc00
set ocsecs="0%csecs%"
set ocsecs_=%ocsecs:~1,-1%
set cc=%ocsecs_%
@echo %cc%
goto :hmsc
:cc00
set cc=00
@echo %cc%
goto :hmsc
:ccok
set cc=%csecs%
:hmsc
set cc=%cc: =%
@echo %hh%:%mm%:%ss%.%cc%
:: stockage deb
set "filemask=cuthmsc.txt"
for %%A in (%filemask%) do if %%~zA==0 goto :tour1
@set /p avant=<cuthmsc.txt
echo %avant%,+%hh%:%mm%:%ss%.%cc%->cuthmsc.txt
goto :more
:tour1
echo %hh%:%mm%:%ss%.%cc%->cuthmsc.txt
goto :more
:more
more +1 segs1.txt > segstemp.txt
del "segs1.txt"
ren "segstemp.txt" "segs1.txt
:: Phase durée, nettoyage et calcul des points de coupe "cut" des fins de segments
set /p cutmus=<"segs1.txt"
@echo %cutmus%
:: Nettoyage de "0000," ou "0000)" résultat en cs
set cutcs=%cutmus:~0,-6%
@echo %cutcs%
set /a cutcsfin=%cutcsdeb%+%cutcs%
:: @echo %cutcsfin%
set cutcs=%cutcsfin%
@echo %cutcs%
:: Conversion HH:MM:SS,cc (format MKVToolNix) des fins de segments
set /a hours=(%cutcs%/360000)
@echo %hours%
set /a minutes=(%cutcs%/6000)-(hours*60)
@echo %minutes%
set /a seconds=(%cutcs%-(%minutes%*6000)-(%hours%*360000))/100
@echo %seconds%
set /a csecs=(%cutcs%-(%seconds%*100)-(%minutes%*6000)-(%hours%*360000))
@echo %csecs%
set hh=0
set mm=0
set ss=0
set cc=0
:hhF
if %hours% GEQ 10 goto :hhokF
if "%hours%"=="0" goto :hh00F
set ohours=0%hours%
set hh=%ohours%
@echo %hh%
goto :mmF
:hh00F
set hh=00
@echo %hh%
goto :mmF
:hhokF
set hh=%hours%
:mmF
if %minutes% GEQ 10 goto :mmokF
if "%minutes%"=="0" echo goto :mm00F
set ominutes="0%minutes%"
set ominutes1=%ominutes:~1,-1%
set mm=%ominutes1%
@echo %mm%
goto :ssF
:mm00F
set mm=00
@echo %mm%
goto :ssF
:mmokF
set mm=%minutes%
set mm1=%mm:~0,-1%
set mm=%mm1%
:ssF
if %seconds% GEQ 10 goto :ssokF
if %seconds% EQU 0 goto :ss00F
set oseconds=0%seconds%
set ss=%oseconds%
@echo %ss%
goto :ccF
:ss00F
set ss="00"
@echo %ss%
goto :ccF
:ssokF
set ss=%seconds%
:ccF
if %csecs% GEQ 10 goto :ccokF
if "%csecs%" EQU 0 goto :cc00F
set ocsecs="0%csecs%"
set ocsecs_=%ocsecs:~1,-1%
set cc=%ocsecs_%
@echo %cc%
goto :hmscF
:cc00F
set cc=00
@echo %cc%
goto :hmscF
:ccokF
set cc=%csecs%
:hmscF
set cc=%cc: =%
@echo %hh%:%mm%:%ss%.%cc%
:: stockage fin
@set /p avant=<cuthmsc.txt
echo %avant%%hh%:%mm%:%ss%.%cc%>cuthmsc.txt
more +1 segs1.txt > segstemp.txt
del "segs1.txt"
ren "segstemp.txt" "segs1.txt
:: test si fini
set "filemask=segs1.txt"
for %%A in (%filemask%) do if %%~zA==0 goto :fini
goto :boucle
:fini
:reprise
copy "cuthmsc.txt" "segments.txt"
@set /p segments=<segments.txt
goto :ChoixDecTN_ADM
:ChoixDecTN_ADM
echo off
echo.
echo.
@echo Decoupe avec MKVToolNix = 0 ADM = 1
echo on
set Decoupe=0
set /p Decoupe=
echo off
echo.
@echo retenu %Decoupe%
echo.
pause
echo off
if "%Decoupe%"=="1" goto :EXTRdvbSUB
:ChoixAudioAAC
@echo Conversion Audio en AAC 0 = non 1 = oui
echo on
set AAC=1
set /p AAC=
echo.
@echo retenu %AAC%
echo.
echo.
:EXTRdvbSUB
echo off
if "%SousTitresSUB%"=="1" goto :EXTR
if "%SousTitresSRT%"=="1" goto :EXTR
goto :V_A
:EXTR
if exist "brutS.mkv" goto :existbrutSmkv
:: Extraction des dvbSUB L'option -s LxH n'est pas utilisée volontairement, remplacement par BDSup java
ffmpeg.exe -y -i "brut.mts" -vn -an -scodec dvdsub -vn -an -map 0 -ignore_unknown "brutS.mkv"
:existbrutSmkv
echo off
:: Nettoyage des anciens idx et sub
if exist "brutS1.idx" del "brutS1.idx"
if exist "brutS1.sub" del "brutS1.sub"
if exist "brutS2.idx" del "brutS2.idx"
if exist "brutS2.sub" del "brutS2.sub"
if exist "brutS.idx" del "brutS.idx"
if exist "brutS.sub" del "brutS.sub"
if exist "brutSr.idx" del "brutSr.idx"
if exist "brutSr.sub" del "brutSr.sub"
if exist "brut.idx" del "brut.idx"
if exist "brut.sub" del "brut.sub"
:SEP
:: Essai 2eme piste ST normaux
mkvextract tracks brutS.mkv 1:brutS2.srt
@echo %errorlevel%
::Si = 2 (absente)Alors Essai S1
echo off
if "%errorlevel%"=="2" goto :EssaiS1
:: Verif S2 non vide
set "filemask=brutS2.sub"
for %%A in (%filemask%) do if %%~zA==0 goto :S2vide
ren "brutS2.sub" "brutS.sub"
ren "brutS2.idx" "brutS.idx"
goto :RedimvobSUB
:S2vide
del "brutS2.sub"
del "brutS2.idx"
:EssaiS1
:: Essai 1ère piste ST malentendants
mkvextract tracks brutS.mkv 0:brutS1.srt
@echo %errorlevel%
echo off
::Si = 2 (absente)alors Pas de ST
if "%errorlevel%"=="2" goto :PasdeST
:: Verif S1 non vide
set "filemask=brutS1.sub"
for %%A in (%filemask%) do if %%~zA==0 goto :PasdeST
ren "brutS1.sub" "brutS.sub"
ren "brutS1.idx" "brutS.idx"
:RedimvobSUB
java -jar BDSup2Sub512.jar -r 1080 -d 0000 -S %car% -l fr -I %format% -X left 160 -F set -o brutSr.idx brutS.idx
ren "brutSr.idx" "brut.idx"
ren "brutSr.sub" "brut.sub"
:: Contrôle
if "%Controle%"=="0" goto :SRT
@echo Appel MPC-HC selon Menu Lecture Sous-titres english (bogue dans le Java) ATTENDRE
"C:\Program Files\MPC-HC\mpc-hc64.exe" "D:\Filmatraiter\Encours\brut.mts" /play
pause
echo on
@echo Validation sous-titrage 0 = non 1 = oui
set STok=1
set /p STok=
echo.
@echo retenu %STok%
echo.
echo.
echo off
if "%STok%"=="0" goto :ReCorr
goto :SRT
:PasdeST
set SousTitresSUB=0
set SousTitresSRT=0
goto : V_A
:SRT
echo off
if "%SousTitresSRT%"=="1" goto :OCR
if "%SousTitresSRT%"=="0" goto :V_A
if "%SousTitresSUB%"=="1" goto :V_A
:: OCR sur piste vobsub non vide non redimensionnée ; brutS2.* sinon brutS1.*
:OCR
echo off
if exist "brutS.srt" goto :V_A
del D:\Filmatraiter\Encours\SE351\brutS.sub
del D:\Filmatraiter\Encours\SE351\brutS.idx
copy brutS.sub D:\Filmatraiter\Encours\SE351\brutS.sub
copy brutS.idx D:\Filmatraiter\Encours\SE351\brutS.idx
cd D:\Filmatraiter\Encours\SE351\
@echo ATTENDRE svp, une bonne dizaine de minutes
SubtitleEdit/convert brutS.sub subrip
move brutS.srt D:\Filmatraiter\Encours\brutS.srt
cd D:\Filmatraiter\Encours\
:V_A
echo off
if "%DecoupeADM%"=="1" goto :PlanB
if "%Mode%"=="0" goto :AAC_FFmpeg
:: brutMKVadm Conversion en MKV avec copies directes vidéo et audio :
if exist "brut.mkv" goto :ADMok
set avidemux="C:\Program Files\Avidemux 2.6 - 64 bits\avidemux_cli.exe"
for %%f in (brut.mts) do %avidemux% --load "%%f" --run "brut.py" --save "%%f.mkv" --quit
ren "brut.mts.mkv" "brut.mkv"
:: Test erreur ADM
@echo %errorlevel%
::pause
echo off
if "%errorlevel%"=="0" goto :ADMok
:ErreurADM
del "brut.mkv"
set Mode=0
goto :AAC_FFmpeg
:ADMok
:: Conversion en MKV avec copie vidéo et conversion audio en AAC:
echo off
if exist "brutAv.mkv" goto :MUX
if "%AAC%"=="0" goto :MUX
if "%AAC%"=="1" goto :ADM_Audio
:ADM_Audio
set avidemux="C:\Program Files\Avidemux 2.6 - 64 bits\avidemux_cli.exe"
for %%f in (brut.mts) do %avidemux% --load "%%f" --run "brut_adm_AAC.py" --save "%%f.mkv" --quit
ren "brut.mts.mkv" "brutAv.mkv"
:: Test erreur ADM
::@echo %errorlevel%
::pause
echo off
if "%errorlevel%"== "0" goto :MUX
goto :ErreurADM_A
:AAC_FFmpeg
echo off
if exist "brutA.mkv" goto MUX
if "%AAC%"=="0" goto :MUX
if "%AAC%"=="1" goto :Audio
:Audio
ffmpeg -i "brut.mts" -map 0:1 -map 0:2 -map 0:3 -c:a aac -b:a 128k "brutA.mkv"
:MUX
:: MKVmerge selon les 16 combinaisons : ADM AAC SUB SRT, rappel pour contrôle.
echo on
@echo segments=%segments%
@echo Mode=%Mode%
@echo Audio=%AAC%
@echo SUB=%SousTitresSUB%
@echo SRT=%SousTitresSRT%
:MUXpar
set /a MUXpar=1000*%Mode%+100*%AAC%+10*%SousTitresSUB%+%SousTitresSRT%
echo Mux final %MUXpar%
pause
goto :%MUXpar%
::FFmpeg
:0
mkvmerge.exe --output "nett_0000.mkv" "brut.mts" --split "parts:%segments%"
goto :Validation
:1
mkvmerge.exe --output "nett_0001.mkv" "brut.mts" "brutS.srt" --split "parts:%segments%"
goto :Validation
:10
mkvmerge.exe --output "nett_0010.mkv" "brut.mts" "brut.idx" --split "parts:%segments%"
goto :Validation
:11
mkvmerge.exe --output "nett_0011.mkv" "brut.mts" "brut.idx" "brutS.srt" --split "parts:%segments%"
goto :Validation
::FFmpeg_AAC_AAC
:100
mkvmerge.exe --output "nett_0100.mkv" "brut.mts" --no-video "brutA.mkv" --split "parts:%segments%"
goto :Validation
:101
mkvmerge.exe --output "nett_0101.mkv" "brut.mts" --no-video "brutA.mkv" "brutS.srt" --split "parts:%segments%"
goto :Validation
:110
mkvmerge.exe --output "nett_0110.mkv" "brut.mts" --no-video "brutA.mkv" "brut.idx" --split "parts:%segments%"
goto :Validation
:111
mkvmerge.exe --output "nett_0111.mkv" "brut.mts" --no-video "brutA.mkv" "brut.idx" "brutS.srt" --split "parts:%segments%"
goto :Validation
::ADM
:1000
mkvmerge.exe --output "nett_1000.mkv" "brut.mkv" --split "parts:%segments%"
goto :Validation_ADM
:1001
mkvmerge.exe --output "nett_1001.mkv" "brut.mkv" "brutS.srt" --split "parts:%segments%"
goto :Validation_ADM
:1010
mkvmerge.exe --output "nett_1010.mkv" "brut.mkv" "brut.idx" --split "parts:%segments%"
goto :Validation_ADM
:1011
mkvmerge.exe --output "nett_1011.mkv" "brut.mkv" "brut.idx" "brutS.srt" --split "parts:%segments%"
goto :Validation_ADM
::ADM_AAC
:1100
mkvmerge.exe --output "nett_1100.mkv" "brut.mkv" --no-video "brutAv.mkv" --split "parts:%segments%"
goto :Validation_ADM
:1101
mkvmerge.exe --output "nett_1101.mkv" "brut.mkv" --no-video "brutAv.mkv" "brutS.srt" --split "parts:%segments%"
goto :Validation_ADM
:1110
mkvmerge.exe --output "nett_1110.mkv" "brut.mkv" --no-video "brutAv.mkv" "brut.idx" --split "parts:%segments%"
goto :Validation_ADM
:1111
mkvmerge.exe --output "nett_1111.mkv" "brut.mkv" --no-video "brutAv.mkv" "brut.idx" "brutS.srt" --split "parts:%segments%"
goto :Validation_ADM
:Validation_ADM
@echo En principe c'est tout bon et fait avec Avidemux
pause
exit
:Validation
@echo Fichier satisfaisant 1 = oui 0 = non
set OK=1
set /p OK=
echo off
if "%OK%" == "1" exit
:PlanB
:: Suppose au moins que la sauvegarde du projet ADM avec nettoyage "nett_ADM.py" a été faite avec le GUI en son temps.
:: Alors, V et A seront nettoyés par ADM pour supprimer les commuts de pub, en ligne de commande si pas déjà fait avec le GUI
:: et SUB et SRT seront nettoyés par FFmpeg avec %segments%, puis mux final V + A + S avec MKVToolNix sans %segments%
:: Découpe ADM et Conversion en MKV avec copies directes vidéo et copie ou conversion audio selon configuration ADM :
echo off
if exist "nettADM.mkv" goto :MUXpar
set avidemux="C:\Program Files\Avidemux 2.6 - 64 bits\avidemux_cli.exe"
for %%f in (brutnettADM.mkv.mts) do %avidemux% --load "%%f" --run "nett_ADM.py" --save "%%f.mkv" --quit
pause
ren "brutnettADM.mkv.mts.mkv" "nettADM.mkv"
:: Test erreur ADM
@echo %errorlevel%
::pause
echo off
if "%errorlevel%"=="0" goto :MUXpar
@echo Traitement_correct_impossible
pause
exit
:: nettoyage ST
:MUXpar
set /a muxST=10*%SousTitresSUB%+%SousTitresSRT%+2
@echo %muxST%
::pause
goto :%muxST%
:2
pause
exit
:3
mkvmerge.exe --output "brutx_subsrt.mkv" --no-audio "brut.mts" "brutS.srt" --split parts:"%segments%"
::pause
goto :remux
:12
mkvmerge.exe --output "brutx_subsrt.mkv" --no-audio "brut.mts" "brut.idx" --split parts:"%segments%"
::pause
goto :remux
:13
mkvmerge.exe --output "brutx_subsrt.mkv" --no-audio "brut.mts" "brut.idx" "brutS.srt" --split parts:"%segments%"
::pause
:remux
mkvmerge.exe --output "nettADMst.mkv" "nettADM.mkv" --no-video "brutx_subsrt.mkv"
pause
exit
TRAITEMENT
A.
Visionner le *.mts de la clé avec MPC-HC pour vérifier langues et sous-titres et décider de ce que l'on veut conserver en matière de langues et sous-titres. Utiliser les menus "Fichier" > "Propriétés" > Media info et "Lecture"
Selon les chaînes, on trouvera 3 ou 4 pistes audio (codage AC3 ou MPEG audio) et 2 ou 3 pistes de sous-titres "dvbsub", la 1ère est généralement qualifiée de "hearing impaired"
Selon les films, la 1ère piste audio est la VF, la 2ème piste audio est la VO ou la VF, la 3ème la VF avec audio-description éventuellement et les sous-titres peuvent être vides.
B.
- Détruire (ou les déplacer dans un autre répertoire) tous les fichiers créés lors de la session antérieure
- Copier le fichier *.mts depuis la clé dans le dossier de travail dédié où l'on a mis les outils et les raccourcis
- Le renommer "brut.mts"
- Avant de lancer "ToutAuto_v20.bat" (c'est un truc de bleusaille, merci pour les suggestions d'améliorations), savoir que:
Le nettoyage utilise le fichier texte "segments.txt" contenant une ligne avec les sections selon le format MKVToolNix :.
hh:mm:ss.nnn-hh:mm:ss.nnn,+hh:mm:ss.nnn-hh:mm:ss.nnn,+....
Celui-ci peut-être créé en cours de route automatiquement avec Avidemux ou manuellement, alors après repérage à l'avance de différentes manières au choix (VidePub, MPC-HC, etc.) et formattage.
Le début du programme est interactif, à chaque étape, un choix est proposé par défaut, validé par "Enter" ou à modifier par la valeur désirée puis "Enter".
On a un certain droit au remord pour les modifications de paramètres, mais les fichiers déjà créés étant conservés, on gagne du temps pour les options modifiées quand on repart au début.
Les choix sont sommairement documentés.
Le redimensionnement des sous titres dépend des chaînes, j'y reviendrai : soit 0.5,0.5 soit 1,1
Déjà, en principe :
TF1 TMC F4 NT1 Chérie "-S 0.5,0.5"
F2 F3 C8 6ter Arte "-S 1,1"
Le repositionnement dépend du format de présentation du film. En "Cinemascope", choisir normalement 2.4, mais avec 1.8, les sous-titres sont sous l'image, ça peut être mieux si le lecteur l'accepte. Avec le format 1.8 (16:9), un offset de 40 peut-être utile : 1.8,40.
D'ailleurs cette affaire de sous-titres est pour moi une bouteille à encre, la présentation dépend du lecteur, j'ai donc implémenté un contrôle visuel par MPC-HC, dont il convient d'éditer le chemin d'installation dans le BAT et ensuite de le préconfigurer ainsi, après qu'il ait ouvert "brut.mts" :
Menu "Lecture" > Piste de sous-titres > Options > Divers : Cocher les deux premières cases "Préférer ..."
En tout état de cause, au coup par coup :
Menu "Lecture" > Piste de sous-titres > "English" ("English" à cause d'une bogue dans le BDsup2Sub...)
Si le résultat ne plaît pas, on peut reboucler sur les paramètres, l'exécution du "Java" dure peu de temps.
Il conviendra de se noter à l'usage à part personnellement pour ses lecteurs les réglages qui vont bien. par chaîne et selon le format du film.
Les traitements "longs" (ne pas s'inquiéter quand le contenu de la fenêtre n'évolue pas) sont l'indexation Avidemux, en général quelques minutes, parfois peu de dizaines, les transcodages Audio et surtout la création du SRT quand demandés (quelques dizaines de minutes sur un PC portable basique).
A la fin, une validation du fichier final est demandée pour traiter d'une troisième manière avec le GUI dans le cas où aucun des deux modes de traitement initiaux proposés ne donnerait un résultat correct. Un accès direct anticipé à ce 3ème mode est aussi possible.
Une fois obtenu le fichier nettoyé avec les options choisies, on peut vouloir encore lancer le GUI de MKVToolnix pour un re-multiplexage totalement personnalisé, avec pistes par défaut, forcées et d'éventuelles corrections de synchronisation entre autres.
Tous commentaires, observations, remarques, suggestions et autres retours sont bienvenus, merci