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 | ||
sous-titrage [Le 20/02/2010, 19:18] ignace72 |
sous-titrage [Le 11/09/2022, 12:03] (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>portail multimédia vidéo BROUILLON}} | + | {{tag>portail multimédia vidéo sous-titrage}} |
---- | ---- | ||
Ligne 9: | Ligne 9: | ||
=====Visualisation de sous-titres===== | =====Visualisation de sous-titres===== | ||
- | * [[Totem]] : lecteur multimédia permettant de visualiser les sous-titres (menu Visualisation -> Sous-titres) | + | * [[:Totem]] : lecteur multimédia permettant de visualiser les sous-titres (menu Visualisation -> Sous-titres) |
- | * [[VLC]] : lecteur multimédia permettant de visualiser les sous-titres (menu Vidéo -> Piste de sous-titres, ou automatiquement si le fichier de sous-titres a le même nom que le fichier video -extension exceptée-, et se situe dans le même répertoire). | + | * [[:VLC]] : lecteur multimédia permettant de visualiser les sous-titres (menu Vidéo -> Piste de sous-titres, ou automatiquement si le fichier de sous-titres a le même nom que le fichier vidéo -extension exceptée-, et se situe dans le même répertoire). |
+ | * [[:mplayer]] : lecteur multimédia permettant de visualiser les sous-titres | ||
+ | * [[:xine]] : lecteur multimédia permettant de visualiser les sous-titres | ||
=====Création de sous-titrages===== | =====Création de sous-titrages===== | ||
- | * [[Gnome-subtitles]] : logiciel de sous-titrage de Gnome | + | ^ Logiciel ^ Remarques ^ Affiche le nombre de caractères par ligne (a) ^ Affiche une visualisation des ondes audio (b) ^ |
- | * [[Gaupol subtitle editor]] : installable via la logithèque Ubuntu | + | | [[:Aegisub]] | spécialisé dans le fansub d'anime. Installable via la logithèque Ubuntu | Non | Oui | |
- | * [[Subtitle editor]] : installable via la logithèque Ubuntu | + | | **Gaupol subtitle editor** | Installable via la logithèque Ubuntu | Oui | Non | |
- | * [[http://blog.aegisub.org/|Aegisub]] : éditeur de sous-titres pour vidéos, spécialisé dans le fansub d'anime. | + | | [[:Gnome-subtitles]] | Installable via la logithèque Ubuntu (Sauf [[bionic|ubuntu 18.04]]) | Oui | Non | |
+ | | **[[apt>subtitleeditor|Subtitle editor]]** | Installable via la logithèque Ubuntu | Oui | Oui | | ||
+ | |||
+ | (a) Pratique pour savoir si la lecture du sous-titre sera trop difficile car le ratio nbre de caractère / temps est trop élevé. [[wpfr>Sous-titrage| L'article de Wikipedia sur le sous-titrage]] recommande 1s pour 15 caractères. | ||
+ | |||
+ | (b) Pratique pour caler facilement et précisément le début et la fin d'un sous-titre. | ||
+ | |||
+ | =====Extraction de sous-titres===== | ||
+ | |||
+ | * [[:Avidemux]] pour extraire les sous-titres d'un DVD. (Menu Outils : VOB > .srt , etc.) | ||
+ | * les [[:matroska|outils mkv]] (mkvmerge, mkvextract) ou l'interface graphique [[:mkv_extractor_gui_v4]] | ||
+ | |||
+ | =====Intégration de sous-titres===== | ||
+ | |||
+ | * [[:avidemux#incruster_des_sous-titres|Avidemux]] | ||
+ | * [[:mencoder#integration_sous_titres_srt_dans_une_video|Mencoder]], en ligne de commande | ||
+ | * [[:mmg|MkvMerge Gui]] ou [[:mkvtoolnix]], pour le format [[matroska|mkv]]. | ||
+ | * [[:handbrake#choisir_la_langue_et_les_sous-titres|Handbrake]], tous formats, | ||
+ | |||
+ | * Nécessite d'être en super-utilisateur pour Avidemux | ||
+ | =====Téléchargement de sous-titres===== | ||
+ | |||
+ | * [[:Subdownloader]] : installable via la logithèque Ubuntu | ||
+ | * [[http://code.google.com/p/gcap/|Gcap]] : un logiciel en ligne de commande pour télécharger les sous-titres de YouTube (présent dans les dépôts depuis Ubuntu 11.10) | ||
+ | * [[https://www.webeev.fr/top/top-10-des-meilleurs-sites-de-sous-titres-de-films-et-series-tv/|Webeev]] : le classement des meilleurs sites pour télécharger des sous-titres | ||
+ | * [[:Subliminal]] : un script qui permet de télécharger les sous-titres depuis plusieurs sources. Il existe un plugin pour //Nautilus/Fichiers//. | ||
+ | |||
+ | =====Conversion de sous-titres===== | ||
+ | * **[[apt>subtitleeditor]]**: logiciel avec interface graphique installable via la logithèque Ubuntu. Supporte 11 formats différents, dont SubRip, MicroDVD et Advanced Sub Station Alpha. | ||
+ | * [[:srt2ass]] : script python permettant de convertir en ligne de commande une grande quantité de fichiers SubRip (srt) vers le format Advanced Sub Station Alpha (ass/ssa) | ||
+ | * [[ffmpeg|FFmpeg]] : cet outil à tout faire, en ligne de commande, permet également de [[https://ffmpeg.org/general.html#Subtitle-Formats|convertir certains formats de sous-titres]]: dvbn dvd, ass/ssa, srt, webvtt... | ||
+ | |||
+ | =====Spécial : Sous titres simultanés===== | ||
+ | |||
+ | J'ajoute personnellement cette astuce permettant de visualiser 2 sous titres simultanément après avoir très longuement cherché sur internet. | ||
+ | Ceci est un script (corrigé) trouvé sur internet ayant comme nom : merge2ass.sh. Le script convertit 2 fichiers sous titre en 1 .ass (équivalent au .ssa). Votre lecteur vidéo doit être en mesure de lire ce fichier sous titre (VLC l'accepte) | ||
+ | |||
+ | La commande est la suivante : | ||
+ | <code>merge2ass.sh [--help] [movie subtitle1 subtitle2] [-pm|--play-movie]</code> | ||
+ | |||
+ | <note>subtitle1 est le sous titre positionné en haut de la vidéo | ||
+ | |||
+ | subtitle2 est le sous titre positionné en bas de la vidéo</note> | ||
+ | |||
+ | <file bash merge2ass.sh> | ||
+ | #!/bin/bash | ||
+ | # merge2ass.sh - script for merging two text-subtitles into an ass subtitle file | ||
+ | # version 0.9, 8-august-2007 | ||
+ | # comments/criticism/praise to jose1711-gmail-com | ||
+ | |||
+ | # dependencies: mplayer (if your subtitle files need to be converted to srt), gnu utils | ||
+ | |||
+ | # thanks to: | ||
+ | # - d.watzke for comments | ||
+ | # - belisarivs for testing | ||
+ | # - boris dušek <boris (dot) dusek - gmail - com> for testing/ideas | ||
+ | # | ||
+ | # $1 is a movie file | ||
+ | # $2 is a subtitle1 | ||
+ | # $3 is a subtitle2 | ||
+ | # $4 is optional and could be "-pm" or "--play-movie" for instant watching of the movie | ||
+ | |||
+ | # example: | ||
+ | # merge2ass.sh movie.avi english.srt slovak.sub | ||
+ | # mplayer -noautosub -ass movie.avi -sub movie-bilingual.ass -subcp utf8 | ||
+ | # | ||
+ | # or just | ||
+ | # merge2ass.sh movie.avi english.srt slovak.sub -pm | ||
+ | # | ||
+ | # or even only | ||
+ | # merge2ass.sh --detect movie.avi -pm | ||
+ | # | ||
+ | # ;-) | ||
+ | # | ||
+ | # release history: | ||
+ | # 0.8a (29. 7. 2007) | ||
+ | # - initial public release | ||
+ | # 0.8.1a (30. 7. 2007) | ||
+ | # - check_syntax fixed (d.watzke) | ||
+ | # - multiline echo -> cat (d.watzke) | ||
+ | # - removes temp files after conversion | ||
+ | # 0.8.2 (1. 8. 2007) | ||
+ | # - check whether the input files exist prior to running MPlayer | ||
+ | # - check for MPlayer binary | ||
+ | # - help page added | ||
+ | # - new optional CLI parameters: -pm (plays movie after conversion), --help | ||
+ | # 0.8.2.1 (2. 8. 2007) | ||
+ | # - timestamp in output more compatible (reported by belisarivs) | ||
+ | # 0.9 (8. 8. 2007) | ||
+ | # - performs a check for writable output | ||
+ | # - check for MPlayer's support of ass/ssa if -pm is used | ||
+ | # - pointers to subtitle files stored as arrays | ||
+ | # - autorecognition of subtitles based on MPlayer's -sub-fuzziness feature (--detect) | ||
+ | # - output filename based on movie filename (+bilingual.ass) | ||
+ | # - bash now mandatory (non-POSIX syntax used) | ||
+ | # - flag -pm has a long alias (--play-movie) | ||
+ | |||
+ | # | ||
+ | # some future thoughts: | ||
+ | # - more optional flags (do_not_remove_temp_files, play_but_dont_delete_output_afterwards,dont_do | ||
+ | # the_conversion_just_merging,output_file..) | ||
+ | # - cleaner sed/awk code | ||
+ | # - support for other players (xine, totem, kmplayer, vlc..) | ||
+ | # - subtitle encoding detection based on enca (if present) - boris? | ||
+ | # | ||
+ | # docs: | ||
+ | # - https://en.wikipedia.org/wiki/SubStation_Alpha | ||
+ | # - http://www.perlfu.co.uk/projects/asa/ass-specs.doc | ||
+ | # | ||
+ | # THE STORY ENDS HERE | ||
+ | # set -x | ||
+ | |||
+ | # normally you do not want to see mplayer's error output | ||
+ | #mplayer_err=/dev/stderr | ||
+ | mplayer_err=/dev/null | ||
+ | |||
+ | arg_count="$#" | ||
+ | movie="$1" | ||
+ | sub[1]="$2" | ||
+ | sub[2]="$3" | ||
+ | |||
+ | |||
+ | show_help(){ | ||
+ | cat << EOF | ||
+ | ---------------------------------------------------------------------------------- | ||
+ | | | | ||
+ | | Merge2ass - a script for merging two text subtitles into ass/ssa subtitle file | | ||
+ | | author: jose1711 - gmail - com, 2007/08 | | ||
+ | ---------------------------------------------------------------------------------- | ||
+ | |||
+ | Usage: merge2ass.sh [--help] [movie subtitle1 subtitle2] [-pm|--play-movie] | ||
+ | |||
+ | or | ||
+ | |||
+ | merge2ass.sh --detect movie [-pm|--play-movie] | ||
+ | |||
+ | --help show this help page and exit | ||
+ | |||
+ | --detect try to detect subtitles using MPlayer's sub-fuzziness=1 flag | ||
+ | |||
+ | movie movie file (anything that MPlayer recognizes) | ||
+ | subtitle[12] file(s) containing text subtitles that MPlayer recognizes | ||
+ | |||
+ | -pm play movie immediately and remove the output after finishing | ||
+ | --play-movie | ||
+ | |||
+ | EOF | ||
+ | } | ||
+ | |||
+ | detect_subtitles(){ | ||
+ | while read -r line; do | ||
+ | sub[++i]="$line" | ||
+ | done < <(mplayer -sub-fuzziness 1 -frames 0 "$movie" 2>/dev/null | sed -n "s/^SUB: Added subtitle file ([0-9]*): \(.*\)$/\1/p") | ||
+ | echo "$i subtitles were detected in total." | ||
+ | echo "These two will be used:" | ||
+ | echo "${sub[1]}" | ||
+ | echo "${sub[2]}" | ||
+ | } | ||
+ | |||
+ | convert_subs(){ | ||
+ | type mplayer || { echo "MPlayer not installed or binary not in path, please investigate. Exiting.."; exit 1; } | ||
+ | |||
+ | echo "Converting the 1st subtitle file (${sub[1]}) to a time-based format..." | ||
+ | # slower but does not require the video file for conversion | ||
+ | # mplayer /dev/zero -rawvideo pal:fps=25 -demuxer rawvideo -vc null -vo null -noframedrop -benchmark -sub "$movie" -dumpsrtsub | ||
+ | mplayer -dumpsrtsub -noautosub -really-quiet -frames 0 -sub "${sub[1]}" "$movie" 2>>"$mplayer_err" && echo "Done" | ||
+ | mv dumpsub.srt "${sub[1]}-temp" | ||
+ | echo "Converting the 2nd subtitle file (${sub[2]}) to a time-based format..." | ||
+ | mplayer -dumpsrtsub -noautosub -really-quiet -frames 0 -sub "${sub[2]}" "$movie" 2>>"$mplayer_err" && echo "Done" | ||
+ | mv dumpsub.srt "${sub[2]}-temp" | ||
+ | } | ||
+ | |||
+ | generate_ssa_header(){ | ||
+ | cat > "$output" << EOF | ||
+ | [Script Info] | ||
+ | Title: | ||
+ | Original Script: | ||
+ | Original Translation: | ||
+ | Original Editing: | ||
+ | Original Timing: | ||
+ | Original Script Checking: | ||
+ | ScriptType: v4.00 | ||
+ | Collisions: Normal | ||
+ | PlayResY: 1024 | ||
+ | PlayDepth: 0 | ||
+ | Timer: 100,0000 | ||
+ | |||
+ | [V4 Styles] | ||
+ | Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, TertiaryColour, BackColour, Bold, Italic, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, AlphaLevel, Encoding | ||
+ | Style: lang1style,Arial,64,65535,65535,65535,-2147483640,-1,0,1,3,0,6,30,30,30,0,0 | ||
+ | Style: lang2style,Arial,64,15724527,15724527,15724527,4144959,0,0,1,1,2,2,5,5,30,0,0 | ||
+ | |||
+ | [Events] | ||
+ | Format: Marked, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text | ||
+ | EOF | ||
+ | } | ||
+ | |||
+ | generate_ssa_dialogs(){ | ||
+ | sed -e "/ --> /s/,/./g" "${sub[1]}-temp" | tr -d "\r" | awk 'BEGIN{ORS="";print " "} / --> /,/^$/ {ORS=" ";print} /^$/{print "\n"}' | sed -e "s/ --> /,/g" -e "s/^ \([^ ]*\) \(.*\)/Dialogue: Marked=0,\1,lang1style,Cher,0000,0000,0000,,\2/" -e "s/,00:/,0:/g" -e "s/\([:,]\)0\([0-9]\)/\1\2/g" -e "s/\([0-9]\)\(.\)\([0-9]\)\([0-9]\)0\(,\)/\1\2\3\4\5/g" >>"$output" | ||
+ | sed -e "/ --> /s/,/./g" "${sub[2]}-temp" | tr -d "\r" | awk 'BEGIN{ORS="";print " "} / --> /,/^$/ {ORS=" ";print} /^$/{print "\n"}' | sed -e "s/ --> /,/g" -e "s/^ \([^ ]*\) \(.*\)/Dialogue: Marked=0,\1,lang2style,Cher,0000,0000,0000,,\2/" -e "s/,00:/,0:/g" -e "s/^ *//g" -e "s/\([:,]\)0\([0-9]\)/\1\2/g" -e "s/\([0-9]\)\(.\)\([0-9]\)\([0-9]\)0\(,\)/\1\2\3\4\5/g" >>"$output" | ||
+ | } | ||
+ | |||
+ | remove_temp_files(){ | ||
+ | rm "${sub[1]}-temp" "${sub[2]}-temp" | ||
+ | } | ||
+ | |||
+ | play_movie(){ | ||
+ | mplayer -ass 2>/dev/null >/dev/null || { echo "Too old MPlayer version, can't understand ASS/SSA subs. Install a newer version."; exit 1; } | ||
+ | mplayer -really-quiet -fs "$movie" -sub "$output" -ass -subcp utf8 -noautosub | ||
+ | } | ||
+ | |||
+ | delete_output(){ | ||
+ | rm "$output" | ||
+ | } | ||
+ | |||
+ | eval last_arg='$'${arg_count} | ||
+ | |||
+ | if [ $arg_count -eq 0 ]; then | ||
+ | show_help | ||
+ | exit 0 | ||
+ | fi | ||
+ | |||
+ | for param in $* | ||
+ | do | ||
+ | if [ $param = "--help" ]; then show_help; exit 0; fi | ||
+ | done | ||
+ | |||
+ | if [ "$movie" = "--detect" ]; then | ||
+ | movie="${sub[1]}" | ||
+ | output="${movie%.*}-bilingual.ass" | ||
+ | > "$output" #|| { echo "Can't write here! Exiting.." && echo 1; } | ||
+ | detect_subtitles | ||
+ | fi | ||
+ | |||
+ | if [ ! -f "$movie" ]; then echo "Movie file ($movie) does not exist. Going back to shell.."; exit 1; fi | ||
+ | if [ ! -f "${sub[1]}" ]; then echo "Subtitle1 file (${sub[1]}) does not exist. Going back to shell.."; exit 1; fi | ||
+ | if [ ! -f "${sub[2]}" ]; then echo "Subtitle2 file (${sub[2]}) does not exist. Going back to shell.."; exit 1; fi | ||
+ | |||
+ | echo "Processing.." | ||
+ | # reset output | ||
+ | output="${movie%.*}-bilingual.ass" | ||
+ | > "$output" #|| { echo "Can't write here! Exiting.." && echo 1; } | ||
+ | |||
+ | convert_subs | ||
+ | generate_ssa_header | ||
+ | generate_ssa_dialogs | ||
+ | remove_temp_files | ||
+ | |||
+ | if [ "$last_arg" = "-pm" -o "$last_arg" = "--play-movie" ]; then | ||
+ | play_movie | ||
+ | delete_output | ||
+ | fi | ||
+ | |||
+ | exit 0 | ||
+ | |||
+ | # set +x | ||
+ | </file> | ||
+ | |||
+ | Une solution open-source existe en ligne (également distribuée sous forme de jar exécutable) : [[https://www.submerge.ovh/|site]], [[https://github.com/dnbn/submerge/|github]] | ||
=====Liens===== | =====Liens===== | ||
- | * Discussion "[[http://forum.ubuntu-fr.org/viewtopic.php?id=363195|Sous-titrage de vidéo pour karaoke]]" sur le forum ubuntu-fr | + | * Discussion "[[https://forum.ubuntu-fr.org/viewtopic.php?id=363195|Sous-titrage de vidéo pour karaoke]]" sur le forum ubuntu-fr |
+ | * [[:tutoriel:vobsub_srt|Tutoriel de conversion de sous-titres VobSub en SRT]] |