dimanche 9 mai 2010

ogg théora/vorbis : formats et codecs multimédias ouverts, libres et dégagés de tout brevet.

Ogg (prononcer « augue ») est le nom du principal projet de la fondation Xiph.Org dont le but est de proposer à la communauté des formats et codecs multimédias ouverts, libres et dégagés de tout brevet.

C’est aussi le nom du format de fichier conteneur proposé par ce même projet. L’extension .ogg est une des extensions possibles pour les fichiers au format Ogg.

Par abus de langage, on appelle couramment « fichier Ogg » un fichier audio au format Ogg contenant des données audio compressées en Vorbis, l’un des codecs du projet Ogg.

Theora est un format de compression vidéo ouvert et sans brevets
Theora est un codec qui entre en compétition avec des codecs tels que MPEG-4 (exemple : le XviD et le DivX), Windows Media Video ou RealVideo.
Contrairement au codec XviD, le codec Theora n'est soumis à aucun brevet appartenant au MPEG-4.
Ceci donne le droit à tous d'utiliser le Theora à des fins non commerciales tout comme à des fins commerciales sans payer de redevance au consortium MPEG, ce qui n'est pas le cas du XviD ni du DivX ni de tout autre codec vidéo de cette qualité.

Conversion d'une vidéo en ogg théora/vorbis

Pour cela, nous allons utiliser ffmpeg2theora

Téléchargement des binaires les plus récents à partir du site officiel : ICI
Installation (exemple binaire 64 bits):
chmod +x ffmpeg2theora-0.26.linux64.bin
sudo install -m 755 ffmpeg2theora-0.26.linux64.bin /usr/local/bin/ffmpeg2theora

En complément on installe le paquet oggvideotools par la méthode classique:
sudo apt-get install oggvideotools


ffmpeg2theora fonctionne en ligne de commande.


La commande de base est :
ffmpeg2theora fichier_source.xxx
Convertit le fichier source en un fichier vidéo ogg portant le même nom. Par défaut, la résolution vidéo source est conservée, le son est encodé en 80 kb/s, 44100 Hz.

Les Options sont nombreuses et sont à découvrir  dans le man:
man ffmpeg2theora

Les options les plus courantes (de mon point de vue)

Nom du fichier converti : -o
Exemple : ffmpeg2theora -o fichier_sortie.ogv fichier_source.xxx

Qualité du son : -a paramétrable de 1 à 10
  • 1 mauvais
  • 3 équivaut à un mp3 en 128 kb/s
  • 10 excellent
Exemple : ffmpeg2theora -a 3 -o fichier_sortie.ogv  fichier_source.xxx


Qualité de la vidéo : -v paramétrable de 1 à 10 # attention v minuscule
  • 1 mauvais
  • 6 équivaut à un DivX
  • 10 excellent
Exemple : ffmpeg2theora -a 3 -v 6 -o fichier_sortie.ogv fichier_source.xxx


Redimensionnement de la vidéo de sortie:  -x (pour la largeur) , - y (pour la hauteur)

Exemple 1 : ffmpeg2theora -x 640 -y 480 fichier_source.xxx  #convertit en une vidéo de 640 x 480 pixels.
Exemple 2 : ffmpeg2theora -x 640 fichier_source.xxx #conversion en une vidéo de 640 de large en respectant le ratio de la vidéo source


Figer le Bitrate Vidéo (débit vidéo) : -V de 1 à 16778 en kb/s # attention V majuscule ! En pratique un débit entre 350-600 kb/s est suffisant à mon avis.

Figer le Bitrate Audio (débit Audio) : -A de 32 à 500 en kb/s # attention A majuscule !

Optimiser la taille de la vidéo de sortie par un Bitrate variable: --optimize

Dé-entrelacer la vidéo : --deinterlace

De nombreuses autres options sont disponibles comme --novideo (pour n'extraire que l'audio) , ainsi que les options de sous-titres ou les Metadatas (titre, auteur, lieu, date, etc ...)

Information butinée : ICI et ICI , et , et encore ICI

Un exemple de script de base pour ceux qui comme moi ont des problèmes de mémoire, (c'est moche , je sais)

#!/bin/bash
# Nécessite ffmpeg2theora et zenity
# choisir un fichier
VIDEO_ORIGINALE=`zenity --file-selection --title="Choix du fichier vidéo à convertir"`

# choix du nom de sortie
VIDEO_SORTIE=`zenity --entry --title="Choix du Nom de la VIDEO après conversion" --text="Entrer le Nom sous lequel vous voulez sauvegarder la vidéo xxxxxx.ogv" --entry-text="output.ogv" `

# Options étendues ?
OPTION=`zenity --list --width=600 --height=180 --title="OPTIONS" --text=" Choix de Plus d'Options ? " --column="#" --column="Choix de plus d'options de paramétrage ?" \
0 "Non Merci,la résolution vidéo source sera conservée,
 le son est encodé en 80 kb/s, 44100 Hz." \
1 "Oui, je veux plus de paramétres" `
case $OPTION in
    0) xterm -title "Conversion de la vidéo en cours" -e "ffmpeg2theora -o $VIDEO_SORTIE $VIDEO_ORIGINALE " \
    && zenity --info --title="Conversion de Vidéo Terminée" --text="Opération de conversion terminée
de   : $VIDEO_ORIGINALE
vers : $VIDEO_SORTIE "
    exit
    ;;
      1)
    ;;
esac

# choix des tailles x et y
CHOIX_DIM_VIDEO=`zenity --list --width=500 --height=280 --title="Dimensions de la vidéo" --text="Dimensions de la vidéo après conversion " --column="#" --column="Choix des Dimensions de la vidéo (x et y)" \
0 "Dimensions d'origine" \
1 "128x96" \
2 "384x288" \
3 "448x336" \
4 "640x480" \
5 "720x576" `
case $CHOIX_DIM_VIDEO in
    0) CHOIX_X="" && CHOIX_Y=""
    ;;
      1) CHOIX_X="-x 128" && CHOIX_Y="-y 96"
    ;;
      2) CHOIX_X="-x 384" && CHOIX_Y="-y 288"
    ;;
    3) CHOIX_X="-x 448" && CHOIX_Y="-y 336"
    ;;
    4) CHOIX_X="-x 640" && CHOIX_Y="-y 480"
    ;;
    5) CHOIX_X="-x 720" && CHOIX_Y="-y 576"
    ;;
esac

# choix de la qualité du son
Q_SON=`zenity --scale --title="Choix de la Qualité du Son" --text="Qualité du son de 1 à 10 :
  1 : Mauvais
  3 : Type mp3 128 kb/s
 10 : Excellent
  " \
 --step="1" --value="3" --min-value="1" --max-value="10" `

# choix de la qualité de la vidéo
Q_VIDEO=`zenity --scale --title="Choix de la Qualité de la Vidéo" --text="Qualité de la vidéo de 1 à 10 :
  1 : Mauvais
  6 : Type DivX
 10 : Excellent
  " \
 --step="1" --value="6" --min-value="1" --max-value="10" `

# option1 optimize ?
OPTIMIZ=`zenity --list --title="Option : Optimize ?" --text="--optimize : Using a full search  for motion vectors.
 This can reduce video bitrate about 5%, but it is slower and therefore is disabled by default." --column="#" --column="Utilisation de l'option Optimize ?" \
1 "OUI pour utiliser Optimize" \
2 "NON pour utliser Optimize"`
case $OPTIMIZ in
      1) OPTI="--optimize"
    ;;
      2) OPTI=""
    ;;
esac

# Option 2 : désentrelacement
DESENTRELACE=`zenity --list --title="Option : deinterlace ?" --text="--deinterlace à utiliser si lors de séquences en mouvement apparaissent des décalages de lignes " --column="#" --column="Utilisation de l'option deinterlace ?" \
1 "OUI pour utiliser Deinterlace" \
2 "NON pour utliser Deinterlace"`
case $DESENTRELACE in
      1) DESEN="--deinterlace"
    ;;
      2) DESEN=""
    ;;
esac

# traitement du fichier
echo $VIDEO_ORIGINALE $VIDEO_SORTIE $Q_SON $Q_VIDEO $OPTI
xterm -title "Conversion de la vidéo en cours" -e "ffmpeg2theora -a $Q_SON -v $Q_VIDEO $CHOIX_X $CHOIX_Y $OPTI $DESEN -o $VIDEO_SORTIE $VIDEO_ORIGINALE"
zenity --info --title="Conversion de Vidéo Terminée" --text="Opération de conversion terminée
de   : $VIDEO_ORIGINALE
vers : $VIDEO_SORTIE "
exit

1 commentaire:

  1. Merci pour toutes ces précieuses précisions.
    Ça m'a beaucoup aidé.
    Si cela vous intéresse, le format webm développé par google donne des résultats étonnant.
    J'ai testé l'encodage avec firefogg.org et ça marche très bien.

    RépondreSupprimer