Transcodage et rippage de DVD
Dernière modification 7 mars 2014
(ce document est disponible au format pdf dans la rubrique
téléchargement)
Présentation
Les outils présentés dans cette page permettent de
transcoder des fichiers vidéo, c'est à dire changer le
format (vidéo/audio) d'une vidéo, et de ripper des DVD
pour en faire des fichiers vidéo de moindre taille.
Un cas pratique est de prendre un fichier au format MPEG2 (DVD par
exemple)
et de le convertir au format DivX ou vice-versa.
Pour ces outils on veillera à installer les bibliothèques
de
base présentées dans la page
les outils de base
pour
la vidéo.
Jusqu'à présent un outil comme
transcode
dominait le secteur, il n'est visiblement plus maintenu, on doit
maintenant l'installer après l'avoir patché, il faudra se retourner
vers des outils comme
Handbrake ou
mencoder. Comme
dvd::rip est basé sur transcode, il est également en perte de vitesse.
Dernière précision, cette page n'a pas pour vocation de faire
l'apologie de la copie pirate de DVD, personnellement j'ai le besoin de
faire une copie de mes DVD pour d'une part faire une sauvegarde en cas
de détérioration du disque et d'autre part pour pouvoir visualiser le
film sur un lecteur embarqué (dans la voiture par exemple). Je rajoute
que le droit à la
copie privée
existe, en contrepartie de ce droit nous payons une taxe sur les
consommables informatiques (disque dur, DVD, etc.) et appareils
multimédia.
Transcodage
Transcode
Installation
Transcode est un outil très puissant pour l'encodage
vidéo.
On le récupère à l'URL
https://bitbucket.org/france/transcode-tcforge/downloads/transcode-1.1.7.tar.bz2 On décompresse l'archive en tapant
tar xvfz transcode-1.1.7.tar.gz
Cela donne le répertoire
transcode-1.1.7 dans lequel on
tape on applique le patch trouvé par ici
http://www.linuxfromscratch.org/patches/downloads/transcode/transcode-1.1.7-ffmpeg-2.patch en tapant dans le répertoire de transcode (le patch est placé à un niveau plus haut)
patch -Np1 -i ../transcode-1.1.7-ffmpeg-2.patch
on tape ensuite
./configure
--enable-ffmpeg --enable-libavcodec --enable-libavformat
--enable-libmpeg2 --enable-v4l
--enable-lame --enable-ogg --enable-vorbis --enable-theora
--enable-libdv --enable-libquicktime --enable-mjpegtools --enable-libxml2 --enable-sdl
--enable-xvid --enable-faac --enable-x264 --enable-a52 --enable-libmpeg2convert
Voilà le
résultat
----------------------------------------
Summary for transcode 1.1.7:
----------------------------------------
core options
----------------------------------------
enable experimental code no
enable deprecated code no
static AV-frame buffering yes
A52 default decoder yes
FFmpeg support yes
hardware support
----------------------------------------
v4l (legacy) no
v4l2
yes
ALSA
no
OSS
no
bktr
no
sunau
no
optional module support
----------------------------------------
PV3
no
NuppelVideo no
optional package support
----------------------------------------
IBP (libxio) no
X11
yes
Xv extension no
Xshm extension yes
Xaw library no
Xpm library no
libavcodec
yes
libavformat
yes
libv4l2
no
libv4lconvert no
libmpeg2
yes
libmpeg2convert yes
libpostproc no
freetype2
no
lame
yes
xvid
yes
x264
yes
ogg
yes
vorbis
yes
theora
yes
libdv----------------------------------------
Summary for transcode 1.1.7:
----------------------------------------
core options
----------------------------------------
enable experimental code no
enable deprecated code no
static AV-frame buffering yes
A52 default decoder yes
FFmpeg support yes
hardware support
----------------------------------------
v4l (legacy) no
v4l2
yes
ALSA
no
OSS
no
bktr
no
sunau
no
optional module support
----------------------------------------
PV3
no
NuppelVideo no
optional package support
----------------------------------------
IBP (libxio) no
X11
yes
Xv extension no
Xshm extension yes
Xaw library no
Xpm library no
libavcodec
yes
libavformat
yes
libv4l2
no
libv4lconvert no
libmpeg2
yes
libmpeg2convert no
libpostproc no
freetype2
no
lame
yes
xvid
yes
x264
yes
ogg
yes
vorbis
yes
theora
yes
libdvdread
yes
pvm3
no
libdv
yes
libquicktime yes
lzo
no
a52
yes
faac
yes
libxml2
yes
mjpegtools
yes
sdl
yes
imagemagick no
libjpeg
yes
bsdav
no
iconv
yes
dread
yes
pvm3
no
libdv
no
libquicktime yes
lzo
no
a52
yes
faac
yes
libxml2
yes
mjpegtools
yes
sdl
yes
imagemagick no
libjpeg
yes
bsdav
no
iconv
yes
sur config 64 bits, s'il ne trouve pas xvid, il faut rajouter au fichier configure à chaque occurence de -lxvidcore le terme suivant -lpthread et relancer configure
on tape ensuite make si vous avez l'erreur suivante
export_ffmpeg.c:1252:33: error: 'const struct AVCodec' has no member named 'encode'
il faut éditer le fichier suivant export/export_ffmpeg.c et à la ligne 1252 au lieu de
if (lavc_venc_context->codec->encode == NULL) {
on met
if (lavc_venc_context->codec->encode2 == NULL) {
puis l'erreur suivante
export_ffmpeg.c:838:22: error: 'AVCodecContext' has no member named 'luma_elim_threshold'
export_ffmpeg.c:839:22: error: 'AVCodecContext' has no member named 'chroma_elim_threshold'
export_ffmpeg.c:870:22: error: 'AVCodecContext' has no member named 'inter_threshold'
on édite le fichier ./export/export_ffmpeg.c et on met en commentaires les lignes 838, 839 et 870. Pour l'erreur suivante
ffmpeg_cfg.c:218:54: error: 'CODEC_FLAG_CBP_RD' undeclared here (not in a function)
ffmpeg_cfg.c:221:57: error: 'CODEC_FLAG_QP_RD' undeclared here (not in a function)
on édite le fichier ./export/ffmpeg_cfg.c et on met en commentaires les lignes 218 et 221. Pour l'erreur suivante
transcode-1.1.7/import/decode_lavc.c:173: undefined reference to `avcodec_alloc_context'
on édite le fichier import/decode_lavc.c au lieu de
lavc_dec_context = avcodec_alloc_context();
on écrit
AVCodec *codec1;
lavc_dec_context = avcodec_alloc_context3(codec1);
Pour l'erreur suivante
transcode-1.1.7/import/decode_lavc.c:190: undefined reference to `avcodec_open'
on édite le fichier import/decode_lavc.c et au lieu de
if (avcodec_open(lavc_dec_context, lavc_dec_codec) < 0) {
tc_log_error(__FILE__, "Could not initialize the '%s' codec.",
codec->name);
goto decoder_error;
}
on écrit
AVDictionary **options;
if (avcodec_open2(lavc_dec_context, lavc_dec_codec, options) < 0) {
tc_log_error(__FILE__, "Could not initialize the '%s' codec.",
codec->name);
goto decoder_error;
}
on retape make puis en tant
que root
make install
On édite le fichier /etc/ld.so.conf et on rajoute la ligne
/usr/local/lib/transcode
On tape alors
ldconfig
Utilisation
Commande simple pour convertir un fichier MPEG2 en xvid.
transcode -i fichier.mpeg -o toto.avi -y xvid
La syntaxe est la suivante
-i fichier en entrée
-o fichier en sortie
-y codec à utiliser
Autre exemple, en imposant une dimension d'image et un certain bitrate.
transcode -i fichier.mpeg -o toto.avi -y xvid -Z 512x288 -w 910
-Z L*H dimension de l'image, attention L et H doivent être
multiples
de 32
-w bitrate
Dernier exemple, on réduit la taille initiale de l'image par 2
en
conservant les proportions
transcode -i fichier.mpeg -o toto.avi -y xvid -r 2,2 -w 800
-r facteur de réduction (hauteur et largeur)
Si votre vidéo se retrouve la tête en bas, rajoutez
l'option
-z
Si les couleurs sont pas terribles, en rajoutant les options -C 1 -k, ça peut
améliorer
grandement les choses.
Autre exemple, pour créer un xvid à partir d'un fichier
MPEG2
(DVD), vous pouvez écrire ce petit script
#!/bin/bash
if [ $# -eq 2 ]
then
echo "Premiere passe"
transcode -i $1 -o /dev/null -x mpeg2,null -y xvid -V -Z 480x384 -w
1700
-R 1
echo "deuxieme passe"
transcode -i $1 -o $2 -x mpeg2 -y xvid -V -Z 480x384 -w 1700 -R 2
else
echo "usage de $0 fichierentree(format MPEG2) fichiersortie(XVID)"
fi
Il procède en deux passes, à noter que la taille et le
baud
rate ont été fixés de manière à ce
que
le fichier soit lisible sur ma platine DVD Yamada ! A vous de
décliner
ce script suivant vos besoins, vous n'avez en pratique qu'à
toucher
au codec utilisé (-y), au format de l'image (-Z) et au baudrate
(-w).
N'hésitez pas à consulter le man qui est bien
détaillé
et l'aide fournie avec le logiciel.
dvd::rip
Présentation
dvd::rip est une interface graphique à transcode
qui
vous permet très simplement de copier des DVD. Vu que transcode
est un peu maintenant laissé à l'abandon il n'est pas capable de
contourner les protections récentes mises en place pour protéger les
DVD.
Installation
L'URL officiel est
http://exit1.org/dvdrip/ on y récupère l'archive qu'on décompresse en tapant
tar xvfz dvdrip-0.98.11.tar.gz
Cela donne le répertoire dvdrip-0.98.11
Pour
une Mandriva/Mageia on
veillera
à
ce que les packages fping
(pour le mode cluster), perl-GTK-GdkPixbuf
et libnetpbm-devel
(urpmi) soient
installés. Pour fping dvd::rip
s'attend à le trouver
à un endroit différent de là où il est
réellement, on crée un lien en conséquence
ln -s /bin/fping /usr/sbin/fping
Pour une (k)ubuntu on installera les packages
libgtk-perl
libgtk2-perl
libgdk-pixbuf-perl
libpng3
fping
libevent-perl
anyevent-perl
gtk2-ex-formfactory-perl
libevent-execflow-perl
imagemagick
xvid4conf
lsdvd
pour une Mandriva cela donne
perl-AnyEvent
perl-Event
perl-Event-RPC
perl-Event-ExecFlow
perl-Gtk2-Ex-FormFactory
Par
ailleurs on doit installer le soft permettant de gérer les sous
titres, on le trouve sur ce site http://subtitleripper.sourceforge.net on décompresse l'archive en tapant
tar xvfz subtitleripper-0.3-4.tgz
Cela donne le répertoire subtitleripper
sur une ubuntu il faudra éventuellement installer le package lib64netpbm10-dev (lib64netpbm-devel pour une mandriva/Mageia) puis on tape
make
si vous avez l'erreur suivante
subtitle2pgm.c:31:17: erreur: ppm.h : Aucun fichier ou dossier de ce type
il suffit d'éditer les fichiers subtitle2pgm.c spudec.c et de rajouter netpbm devant ppm.h comme ceci
#include <netpbm/ppm.h>
on obtient maintenant cette erreur
vobsub.c:59: erreur: static declaration of ‘getline’ follows non-static declaration
/usr/include/stdio.h:651: note: previous declaration of ‘getline’ was here
il suffit d'éditer le fichier vobsub.c et de remplacer toutes les occurences de getline par get_line
retapez make
si vous avez une erreur du style
/usr/bin/ld: cannot find -lppm
je me suis contenté de créer le lien suivant
ln -s /usr/lib/libnetpbm.so.10.47 /usr/lib/libppm.so
Pour les plateformes 64 bits, on créera le lien suivant
ln -s /usr/lib64/libnetpbm.so.11.57 /usr/lib64/libppm.so
puis en tant que root
cp pgm2txt /usr/local/bin
cp srttool /usr/local/bin
cp subtitle2pgm /usr/local/bin
cp subtitle2vobsub /usr/local/bin
cp vobsub2pgm /usr/local/bin
on installera par ailleur rar sous qu'on trouvera ici http://www.exit1.org/dvdrip/contrib/rarlnx271.sfx.bin on le place sous /usr/local/bin et on le renomme rar (en tant que root)
mv rarlnx271.sfx.bin rar
vous devez le rendre exécutable
chmod 755 rar
On revient sous dvdrip-0.98.11 et on
tape
perl Makefile.PL
on doit simplement obtenir ceci
Writing Makefile for Video::DVDRip
Tapez maintenant make puis en tant que root
make install
Bon si vous obtenez un segmentation
fault au lancement de dvdrip,
rajoutez dans votre fichier .bashrc
LC_ALL=C
export LC_ALL
Ouvrez un nouveau shell et relancez dvdrip
Utilisation
Il suffit de taper dvdrip pour le lancer, voici quelques
screenshots
pour copier un DVD en DivX.
|
On doit passer d'abord par la configuration La fenêtre de
préférence Editions->Préférences vous devez indiquer
au niveau de l'onglet Basic settings, comment
accéder
à votre lecteur DVD et où seront vos
répertoires de travail.
Dans l'onglet Commandes vous avez les commandes pour lire les
vidéos
(par défaut mplayer et xine) ainsi que pour la
compression.
Onglet Options du cluster, si vous voulez faire marcher dvd::rip
sur plusieurs
machines.
Onglet Options diverses, options diverses dont le codec
par
défaut.
En bas de la fenêtre vous avez un bouton Vérifier tout
pour vérifier que les paramètres sont OK.
Quand tout est bon on clique sur OK.
Tout cela est sauvegardé dans un fichier .dvdriprc et un
répertoire .dvdrip placés dans la homedirectory.
A présent créer un nouveau projet .
|
|
Dans la
barre
de menu, choissisez Fichier->Nouveau projet.
Nommez votre
projet
et suivant les chemins définis par défaut
les répertoires de travail vont se remplir automatiquement.
Cliquez maintenant sur Créer le projet, indiquer l'endroit
où vous allez positionner le fichier projet .rip.
|
|
Vous pouvez faire une conversion à la volée à
partir
de votre DVD dans le lecteur. Personnellement
je préfère faire une copie complète en local du
DVD, c'est plus rapide.
Attention pour monter un DVD vous pouvez avoir une erreur de file
system
non reconnu (wrong fs) la commande à taper manuellement
mount -t iso9660 /dev/dvd /mnt/cdrom2
A partir de /mnt/cdrom2 vous pouvez maintenant copier le
contenu
du disque dans un (gros) coin du disque (/roger/dvd chez moi).
Pour que dvd::rip travaille ensuite sur la copie locale,
démonter
le disque (umount) et enlever le DVD. |
|
On passe à l'onglet Extraction.
Cliquez sur le bouton Lire la table des matières du DVD,
on
obtient
la liste des chapitres du DVD. Sélectionnez celui (ou ceux) que
vous
voulez récupérer.
N'oubliez pas de choisir la bonne langue (Choisissez une
piste audio...)
et
éventuellement le bon angle de prise de vue.
Cliquez maintenant sur Extraire les titres ou chapitres
sélectionnés
|
|
Onglet Découpage
& Zoom.
A présent choisissez une taille pour votre vidéo, plus
elle sera petite et moins elle prendra de taille bien
évidemment. Vous avez
des valeurs préféfinis au niveau de Réglages prédéfinies cela me parait un
bon choix pour
commencer.
Choisissez ce que vous voulez et tapez Appliquer ce réglage prédéfini. |
|
L'onglet Sous-titres permet de choisir un
sous
titre. Choisissez le avec la liste déroulante Sélectionner le sous-titre,
puis le bouton Capture vous
donne une idée du
sous titre.
Vous avez deux possibilités incorporer un sous titre (unique)
dans la vidéo, ou créer un fichier sous titre qui pourra
être appelé par mplayer
par exemple.
Dans le premier cas cochez la case Activer ce sous-titre dans le film,
vous pouvez laisser
les autres options par défaut. Le sous titre se retrouvera
automatiquement dans la vidéo généré.
Dans le second cas, cliquez sur le bouton Créer Dans le répertoire où vous allez
retrouver
votre vidéo, vous trouverez un fichier sous titre (.sub), avec mplayer la syntaxe sera
la suivante
mplayer monfichier.ogm --vobsub
monfichier.sub
|
|
Onglet Encoder pour
définir les paramètres de compression et le codec
à utiliser. J'ai choisi xvid4 mais vous pouvez prendre
VCD ou SVCD par exemple.
Au niveau de Par taille cible,
vous
pouvez imposer que le
fichier
à obtenir tienne sur un ou deux CD. Vous pouvez également
définir la taille du fichier à partir du bitrate (onglet Manuel).
N'oubliez pas de bien choisir le bon canal son au niveau de Choisissez une piste.
Cliquer maintenant sur Encoder pour lancer l'encodage.
|
|
Dans la
fenêtre précédente, en cliquant sur Configurer les filtres &
aperçu... vous pouvez activer un
filtre.
Exemple avec la copie d'écran à gauche. |
|
Si vous voulez utiliser un
conteneur
de type ogm, au niveau du champ Format
du conteneur,
choisissez OGG. Vous pouvez ensuite le codec audio vorbis au lieu de
mp3.
Attention il faudra que les ogmtools aient
été installés auparavant (page conteneur). Une
recompilation
de dvd::rip n'est pas
nécessaire. |
L'onglet Journal contient les
informations de log.
Le mode cluster
Dans la configuration cluster, vous avez une machine maître
(serveur) sur laquelle se trouve le répertoire de travail, et
sur laquelle tournera le daemon cluster pour
dvdrip. Les machines clientes
devront avoir également
dvdrip
fonctionnel mais être également installé avec un
daemon
SSH (voir une
configuration type dans la page
connexion
sécurisée). L'utilisateur de la machine maître
devra pouvoir se connecter par
SSH
sur les machines clientes. Par ailleurs le répertoire de travail
de la machine maître doit être monté par
NFS sur les machines
clientes.
Lors de l'utilisation de
dvdrip
en mode cluster, les machines clientes doivent être
évidemment allumées, mais il ne sera pas
nécessaire de se loguer, tout se fera de la machine maître.
Sur la machine maître vous devez d'abord lancer
dvdrip-master (éventuellement
dvdrip-master 2 pour avoir des
traces supplémentaires). Toutes les autres manips
décrites ci-après se font sur la machine maître.
|
Lancer dvdrip, puis Edition->Préférences.
Vous pouvez éventuellement lui indiquer de lancer le daemon
cluster dvdrip sur une autre
machine, dans ce cas spécifiez le. Laissez le port TCP par
défaut.
Dans la configuration à gauche, le daemon tourne sur la machine
maître.
|
|
Maintenant Cluster->Panneau de contrôle...
on va rajouter les machines clientes en cliquant sur Add node
|
|
On commence en rajoutant la
machine maître, on doit saisir:
- le nom de la machine
- le chemin du répertoire de travail
- on lui indique le daemon cluster tourne sur cette machine
- le répertoire de travail est accessible de la machine
- on laisse vide les champs SSH,
car on est sur la machine maître
Vous pouvez tester la configuration en cliquant sur Tester les réglages, vous ne devriez
pas obtenir de Not OK.
|
|
On rajoute maintenant une
machine cliente, on précise
- le nom de la machine
- le chemin du répertoire de travail monté sur la machine
cliente
- on lui indique que le daemon cluster ne tourne pas sur la machine
cliente
- on lui indique que le répertoire de travail est bien
accessible de la machine cliente
- pour les options SSH, il
suffit de mettre le nom de l'utilisateur de la machine cliente que la
machine maître devra utiliser pour se connecter
Vous pouvez tester la configuration en cliquant sur OK, une connexion
de la machine maître vers la machine cliente va être
tentée, pour la première fois cela donne cela
The authenticity of host 'tosh
(192.168.1.10)' can't be established.
DSA key fingerprint is
be:d9:ee:a3:12:12:a5:89:f9:cb:4f:8e:c2:58:17:ac.
Are you sure you want to
continue connecting (yes/no)?
Enter passphrase for key
'/export/home/olivier/.ssh/id_dsa'
Au final vous ne devriez pas obtenir de Not OK. |
|
Pour le reste c'est assez
classique, vous ouvrez ou créez un projet, et quand vous arrivez
à la fenêtre d'encodage, il suffit de cliquer sur Ajouter au cluster (en bas à
droite).
|
|
La fenêtre suivante
s'affiche, je lui ai indiqué de supprimer les fichiers
temporaires. Vous retrouvez cette
fenêtre au niveau de la fenêtre Panneau de contrôle du cluster en
cliquant sur Editer le projet.
|
|
Dans le Panneau de contrôle du cluster sélectionnez votre projet et pour lancer le
calcul cliquez sur Démarrer le projet.
Si les noeuds enregistrés ne sont pas en idle, sélectionnez les et
cliquez sur Démarrer le noeud.
Maintenant le problème est qu'à chaque échange de
fichiers entre le maître et les clients, SSH va vous demander le passphrase,
c'est assez lourd. Pour automatiser tout cela, il faut configurer SSH en utilisant
l'agent.
Voilà c'est fini !
|