まこと の ブログ

MaKoTo no burogu — Journal de bord…

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

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 !! :)

Commentaires

1. Le vendredi, 7 janvier 2011, 21:49 par cledesol

Bonjour

Très intéressé par les rendus sous Cinelerra, j'ai suivi tes conseils, mais chez moi le résultat est inexploitable. Je suis sous Ubuntu 10.10, Cinelerra 2.1.
Et en plus c'est désespérement long alors que j'ai quand même un AMD II X6 ....
Cordialement

2. Le dimanche, 9 janvier 2011, 12:33 par MaKoTo

Je ne sais pas si je dois répondre, étant donné qu'il n'y a pas de question exploitable.
Juste une remarque alors; avoir un processeur multi-cœur c'est bien, mais encore faudrait-'il que les applications soient développées pour les utiliser tous; ce qui n'est malheureusement pas le cas de Cinelerra2.1CV qui commence à dater.
Donc oui, l'encodage Mpeg2 étant assez gourmand, il sera assez long, quelque soit le nombre de cœur disponibles.

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.

Fil des commentaires de ce billet