Apr�s quelques recherches, je me suis rendu compte qu’il n’existait pas de convertisseur video pour la PSP r�pondant � mes besoins. A savoir :
supportant la normalisation audio,
supportant l’encodage vid�o H264 et audio AAC,
supportant la suppression des bandes noires,
et supportant la mise � l’�chelle automatique pour la PSP.
J’en suis donc venu � modifier l’application FFMPEG par rapport � mes besoins.
La premi�re modification a consist� � ajouter la normalisation audio en 2 passes.
Ce patch a �t� refus� par les mainteneurs de FFMPEG, car ils pr�f�rent un filtre bas�e sur la nouvelle architecture "libavfilter". Faute de temps et de documentations, j’ai conserv� ma version, car FFMPEG lui-m�me ne permet pas d’utiliser leur nouvelle architecture. Quand celui-ci sera adapt� � "libavfilter", je porterais mon petit filtre de normalisation dans la nouvelle librairie de filtrage (en y apportant des am�liorations).
Le patch de normalisation ajout un param�tre � FFMPEG : "-normalize".
Ce param�tre fonctionne en 2 passes. Lors du premier lancement de FFMPEG avec ce param�tre, un fichier est cr�� contenant les coefficients � appliquer � la piste audio pour que le niveau maximum soit atteint.
Deux conditions � l’usage de ce param�tre :
La piste audio doit �tre d�cod�e en PCM 16bits (pour la premi�re passe, car c’est fait pour la seconde juste avant encodage AAC) et
un downmix st�r�o doit �tre fait pour une piste 5.1
Voir plus bas comment j’utilise ce param�tre.
FFMPEG propose par d�faut une option "-target" qui permet de pr�-configurer la sortie sur un format d�termin�.
L’extension cette option pour g�rer le format de sortie "PSP" permet de simplifier grandement la ligne de commande utiliser pour g�n�rer des fichiers vid�o lisible par la PSP.
Le format de cette option est celui-ci :
-target psp[-opt]*
O� [-opt] peut �tre r�p�t� plusieurs fois et avoir les valeurs suivantes :
"tv", force le 4:3, soit 368x272,
"wide", force le 16:9, soit 480x272,
"scope", force le format cin�mascope 2.35, soit 480x208
"pal", force le framerate � 25im/s,
"ntsc" force le framerate � 30im/s,
"aac", downmix et encode l’audio en AAC, sinon copie le flux audio.
Les options de redimmensionnement sont optionnelles. Dans ce cas, un redimenssionement automatique est effectu�, en tenant compte du ratio de la source (il faut donc sp�cifier l’option "-i" avant "-target’).
En dehors du redimensionnement, l’utilisation de cette option permet de pr�configurer les options suivante :
format de sortie = "psp"
codec audio = ’libfaac"
bitrate audio = 64000, sauf si "wide" ou "scope", dans ce cas, 96000.
codec video = "libx264"
bitrate video = framewidth*frameheight*framerate / 8
"qmin" = 10
"qmax" = 51
"minrate" = 0
"maxrate" = 4M
"bufsize" = 4M
"g" = ( ntsc ? 300 : 250 )
"keyint_min" = (ntsc ? 30 : 25 )
"me_range" = 16
"sc_threshold" = 40
"i_qfactor" = 0.71
"qcomp" = 0.6
"qdiff" = 4
"me" = "umh"
"subq" = 5
"trellis" = 2
"coder" = 1
"flags" = "+loop"
"cmp" = "+chroma"
"partitions" = "+parti4x4+partp8x8+partb8x8"
"refs" = 2
"bf" = 3
"rc_eq" = "blurCplx^(1-qComp)"
Ci-dessous, le code du script utilis� pour convertir une vid�o en utilisant ma version modifi�e de FFMPEG.
#!/bin/bash
VID=$1
OUT=$2
shift 2
rm -f normalize.stats *.log
# first audio normalization pass (no video)
nice ~/bin/ffmpeg -i "$VID" -vn -ac 2 -f s16le -normalize $* -y /dev/null
# first video pass (no audio)
nice ~/bin/ffmpeg -i "$VID" -an -target psp -b 500k -bt 250k -pass 1 -threads 2 $* -f h264 -y /dev/null
# second pass with audio normalization and video
nice ~/bin/ffmpeg -i "$VID" -ac 2 -normalize -target psp-aac -b 500k -bt 250k -pass 2 -threads 2 $* -y "$OUT"Le patch ci-dessous s’applique � la version de d�veloppement de FFMPEG (r�vision 15760 � ce jour).