Je me suis rendu compte que faire une vidéo ce n'est pas si simple qu'on pense. C'est d'autant plus dur si on veut avoir une vidéo de bonne qualité.
Donc voilà comment j'ai fait pour
http://adinpsz.org/data/adinpsz_-_Extatique.mp4, peut-être que ca sera utile à quelqu'un. je voulais une qualité haute quitte à ce que ca fasse 350 mo.
Les formats communs :- Video : si j'ai bien compris, pour la qualité on a le choix entre deux formats.
- Xvid: bon support chez les gens
- MPEG 4 AVC: aussi appelé H.264, donne une qualité meilleure au même bitrate
- Audio :
- MP3 : vous connaissez
- AAC : meilleur qualité que MP3 au même bitrate
Un fichier vidéo est souvent un conteneur qui contient un flux audio et un flux video. Mais les règles de composition sont complexes (
http://en.wikipedia.org/wiki/Comparison_of_container_formats).
Important: un conteneur MPEG 4 standard ne devrait contenir que du AAC.
C'est pourquoi notre vidéo a des soucis avec certains lecteurs : elle contient du MP3 au lieu d'AAC. Donc: sortez toujours la musique à muxer en AAC.
Cependant si vous voulez envoyer la video sur des sites de streaming qui réencodent (youtube/vimeo/dailymotion) je conseille de sortir une autre version avec du WAV histoire d'avoir une qualité audio un peu moins dégueulasse.
Les softs :- kkapture : un soft de Ryg qui permet de rendre une démo offline avec un timestep constant. Du coup c'est très précis temporellement et ca permet des grosses résolutions.
- Fraps : un soft assez connu qui permet permet d'afficher les FPS, de faire des captures video et des screenshots. Ca marche des fois là ou kkapture marche pas, mais c'est moins précis temporellement. Du coup, faut éviter sauf si vraiment kkapture marche pas.
- Virtualdub et virtualdubmod : ca à l'air bien comme ca, mais en fait je n'en vois pas trop l'intérêt.
- Avisynth : un langage de script qui permet de manipuler des videos.
Ca ressemble à ça:
function processInput(clip c)
{
return c.KillAudio.AssumeFPS(60).ChangeFPS(30,1,false).AssumeFPS(30).Crop(0,96,0,-96).Lanczos4Resize(1280, 720)
}
clip1 = processInput(AVISource("az02 2009-11-18 18-12-31-39.avi"))
clip2 = processInput(AVISource("az02 2009-11-18 18-16-00-37.avi"))
clip3 = processInput(AVISource("az02 2009-11-18 18-18-58-28.avi"))
clip1 + clip2 + clip3
ConvertToYV12()
NB:
- Toutes les variables représentent des vidéos,
- pas de déclarations,
- une opération s'applique implicitement sur le résultat précédent si rien n'est précisé
Ca fait vraiment gagner énormément de temps par rapport à utiliser virtualdub ou équivalent, plus besoin de répéter les mêmes opérations à chaque fois qu'on teste un truc. De plus, les modules du langages sont de bonne qualité (exemple: Lanczos4Resize, pas dispo dans virtualdub).
- x264 : l'encodeur H.264 le plus respecté du marché (il est libre d'ailleurs
). Le codeur du projet a un blog où il bashe les autre codecs. Le format d'image intra-frame est meilleur que JPEG 2000. Bref, ca gère.
Pas besoin de le télécharger car il est inclut dans...
- MeGUI : un front-end graphique pour x264, qui de plus fait pas mal de choses utiles (mux/demux). Un truc très bien aussi c'est qu'il automatise les encodages en N passes. Or pour le H.264 c'est bien d'avoir deux passes.
- Nero AAC Codec : le codec AAC désigné comme le meilleur par un benchmark d'Hydrogenaudio.
D'où le pipeline #ponce-approved :
kkapture => avisynth => MeGUI H264 2 pass => MeGUI mux avec AAC sorti par Nero AAC Codec
A lire absolument avant d'encoder en H.264 :
http://arkanis.de/weblog/2010-08-05-creating-a-valid-and-working-mp4-video