Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
extraire_sous-titres_video [Le 26/08/2015, 20:57] albanmartel [Algorithme] |
extraire_sous-titres_video [Le 11/09/2022, 12:17] (Version actuelle) moths-art Suppression des espaces en fin de ligne (détecté et corrigé via le bot wiki-corrector (https://forum.ubuntu-fr.org/viewtopic.php?id=2067892) |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | {{tag>Subtitles TS mkvextract SRT vidéo}} | + | {{tag>vidéo}} {{tag>ffmpeg}} {{tag>srt}} {{tag>Sous-titrage}}{{tag>vobsub2srt}} {{tag>mkvtoolnix}} |
- | ====== Script d'extraction des sous-titres d'une vidéo TS en SRT====== | + | ====== Extraction des sous-titres d'une vidéo ====== |
- | Script bash permettant de convertir un groupe de fichiers vidéos de même extension contenu dans un même répertoire et d'extraire ses sous-titre en fichier srt. | + | Scripts bash permettant de convertir plusieurs pistes de sous-titre vobsub d'une vidéo enregistrer sur la TNT par exemple et de les convertir en sous-titres texte .srt. |
- | <note>Contrairement aux idées reçu il ne suffit pas renommer l'extension d'un fichier TS (.ts) en MKV (.mkv) pour pouvoir l'extraire avec MKVToolnix-gui. | + | <note> L'extraction de sous-titres d'une vidéo multicanal demande d'identifier les canaux sous-titres puis d'effectuer une reconnaissance de caractère pour les transformer en fichiers srt (texte) moins volumineux et plus faciles à inclure dans un fichier vidéo mkv Matroska. |
- | FFMPEG le fait par contre très bien, cependant pour les canaux subtitles la commande copy doit être remplacée par dvdsub (qui permet de faire de copier des sous-titres) | + | |
</note> | </note> | ||
Ligne 14: | Ligne 13: | ||
Inspiré de l'algorithme : [[tutoriel:vobsub_srt|Conversion de sous-titres VobSub en SRT]] | Inspiré de l'algorithme : [[tutoriel:vobsub_srt|Conversion de sous-titres VobSub en SRT]] | ||
- | * étudier fichier TS contenant sous-titres vobsub avec ffmpeg | + | <note warning>Les 3 dernières étapes peuvent être réalisées avec vobsub2srt</note> |
- | * étudier les numéros des pistes "subtitles" | + | |
+ | * Repérer les canaux de sous-titres d'un fichier vidéo avec ffmpeg | ||
* extraire sous-titres vobsub dans une vidéos mastroika | * extraire sous-titres vobsub dans une vidéos mastroika | ||
* extraire les sous-titres des vidéos mastroïka avec mkvextract | * extraire les sous-titres des vidéos mastroïka avec mkvextract | ||
* convertir fichier .sub et .idx en tiff; | * convertir fichier .sub et .idx en tiff; | ||
* reconnaissance de caractère de chaque tiff avec cunéiform | * reconnaissance de caractère de chaque tiff avec cunéiform | ||
- | * création d'un fichier srt | + | * création d'un fichier srt |
- | ==== Exemple de séquence bash correspondant à l'algorithme ==== | + | ==== Script bash correspondant à l'algorithme ==== |
- | <file | bash> | + | [[https://raw.githubusercontent.com/albanmartel/dvsub2srt.bash/main/dvsub2srt.bash | dvsub2srt.bash]] |
+ | |||
+ | <file bash> | ||
+ | # !/bin/bash | ||
+ | # OUTPUT-COLORING | ||
+ | red=$( tput setaf 1 ) | ||
+ | green=$( tput setaf 2 ) | ||
+ | NC=$( tput sgr0 ) # or perhaps: tput sgr0 | ||
+ | #NC=$( tput setaf 0 ) # or perhaps: tput sgr0 | ||
+ | |||
+ | # Dépendances : ffmpeg, mkvtoolnix, vobsub2srt | ||
+ | # Signale quel programme l'on exécute | ||
+ | # puis la composition du répertoire où le script s'exécute | ||
+ | echo -e "programme pour extraire des canaux de sous-titres d'une vidéo\n | ||
+ | Composition du répertoire courant :\n | ||
+ | $(ls)" | ||
+ | |||
+ | # Invite de commande pour entrer le fichier vidéo à traiter | ||
+ | echo -n "Entrer le fichier vidéo choisi :"; | ||
+ | read film_a_traiter; | ||
+ | |||
+ | # Message pour informer l'utilisateur de son choix | ||
+ | echo -e "Le fichier vidéo choisi est : \n $film_a_traiter" | ||
+ | |||
+ | # Exemple film_a_traiter="RetourVersLeFutur2.mp4" | ||
+ | # film_a_traiter="RetourVersLeFutur2.mp4" | ||
+ | |||
+ | # soustitres_array= ("4|fra" "5|fra") | ||
+ | soustitres_array=($(ffprobe $film_a_traiter -v quiet -show_entries stream=index:stream_tags=language -select_streams s -of compact=p=0:nk=1)) | ||
+ | |||
+ | # metadata_sub="-map 0:4 -metadata:s:s:1 language=fra -map 0:5 -metadata:s:s:2 language=fra" | ||
+ | metadata_sub=$(for (( c=0; c<${#soustitres_array[@]}; c++)); do echo -map 0:$(echo ${soustitres_array[$c]} | cut -d "|" -f1) -metadata:s:s:$(($c + 1)) language=$(echo ${soustitres_array[$c]} | cut -d "|" -f2) ; done) | ||
+ | |||
+ | # command1="ffmpeg -i RetourVersLeFutur2.mp4 -map 0:4 -metadata:s:s:1 language=fra -map 0:5 -metadata:s:s:2 language=fra -c:s dvdsub sous_titres_RetourVersLeFutur2.mp4.mk" | ||
+ | command1=$(echo "ffmpeg -i $film_a_traiter $metadata_sub -c:s dvdsub sous_titres_$film_a_traiter.mkv") | ||
+ | |||
+ | # Execution commande n°1 $command1 | ||
+ | $command1 | ||
+ | |||
+ | # vobsub_piste="0:0_ 1:1_" | ||
+ | vobsub_piste=$(for (( c=0; c<${#soustitres_array[@]}; c++));do echo $c:$c"_"; done) | ||
+ | |||
+ | #command2="mkvextract tracks sous_titres_RetourVersLeFutur2.mp4.mkv -c ISO8859-1 0:0_ 1:1_" | ||
+ | command2=$(echo "mkvextract tracks sous_titres_$film_a_traiter.mkv -c ISO8859-1 $vobsub_piste") | ||
+ | |||
+ | # Execution commande n°2 $command2 | ||
+ | $command2 | ||
+ | |||
+ | # Exécution Roc des fichiers de sous-titres | ||
+ | #vobsub2srt 0_; vobsub2srt 1_;" | ||
+ | for (( c=0; c<${#soustitres_array[@]}; c++)); | ||
+ | do | ||
+ | vobsub2srt $c"_"; | ||
+ | done | ||
+ | exit 0; | ||
+ | </file> | ||
+ | |||
+ | ==== Ancien Exemple de séquence bash correspondant à l'algorithme ==== | ||
+ | |||
+ | <file bash> | ||
ffmpeg -i data0003.ts 2>&1 | grep subtitle | ffmpeg -i data0003.ts 2>&1 | grep subtitle | ||
mkdir data0003 | mkdir data0003 | ||
Ligne 37: | Ligne 96: | ||
</file> | </file> | ||
- | ==== Exemple de conversion de fichier TS en MKV avec FFMPEG ==== | + | ==== Exemple de conversion de fichier TS en MKV avec FFMPEG ==== |
La commande suivante permet d'obtenir l'info : <code>ffmpeg -i <vidéos étudiée> </code> | La commande suivante permet d'obtenir l'info : <code>ffmpeg -i <vidéos étudiée> </code> | ||
Ligne 64: | Ligne 123: | ||
</code> | </code> | ||
+ | <note>//-threads// pour pouvoir utiliser un traitement multiprocesseurs | ||
+ | |||
+ | -// map// pour spécifier toutes les pistes à utilisables | ||
+ | |||
+ | //-acodec// suivi de //copy// pour le traitements des pistes audio | ||
+ | |||
+ | //-vcodec// suivi de //copy// pour le traitement de la piste vidéo | ||
+ | // | ||
+ | -scodec// suivi de //dvdsub// pour le traitement des sous-titres | ||
+ | |||
+ | </note> | ||
===== dépendances à installer ===== | ===== dépendances à installer ===== | ||
Ligne 70: | Ligne 140: | ||
**[[apt>ffmpeg]]** - une collection de logiciels libres destinés au traitement de flux audio ou vidéo | **[[apt>ffmpeg]]** - une collection de logiciels libres destinés au traitement de flux audio ou vidéo | ||
- | **[[apt>mkvtoolnix]]** éventuellement aussi **[[apt>mkvtoolnix-gui]]** - un ensemble d'outils permettant de créer, de modifier et d'inspecter des fichiers Matroska | + | **[[apt>mkvtoolnix]]** éventuellement aussi **[[apt>mkvtoolnix-gui]]** - un ensemble d'outils permettant de créer, de modifier et d'inspecter des fichiers Matroska |
+ | |||
+ | **[[apt>vobsub2srt]]** - Commande de reconnaissance optique de caractères multi-langue pour extraire des sous-titres | ||
**[[apt>cuneiform]]** - Système de reconnaissance optique de caractères multi-langue | **[[apt>cuneiform]]** - Système de reconnaissance optique de caractères multi-langue | ||
Ligne 78: | Ligne 150: | ||
===== Script ts2srt ===== | ===== Script ts2srt ===== | ||
+ | |||
+ | <note warning>Script ancien : pas de gestion des erreurs de reconnaissances optiques</note> | ||
[[https://raw.githubusercontent.com/albanmartel/ts2srt/master/ts2srt.bash| ts2srt.bash]] | [[https://raw.githubusercontent.com/albanmartel/ts2srt/master/ts2srt.bash| ts2srt.bash]] | ||
Ligne 89: | Ligne 163: | ||
# Courriel : albanmartel(POINT)developpeur(AT)gmail(POINT)com | # Courriel : albanmartel(POINT)developpeur(AT)gmail(POINT)com | ||
# Utilisant comme base de travail le script de beguam | # Utilisant comme base de travail le script de beguam | ||
- | # http://doc.ubuntu-fr.org/tutoriel/vobsub_srt | + | # https://doc.ubuntu-fr.org/tutoriel/vobsub_srt |
# License : GNU GPL | # License : GNU GPL | ||
# Ce script permet d'extraire les sous-titres d'une video TS et de les transformer en SRT éditable. | # Ce script permet d'extraire les sous-titres d'une video TS et de les transformer en SRT éditable. | ||
# | # | ||
- | # Depends : | + | # Depends : |
# ffmpeg est une collection de logiciels libres destinés au traitement de flux audio ou vidéo | # ffmpeg est une collection de logiciels libres destinés au traitement de flux audio ou vidéo | ||
- | # mkvToolnix (interface graphique pour mkvmerge) est un ensemble d'outils permettant de créer, de modifier et d'inspecter des fichiers Matroska | + | # mkvToolnix (interface graphique pour mkvmerge) est un ensemble d'outils permettant de créer, de modifier et d'inspecter des fichiers Matroska |
# cuneiform - Système de reconnaissance optique de caractères multi-langue | # cuneiform - Système de reconnaissance optique de caractères multi-langue | ||
# ogmrip - Application pour extraire et encoder des DVDs | # ogmrip - Application pour extraire et encoder des DVDs | ||
Ligne 101: | Ligne 175: | ||
# Date : 26/08/2015 | # Date : 26/08/2015 | ||
# version : 0.1 | # version : 0.1 | ||
- | # Mise-à-jour : | + | # Mise-à-jour : |
# ---------------------------------------------------- | # ---------------------------------------------------- | ||
Ligne 163: | Ligne 237: | ||
videoFiles=($( ls *.$extension )); | videoFiles=($( ls *.$extension )); | ||
cd $courant_directory; | cd $courant_directory; | ||
- | } | + | } |