jeudi, avril 25, 2024
Nom d'utilisateur : Mot de passe :
Home > Dossiers > Media et diffusion de contenu > Encoder en H264 pour Motorola Milestone
[NEWS]
Envoyé par unreal
Le Motorola Milestone est la version européenne du Droid. Ses caractéristiques intéressantes, notamment son grand écran (854x480) et son décodeur H.264 matériel de bonne facture, en font un jouet idéal pour profiter de contenus vidéo en mobilité. Dans ce dossier nous allons utiliser FFmpeg pour convertir une vidéo HD dans un format optimal pour le Milestone.

Prérequis

- Des vidéos de test de bonne qualité, idéalement 720p ou 1080p
- Une machine *nix ayant FFmpeg et les codecs nécessaires*
- Du temps : il faut prévoir 2-6h pour convertir une source vidéo de 2h

* pour décoder : variable, selon le fichier source ; pour encoder : libx264, libfaac et mp4. Vous pouvez utiliser ffmpeg -formats pour lister le support codecs de votre version de FFmpeg.


Le script

Le script suivant simplifie le processus d'encodage en vérifiant la validité des chemins et en calculant automatiquement le format de sortie pour respecter quelques règles et le ratio d'origine.

any2mp4.sh
#!/bin/bash

FILENAME=$1

if [ ! "$FILENAME" ]; then
        echo "Usage: any2divx.sh <filename>"
        exit 1
fi

if [ ! -f "$FILENAME" ]; then
        echo "No such file."
        exit 1
fi

VIDSIZE=`ffmpeg -i "$FILENAME" 2>&1 | grep Video | head -n 1 | awk '{ print $6; }' | sed 's/,//'`
W=`echo -n "$VIDSIZE" | sed 's/x.*//'`
H=`echo -n "$VIDSIZE" | sed 's/[0-9]*x//'`
REQW=848
NEWH1=`awk "BEGIN { print ( $REQW / $W / 2 ) * $H }" | sed 's/\..*//'`
NEWH=$(( $NEWH1 * 2 ))
VIDRATIO=`awk "BEGIN { print $W / $H }"`
VIDSIZE="$REQW""x""$NEWH"
VIDBR=2000k
AUDBR=128k
AUDCH=2
EXTRA="-y -subq 7 -level 30 -rc_eq 'blurCplx^(1-qComp)' -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -coder 0 -refs 2 -me_method umh"

echo "Compressing to $FILENAME.avi with the following parameters:"
echo " Video size:    $VIDSIZE"
echo " Video bitrate: $VIDBR"
echo " Video ratio: $VIDRATIO"
echo " Audio bitrate: $AUDBR"


ffmpeg -i "$FILENAME" -s $VIDSIZE -vcodec libx264 -aspect $VIDRATIO -vb $VIDBR -acodec libfaac -ab $AUDBR -ac $AUDCH $EXTRA "$FILENAME.mp4"


Le script prend en paramètre le fichier à encoder et génère un fichier mp4 dans le même dossier, portant le nom du fichier source suffixé par .mp4. Les paramètres en gras peuvent être édités si l'utilisateur le souhaite (les valeurs proposées sont optimisées pour Milestone) sachant que REQW doit être divisible par 16.

Remarques et conclusion

La ligne EXTRA contient la chaîne de paramétrage envoyée à libx264. Je déconseille d'augmenter de façon significative la complexité d'encodage parce que :

- Cela pourrait occasionner des artefacts lors du décodage
- Cela augmente de façon considérable le temps d'encodage sans gain de qualité
- Cela pourrait réduire l'autonomie en lecture parce que la vidéo est plus complexe à décoder

Je note cependant que l'appareil accepte de décoder du profile 4.0 si le nombre de références est réduit. Si vous trouvez des bonnes combinaisons, n'hésitez pas à m'en faire part !

En conclusion je dirais que le Milestone est capable d'afficher de la vidéo de très bonne qualité à condition de prendre le temps d'encoder correctement.

Have fun (as usual wink.gif ) !

Posté le 04/02/10 à 11:49

Encoder en H264 pour Motorola Milestone
Vous pourriez commenter si vous aviez un compte !