FUNIX

Mettez un manchot dans votre PC



Conversion vidéo

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 !


[Retour page d'accueil ]