Expériences Linux et Android

Accueil > Articles > Patch FFMPEG pour PSP

Patch FFMPEG pour PSP

vendredi 31 octobre 2008, par Admin

Introduction

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.

Normalisation audio

La première modification a consisté à ajouter la normalisation audio en 2 passes.

Ce patch a été refusé par les mainteneurs de la librairie 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 l’outil FFMPEG en ligne de commande 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 lors de la seconde passe 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 lors de la première passe et
- un downmix stéréo doit être fait pour une piste 5.1

Voir plus bas comment j’utilise ce paramètre.

Support de la PSP

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)"

Utilisation de la version patché de FFMPEG

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"

Code source

Le patch ci-dessous s’applique é la version de développement de FFMPEG (révision 15760 é ce jour).

Patch FFMPEG pour SVN r25757
Patch de normalisation audio et support de la cible PSP pour la version SVN r25757 de FFMPEG.

<<<

Messages

  • bonjour,
    Merci pour ces explication, mais ou placer ce patch sous mandriva par exemple, et serait-il possible de faire un exemple d’utilisation du script pour mieu comprendre.
    merci d’avance.