Ripper un DVD

Le seul préalable :

# apt install ffmpeg

Tout d'abord, on concatène les fichiers VOB qui nous intéresse après avoir monter le DVD :

# mount /dev/sr0 /mnt

$ cat /mnt/VIDEO_TS/VTS_01_1.VOB /mnt/VIDEO_TS/VTS_01_2.VOB /mnt/VIDEO_TS/VTS_01_3.VOB /mnt/VIDEO_TS/VTS_01_4.VOB > /home/user/Vidéos/monfilm.VOB

On repère les flux vidéos (généralement le 1), audios et sous-titres :

$ ffmpeg -i monfilm.VOB

Le flux vidéo est généralement le premier, on repère ensuite les flux audio et le flux de sous-titre si besoin. Ici, on suppose que l flux video est 0:1, les flux audios 0:10 (cantonnais) et 0:11 (français). Le flux sous-titre est le 0:3.

On encode ainsi :

$ ffmpeg -i monfilm.VOB -map 0:1 -map 0:10 -map 0:11 -map 0:3 -c:v libx264 -preset slow -crf 16 -c:a copy -c:s copy -metadata:s:a:0 language=yue -metadata:s:a:1 language=fra -metadata:s:s:0 language=fra mon_film.mp4

-map 0:1 donne l'ordre des flux de la future vidéo. Le premier flux sera la vidéo (flux 0:1 du DVD), le deuxième sera l'audio en cantonnais (flux 0:10) puis l'audio en français (0:11) et enfin les sous-titres (0:3).

-c:v libx264 : le codec vidéo sera h264

-c:a copy : on copie le flux audio

-c:s copy : on copie le flux de sous-titres

-preset veryslow : vitesse d'encodage, inversement proportionnelle à la qualité de l'image. Les options sont : ultrafast, superfast, fast, medium, slow, slower, veryslow. Medium est le réglage par défaut.

-crf : définit le niveau de qualité (q). L'échelle va de 0 à 51 (petit nombre = + de temps de calcul)

-metadata:s:a:0 : définit la metadata du flux audio 0 (a:0) avec language =yue (cantonnais), même chose pour le a:1 en français

-metadata:s:s:0 définit la langue des sous-titres (français)

Puis, en dernier, le nom du fichier en sortie.

Une alternative pour encoder en bitrate variable et en deux passes :

ffmpeg -i input.VOB -c:v libx264 -b:v 2000k -pass 1 -an -f null /dev/null && ffmpeg -i input.VOB -c:v libx264 -b:v 2000k -pass 2 -c:a aac-b:a 128k c:s copy output.mp4

En cas d'erreur, remplacer -na par -vsync cfr

La doc complète : https://ffmpeg.org/documentation.html dont le wiki : https://trac.ffmpeg.org/

Une autre doc : https://forum.hardware.fr/hfr/VideoSon/Traitement-Video/encodage-ffmpeg-dummies-sujet_154546_1.htm

Ripper un DVD

Encodage de sous-titres (Handbrake défaillant)

Sur ubuntu :

apt install ffmpeg ogmrip tesseract-ocr tesseract-ocr-fra subtitleeditor

Disposer des infos avec ffmpeg :

ffmpeg -i VTS_01_1.VOB

Récupérer les .idx et .sub pour le titre 1:

mencoder dvd://1 -nosound -ovc frameno -o /dev/null -vobsuboutindex 0 -sid 0 -vobsubout nom_du_fichier

Le sid est la piste à lire, elle sera passée en sid 0 par l'instruction vobsuboutindex.
Script d'ocr (Tesseract.sh) à placer dans le dossier (le paquet tesseract-ocr-fra est nécessaire):

#!/bin/bash

NPROC=$(nproc --all| awk '{ print $1 - 1 }') # Set number of processor
for fichier in *.tif
do
(
echo "$fichier"
tesseract "$fichier" "$fichier" -l fra --psm 6 &>/dev/null
) &
if [[ $(jobs -r -p | wc -l) -gt $NPROC ]]; then
wait -n
fi
done
wait

Création des fichiers tiff et du xml indexé :

subp2tiff --sid=0 -n nom_du_fichier

On lance le script qui va océriser les fichiers:

./Tesseract.sh

C'est long.

On assemble les fichiers txt et l'index xml :

subptools -s -w -t srt -i nom_du_fichier.xml -o nom_du_fichier.srt

Normalement, le tour est joué.

Encodage de sous-titres (Handbrake défaillant)