Concevoir un site comme celui-ci avec WordPress.com
Commencer

Sous-titrage complet d’un film.

  1. Process pas à pas.
    1. Création d’un fichier texte de sous-titre:
      1. Utilisation du script python autosub.
        1. Installation.
        2. Préparer un fichier wav normalisé.
        3. Créer le fichier sous-titre en texte.
          1. Contrôler la pertinence des sous-titres et modifier le fichier texte au mieux.
    2. Ajout des sous-titres en troisième piste dans le fichier vidéo:
    3. Incrustation du texte des sous-titres dans l’image:
      1. Texte en Georgia jaune de taille 24
  2. Script de sous-titrage
    1. Script inter-actif de sous-titrage avec texte en jaune.

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.
Anna-Christie.srt

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

Gnome subtitles

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;
Publicité

Par Bidouille De Bian

Bidouilleur sur Linux Debian 10 (Buster). Débutant dans le blog sur Wordpress.

%d blogueurs aiment cette page :