まこと の ブログ

MaKoTo no burogu — Journal de bord d'un hacker très très occupé…

Aller au contenu | Aller au menu | Aller à la recherche

Mot-clé - Montage vidéo

Fil des billets - Fil des commentaires

vendredi, 21 mai 2010

Cinelerra, Rendu DVD (entrelacé ou désentrelacé)

Histoire d'une journée ordinaire, dans les miasmes de l'informatique…

Grâce au Manuel de Cinelerra (cf. PJ) page 143, je sais déjà lancer un rendu de mes montages, non seulement au format DVD, mais surtout sans perte de qualité par rapport aux rushs de ma caméra.
En effet j'ai modifié le script donné (-q 3 -b 9600) pour que, lorsque je donne un fichier mpeg2 à manger à Cinelerra, il me ressorte un fichier identique en poids et caractéristiques ! (mplex et ffmpeg -i LeFichier.mpg sont intéressants en cela)
Et c'est déjà pas mal, quand on sait le nombres d'options pour chaque encodages possibles, et qu'on ignore à quoi elles servent !!

Cette méthode est donc devenue ma référence pour sortir mes montages !

  • Créez un fichier texte et nommer le ~/cine_render.sh, ce sera notre script.
  • Copiez dans ce fichier les lignes suivantes :
#/bin/bash
mpeg2enc -v 0 -K tmpgenc -r 16 -4 1 -2 1 -D 10 -E 10 -g 15 -G 15 -q 3 -b 9600 -f 8 -o $1
  • Donnez les droits d'exécution à ce fichier : chmod 777 ~/cine_render.sh
  • Ouvrez votre montage dans Cinelerra, lancer un rendu.
  • Sélectionnez le format de fichier YUV4MPEG Stream.
  • Désélectionnez Rendu des pistes audio et sélectionnez Rendu des pistes vidéo.
  • Cliquez sur la clé des options.
  • Dans la fenêtre qui s'ouvre alors, indiquez le nom du fichier m2v que vous désirez créer. Ce fichier ne comportera que de la vidéo.
  • Cliquez sur Use pipe et renseigner le chemin du script : /home/<your_user>/cine_render.sh %
  • Cliquez sur OK pour fermer la seconde fenêtre et de nouveau OK pour effectuer le rendu de votre fichier m2v.
  • Lorsque le rendu du fichier m2v est terminé, ouvrez de nouveau la fenêtre de rendu, et effectuez le rendu audio d'un fichier AC3 à 256 kbits
  • Enfin, combinez la vidéo et l'audio avec cette commande :
$ mplex -f 8 votre_fichier_video.m2v votre_fichier_audio.ac3 -o votre_fichier_audio_et_video.mpeg


Jusque là, pas de soucis !
Les DVD générés avec ManDVD ou DVD Styler passent bien sur un Télé Cathodique.
Mais restent «peignés» sur un ordinateur (sans filtre adéquat sur le player) ou un Télé LCD (sans platine de salon efficace en désentrelacement).

Qu'à cela ne tienne, je m'en vais désentrelacer mon fichier mpeg que j'me dis bêtement !

Dans Cinelera il y a un effet «désentrelacement» avec plusieurs méthodes au choix.
Après quelques tests, certaines marchent avec plus ou moins de pertes de qualité d'image, d'autres pas…

Frustré, j'eus voulu utiliser le fameux filtre dont dispose Kino, le bien nommé désentrelacement YUV.

Seulement, repasser une fois de plus le montage à la moulinette ne m'enchante guère, pour des raisons de temps passé et surtout de parano quant à l'hypothétique perte de qualité que ce genre de compression-recompressée peut engendrer.
Mais Kino est une interface graphique, alors comment savoir quelle puissante commande il utilise ??
Simplement en le lançant depuis un terminal !

$ kino

Car généralement, les logiciels ainsi lancés indiquent ce qu'il font…
Hop j'initie un rendu DVD sur un fichier DV, avec le filtre, et le terminal indique :

>> Starting Export
>>> ExportMJPEG::startExport
>>> Generated video pipe 'yuvdeinterlace | mpeg2enc -v 0 -f 8 -I 0 -n p -a 3  -o '/home/makoto/TESTS-YUV/ori-kino-YUV'.mpv'
   INFO: [yuvdeinterlace] -------------------------------------------------
   INFO: [yuvdeinterlace]        Motion-Compensating-Deinterlacer
   INFO: [yuvdeinterlace] -------------------------------------------------
   INFO: [yuvdeinterlace] SETTING EXTENDED MMX for MOTION!
   INFO: [yuvdeinterlace] Y4M-Stream is 720x576(420jpeg)
   INFO: [yuvdeinterlace]  Stream is interlaced, bottom-field-first.
>> Leaving Export

Ce qui nous intéresse c'est donc cette ligne :

>>> Generated video pipe 'yuvdeinterlace | mpeg2enc -v 0 -f 8 -I 0 -n p -a 3  -o '/home/makoto/testttt'.mpv'

Mais par quelle magie yuvdeinterlace est-il appelé ??
Après recherches dans le man de mjpegtools (le filtre en fait partie) et moult tentatives j'ai réussi à reproduire la même chose en commande :

$ lav2yuv ori.dv | yuvdeinterlace | mpeg2enc -v 0 -f 8 -I 0 -n p -a 3  -o ori-lav2yuv-YUV.m2v 
   INFO: [yuvdeinterlace] -------------------------------------------------
   INFO: [yuvdeinterlace]        Motion-Compensating-Deinterlacer
   INFO: [yuvdeinterlace] -------------------------------------------------
   INFO: [yuvdeinterlace] SETTING EXTENDED MMX for MOTION!
   INFO: [lav2yuv] Detected libdv PAL output YUY2 (4:2:2)
   INFO: [lav2yuv] set chroma '420paldv' from input
   INFO: [yuvdeinterlace] Y4M-Stream is 720x576(420paldv)
   INFO: [yuvdeinterlace]  Stream is interlaced, bottom-field-first.

Mais en faisant de même sur un fichier mpeg2 tout droit issu de la carte SD de la caméra :

$ lav2yuv MOV004.mpg | yuvdeinterlace | mpeg2enc -v 0 -f 8 -I 0 -n p -a 3  -o ori-lav2yuv-YUV.m2v
   INFO: [yuvdeinterlace] -------------------------------------------------
   INFO: [yuvdeinterlace]        Motion-Compensating-Deinterlacer
   INFO: [yuvdeinterlace] -------------------------------------------------
   INFO: [yuvdeinterlace] SETTING EXTENDED MMX for MOTION!
 Unable to identify file (not a supported format - avi, quicktime).
**ERROR: [lav2yuv] Error opening MOV004.mpg
**ERROR: [yuvdeinterlace] Couldn't read YUV4MPEG header: system error (failed read/write)!
**ERROR: [mpeg2enc] Could not read YUV4MPEG2 header: system error (failed read/write)!

Impossible d'aller plus loin… j'ai eu beau chercher, explorer pas mal de pistes… longtemps… trop longtemps, rien n'y a fait :(
La commande mpeg2enc ne veut pas de mon fichier, pour une sombre histoire de renseignement absent dans le header du fichier…
Car en effectuant :

$ mpeg2enc MOV004.mpg -v 0 -f 8 -I 0 -n p -a 3  -o ori-lav2yuv-YUV.m2v
**ERROR: [mpeg2enc] Could not read YUV4MPEG2 header: bad header magic!

Mais le plus fort, c'est qu'avec le fichier DV aussi !! :

$ mpeg2enc ori.dv -v 0 -f 8 -I 0 -n p -a 3  -o ori-lav2yuv-YUV.m2v
**ERROR: [mpeg2enc] Could not read YUV4MPEG2 header: bad header magic!

Alors comment fais Cinelerra avec sa commande dans le script pour y arriver sans erreur ??!!!
Aucunes idées… Bref -_-;
En désespoir de cause, j'ai voulu tenter ma chance avec Cinelerra en modifiant le script comme ça,

lav2yuv | yuvdeinterlace | mpeg2enc -v 0 -K tmpgenc -r 16 -4 1 -2 1 -D 10 -E 10 -g 15 -G 15 -q 3 -b 9600 -f 8 -o $1

mais ça ne marche pas.

Puis en tournant la page du manuel, quelques références à mjpegtools … et puis, mais pourquoi je m'emmerde à perdre mon temps à vouloir vérifier en commande avant de tenter direct dans le script, comme ça, tel quel, bêtement, pourquoi réfléchir, chercher midi à quatorze heure ?? alors que depuis le début le résultat est sous mes yeux X_X !!!

Kino me disait :

>>> Generated video pipe 'yuvdeinterlace | mpeg2enc -v 0 -f 8 -I 0 -n p -a 3 -o '/home/makoto/TESTS-YUV/ori-kino-YUV'.mpv'

Et bah pouf, je dis à Cinelerra :

yuvdeinterlace | mpeg2enc -v 0 -K tmpgenc -r 16 -4 1 -2 1 -D 10 -E 10 -g 15 -G 15 -q 3 -b 9600 -f 8 -o $1

Et ça marche… -_- Pfffffffffffff

Cependant, on apprend de mjpegtools :

If you deinterlacing the movie with yuvdeinterlace you should tell mpeg2enc that it does not need to do motion estimation for interlaced material. You have to use the -I 0 option of mpeg2enc to say that the frames are already deinterlaced. This will save a lot of time when encoding. If you don't use -I 0 it will not cause problems, the encoding will just take longer.

Par soucis de performances à l'encodage voici donc le nouveau script affublé de l'option «-I 0»

Seconde méthode de référence pour sortir mes montages désentrelacés !

cine_render-desentrelace.sh

#/bin/bash
yuvdeinterlace | mpeg2enc -v 0 -K tmpgenc -r 16 -4 1 -2 1 -D 10 -E 10 -g 15 -G 15 -q 3 -b 9600 -f 8 -I 0 -o $1

Ouf, tout ça pour ça,… il est tard… mais au moins ça marche !! :)

jeudi, 20 mai 2010

Authoring DVD

Bon ben je crois en avoir fait le tour de ces logiciels d'Authoring DVD :

  • ManDVD : dispo dans les dépôts sur Ubuntu 10.04 (j'ai activé universe, multiverse, mais je sais pas si c'était utile pour lui).

Il date un peu, du coup c'est pas sexy et c'est limité en terme de possibilités (pas trouvé de moyen pour faire des sous-menu) mais il est fiable et stable, de ce que j'en ai testé, tout fonctionne bien.

  • 2ManDVD : se compile facilement et rapidement sur Ubuntu 10.04 via le tuto.

Très prometteur en terme de fonctionnalités, ce soft n'est pas sec… (actuellement, version 1.3.4)
En plus d'être lourd, il foire la génération du DVD systématiquement.

  • Bonobo DVD : dispo dans les dépôts sur 10.04.

Pas testé plus que ça, vu que dés que j'ai voulu mettre une vidéo provenant de ma cam, il m'a dit «nan j'en veux pas!»… alors qu'il veut bien du montage généré par Cinelerra.

  • DVD Styler : dispo dans les dépôts sur 10.04.

Des tutos ici http://www.framasoft.net/article12.html et là http://egroc.free.fr/
Vraiment bien avec de nombreuses possibilités… enfin une fois qu'on a perdu sa journée dessus à comprendre empiriquement qu'on ne pouvait pas mettre plus d'environ 45 fichiers mpeg, sinon la génération du DVD freeze le soft; et que même si on peut en mettre autant qu'on veut, le nombre de boutons est limités à 12 par menu (par exemple 9 vignettes, un Bouton «menu», un bouton «précédent» et un bouton «suivant». (serait-ce une limitation du format DVD ?)
Au delà il ne sont pas cliquable dans le DVD.
Enfin, qu'il faut éviter de copier/coller les vignettes, pour par exemples en avoir plusieurs identiques et gagner du temps plutôt que de se taper les caractéristiques de chacune et ensuite glisser dessus les clips qu'on voudrait y voir…
Non, contre toute attente, alors que tout est cohérent, des erreurs surviendront durant la génération du DVD.

ERR:  That form of jumping is not allowed
ERR:  in VTSM pgc 1, button button03
Echec

Moralité, plutôt que de mettre le montage plus les rushs tel quel sur le DVD, j'ai dû faire un bout à bout des 56 fichiers de rush pour en fabriquer un seul fichier qu'il a ensuite fallut chapitrer pour reconstituer l'intervalle entre chaque clips.

Et y associer la vignette correspondante obtenue par ce script maison :

#!/bin/sh
for i in *.mpg *.MPG *.MPEG *.mpeg *.mp4 *.MP4 *.avi *.AVI *.ogv *.OGV *.flv *.FLV *.wmv *.WMV
do 
    ffmpeg -i "$i" -vcodec mjpeg -vframes 1 -an -f rawvideo -s 200x150 -ss 2 "vignettes/${i%.*}.jpg"
done

Y'a des jours où vraiment je maudis l'informatique et ses aléas inhérents; c'est pas encore une science exacte… rien n'est parfait en ce monde, mais quand on cumule qu'est-ce qu'on perd comme temps pour ces conneries !!! Surtout quand on est tenace ^^;;

vendredi, 16 avril 2010

Screencast, capturer son écran avec ffmpeg

Screencast ou capturer une vidéo de son écran est bien utile quand on veut faire des démonstrations vidéo.
Plusieurs logiciel existent, comme istanbul ou recordmydesktop qui capturent puis compressent une vidéo de l'écran directement en ogg (théora+vorbis)
Mais malgré tous les tests effectués aucun d'eux ne m'a donné satisfaction… trop d'images perdues, vidéo saccadée, résolution trop petite… etc

J'ai alors lut parlé qu'on pouvait faire la même chose avec ffmpeg, en ligne de commande donc… ahhh cette fameuse ligne de commande Ô combien puissante et pratique, qui fait si peur aux noob et nous fait passer pour des bêtes curieuses.

Seulement voila, de base, la version de ffmpeg disponible dans mon système d'exploitation ne dispose pas de ce qu'il faut pour capturer l'écran, c'est à dire x11grab.
Il faut donc compiler les source de ffmpeg avec les options nécessaire… après pas mal de tentatives infructueuses, j'ai découvert sur le Planet Ubuntu qu'il fallait des sources patchées.

j'étais tellement content de l'avoir trouvé que j'ai repris une partie de cet article ^^
http://planet.ubuntu-fr.org/post/2006/09/21/Faire-du-screencast-sous-Ubuntu

On installe les paquets nécessaires :

   $ sudo apt-get install build-essential xlibs-dev ffmpeg

On crée le répertoire nécessaire :

   $ mkdir screencap && cd screencap

On récupère le fichier de source et on l'extrait :

   $ wget http://lecoindespotes.free.fr/ubuntu/screencast/ffmpeg-0.4.9-p20051216.tar.bz2 && tar xjfv ffmpeg-0.4.9-p20051216.tar.bz2 && cd ffmpeg-0.4.9-p20051216

Il faut maintenant le patcher afin de lui permettre de faire du screen capture :

   $ wget http://lecoindespotes.free.fr/ubuntu/screencast/ffmpeg-0.4.9-p20051216.diff && patch -Np1 -i ffmpeg-0.4.9-p20051216.diff

Il ne nous reste plus qu'à compiler :

    $ ./configure --extra-ldflags=-L/usr/X11R6/lib --enable-x11grab --enable-gpl && make

Il se peut que la compilation se passe mal, vérifiez que vous ayez un executable ffmpeg, le reste du paquet ne nous intéresse pas vraiment. On obtient alors un exécutable 'ffmpeg'

Pour lancer une capture, il suffit de taper ce genre de commande :

   $ ./ffmpeg -vcodec mpeg4 -b 1000 -r 10 -g 300 -vd x11:0,0 -s 1024x768 ~/test.avi

La puissance de la «ligne de commande», c'est qu'on va pouvoir customiser la capture !
Par exemple, j'ai utilisé ça :

$ ./ffmpeg -acodec pcm_s16le -vcodec mpeg4 -b 1000 -r 25 -g 300 -vd x11:0,0 -s 1280x960 ~/screencast004.avi

La capture sonore en PCM 16 bits à été ajoutée :

  • -acodec pcm_s16le

La capture vidéo est en MPEG4

  • -vcodec mpeg4

25 images/secondes sont capturées :

  • -r 25

La taille de la vidéo est adaptée à la résolution de mon écran :

  • -s 1280x960

Même commande, sans l'audio, qui m'a servit à capturer le tuto cinelerra

$ ./ffmpeg -an -vcodec mpeg4 -b 1000 -r 25 -g 300 -vd x11:0,0 -s 1280x960 ~/screencast008.avi

La commande

$ ./ffmpeg -formats

donne la liste des codecs utilisable à la capture, reste à tester et choisir ceux qui vous conviennent !

Malgré ces paramètres exigeant en ressources, la capture est parfaite, alors que les logiciels cités plus haut ont étés bien incapable de faire le 1/4 de ce qu'a réalisé cette commande ffmpeg :)

mardi, 9 mars 2010

Cinelerra, prise en main rapide

Fameux logiciel de montage, souvent critiqué pour sa complexité non intuitive (comme un logiciel «pro») il est aussi loué pour ses capacités techniques et son côté pro justement…
Mais tout de même, connaissant un peu les deux pointures du marché que sont Avid Média Composer et Final Cut Pro, j'estime qu'il faut mesurer ces propos… y'a carrément moins de fonctions et d'effets disponible dans Cinelerra !
Cependant, faut relativiser, pour faire du montage de loisir il est excellent, et je suis bien content qu'il existe un tel outil, en espérant qu'il n'ait de cesse de s'enrichir :)

  • Pour des indications d'installation et de l'aide en ligne, il y a le site de Lprod
  • Pour une autre manière d'installation. celle que j'ai choisie, voir du côté du dépot Akirad