Créer un MP4 pour un player Flash avec streaming

23 04 2011

Si vous utilisez un player Flash pour lire des vidéos stockées sur votre site web (comme par exemple avec DewTube), voici un script à utiliser en ligne de commande pour Linux (testé sous Ubuntu 10.10) qui permet de préparer une vidéo au format MP4 avec tout le nécessaire pour qu’elle puisse être lue en streaming.

Prérequis

Il va vous falloir les paquetages suivants :

  • x264, pour l’encodage du flux vidéo,
  • faac, pour l’encodage du flux audio,
  • ffmpeg, pour le multiplexage et l’ajout des informations nécessaires au streaming (avec l’utilitaire qt-faststart).

Un petit tour dans Synaptic et l’affaire est dans le sac.

Le script a été conçu pour se satisfaire des versions fournies en standard dans les paquetages d’Ubuntu et ne nécessite donc pas la recompilation de ffmpeg pour lui ajouter le support du x264.

Un des avantages de x264 par rapport à une autre solution c’est qu’il est capable d’utiliser plusieurs cœurs/processeurs pour encoder la vidéo.

Le script

Il est plutôt simple à utiliser : toflashmp4 <video en entrée>

Le script va encoder la vidéo au format MP4 et remplacer l’extension de la vidéo par mp4.

L’encodage vidéo est la partie qui prend le plus de temps. L’encodage audio, le multiplexage, l’ajout des informations pour les streaming sont rapides.

Sa conception est des plus simples : il s’agit d’un enchaînement de commandes qui est interrompu dès qu’une des commandes renvoie un code d’erreur. Cela permet sa modification pour l’adapter à des besoins spécifiques (options, paramètres particuliers, etc.)

#!/bin/bash

# Définition des variables
source="$1"
intermediairevideo="/tmp/$$-intermediairevideo.mp4"
intermediaireaudio="/tmp/$$-intermediaireaudio.m4a"
intermediaireaudiovideo="/tmp/$$-intermediaireaudiovideo.mp4"
destination="${source%.*}.mp4"

# Teste le résultat de la dernière commande et arrête le script s’il y a eu
# un problème. Les fichiers temporaires sont également nettoyés
function finsiprobleme {
  if [ $? -ne 0 ]
  then
    echo "Erreur !!!"
    rm "$intermediairevideo" "$intermediaireaudio" "$intermediaireaudiovideo" 2> /dev/null
    exit 1
  else
    echo "OK"
  fi
}

# Encode en MPEG-4 le flux vidéo de la source
echo -n "→ Encodage en MPEG-4 du flux vidéo de la source... "
x264 -o "$intermediairevideo" "$source" 2> /dev/null
finsiprobleme

# Encode en FAAC le flux audio de la source
echo -n "→ Encodage en FAAC du flux audio de la source... "
ffmpeg -i "$source" -acodec pcm_s16le -f wav - 2> /dev/null | faac -o "$intermediaireaudio" - 2> /dev/null
finsiprobleme

# Multiplexe les flux audio et vidéo
echo -n "→ Multiplexage des flux audio et vidéo... "
ffmpeg -i "$intermediairevideo" -vcodec copy -i "$intermediaireaudio" -acodec copy "$intermediaireaudiovideo" 2> /dev/null
finsiprobleme

# Ajoute les informations de streaming et produit la vidéo finale
echo -n "→ Ajout des informations pour le streaming... "
qt-faststart "$intermediaireaudiovideo" "$destination" > /dev/null 2> /dev/null
finsiprobleme

# Nettoie les fichiers intermédiaires
echo -n "→ Nettoyage des fichiers intermédiaires... "
rm "$intermediairevideo" "$intermediaireaudio" "$intermediaireaudiovideo" 2> /dev/null
finsiprobleme

# Fin
echo "La vidéo a été convertie !"

Actions

Information

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s




%d blogueurs aiment cette page :