- Process pas à pas.
- Script de sous-titrage
Process pas à pas.
Création d’un fichier texte de sous-titre:
Utilisation du script python autosub.
J’utilise
https://github.com/Iucasmaia/autosub
Installation.
pip install autosubmaia
Noter que l’outil est installé dans ~/.local/bin qu’il faut ajouter dans le PATH pour y accéder directement.
autosub -h
usage: autosub [-h] [-C CONCURRENCY] [-o OUTPUT] [-W API_WITAI] [-F FORMAT] [-S SRC_LANGUAGE] [-D DST_LANGUAGE] [-K API_KEY]
[--list-formats] [--list-languages]
[source_path]
positional arguments:
source_path Path to the video or audio file to subtitle
options:
-h, --help show this help message and exit
-C CONCURRENCY, --concurrency CONCURRENCY
Number of concurrent API requests to make
-o OUTPUT, --output OUTPUT
Output path for subtitles (by default, subtitles are saved in the same directory and name as the source
path)
-W API_WITAI, --api-witai API_WITAI
The Wit.AI API key to be used. (Required for best transcriptions)
-F FORMAT, --format FORMAT
Destination subtitle format
-S SRC_LANGUAGE, --src-language SRC_LANGUAGE
Language spoken in source file
-D DST_LANGUAGE, --dst-language DST_LANGUAGE
Desired language for the subtitles
-K API_KEY, --api-key API_KEY
The Google Translate API key to be used. (Required for subtitle translation)
--list-formats List all available subtitle formats
--list-languages List all available source/destination languages
Préparer un fichier wav normalisé.
Après avoir extrait la piste audio avec Avidemux, par exemple.
ffmpeg -i Anna-Christie.aac -acodec pcm_s16le -ar 16000 -ac 1 -filter:a loudnorm Anna-Christie.wav
Créer le fichier sous-titre en texte.
~/Vidéos/Cinema$ autosub ./Anna-Christie.wav
On note environ 45 mn de traitement:
Converting speech regions to WAV files: 100% |#####################################################################| Time: 0:03:32
Performing speech recognition: 100% |##############################################################################| Time: 0:39:48
Subtitles file created at ./Anna-Christie.srt
Contrôler la pertinence des sous-titres et modifier le fichier texte au mieux.

Dans l’environnement Gnome il existe un bon outil pour créer, synchroniser, modifier le fichier sous-titre en temps réel avec la vision du film

https://gnomesubtitles.org/about
Faut dire que je n’ai pas choisi la facilité: Anna Christie premier film parlant de Greta Garbo en 1930. Bande son pourrie, personnages sâouls, accent suédois de Greta à couper au couteau…
Mais la reconnaissance vocale arrive à isoler des bribes de dialogue.
Ajout des sous-titres en troisième piste dans le fichier vidéo:
ffmpeg -i Anna-Christie.mkv -i Anna-Christie.srt -c:v copy -c:a copy -c:s mov_text -metadata:s:s:0 language=eng -disposition:s:1 default Anna-Christie.mp4
On note
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Stream #0:1 -> #0:1 (copy)
Stream #1:0 -> #0:2 (subrip (srt) -> mov_text (native))
NB: Avec ce fichier il faut que le lecteur vidéo détecte automatiquement la piste de sous-titre ou que l’utilisateur sache le faire par les menus du lecteur vidéo.
Incrustation du texte des sous-titres dans l’image:
ffmpeg -i Anna-Christie.mp4 -vf "subtitles=Anna-Christie.mp4 :si=0" Anna-Christie-st.mp4
On note
Output #0, mp4, to 'Anna-Christie-st.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.76.100
Stream #0:0(und): Video: h264 (avc1 / 0x31637661), yuv420p(progressive), 634x480 [SAR 1:1 DAR 317:240], q=2-31, 30 fps, 15360 tbn (default)
Metadata:
handler_name : VideoHandler
vendor_id : [0][0][0][0]
encoder : Lavc58.134.100 libx264
Side data:
cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)
Metadata:
handler_name : SoundHandler
vendor_id : [0][0][0][0]
encoder : Lavc58.134.100 aac
[Parsed_subtitles_0 @ 0x555e671aed40] fontselect: (Arial, 400, 0) -> /usr/share/fonts/truetype/msttcorefonts/Arial.ttf, 0, ArialMT
Si on veut changer la police de caractères des sous-titres, ajouter par exemple :force_style=Fontname=Georgia
ffmpeg -i 'Inspiration 1931-st.mp4' -vf "subtitles='Inspiration 1931-st.mp4' :si=0 :force_style=Fontname=Georgia" 'Inspiration 1931-st-incrust.mp4'
Texte en Georgia jaune de taille 24
Incrustation des sous-titres d’un fichier .srt
la couleur est encadré par & & deux ampersand
subtitles est encadré par " " double-quote
force_style= est encadré par ' ' simple code
(Ce qui donne l’mpression qu’il y a 3 côtes à la fin)
ffmpeg -i Pretty-Addio.mp4 -vf "subtitles=Pretty-Addio.srt:force_style='FontName=Georgia,Fontsize=24,PrimaryColour=&H0000FFFF&'" Pretty-Addio-incrust.mp4

Script de sous-titrage
Si on récupère un fichier .srt sur Internet il a souvent un format windows.
Il faut préalablement convertir en format linux avec gedit par exemple. Faire un save as en selectionnant les paramètres local actuelle (utf-8) et Unix/Linux
Script inter-actif de sous-titrage avec texte en jaune.
#!/bin/bash
#set -x
#
#
echo 'Donnez le nom du fichier sans extension, (mp4 et srt doivent exister)'
echo 'Exemple: Elisa, Matilda De Angelis - Litoranea '
read nom
#echo "$nom"
echo "Donnez la taille de la police"
read size
echo "Donnez la position du texte: haut ou bas"
read pos
echo Création du fichier "$nom"-st-"$size"-"$pos".mp4
if [ $"$pos" = bas ]
then
ffmpeg -hide_banner -i "$nom".mp4 -vf "subtitles='$nom'.srt:force_style='FontName=Georgia,Fontsize="$size",PrimaryColour=&H0000FFFF&'" -map_metadata -1 -c:a aac "$nom"-st-"$size"-"$pos".mp4
else
# en haut
ffmpeg -hide_banner -i "$nom".mp4 -vf "subtitles='$nom'.srt:force_style='Alignment=6,FontName=Georgia,Fontsize="$size",PrimaryColour=&H0000FFFF&'" -map_metadata -1 -c:a aac "$nom"-st-"$size"-"$pos".mp4
fi;