Unité-Vidéo Index du Forum Unité-Vidéo
Le site qui fait bronzer
 

Encoder en HE-AAC sous Linux
Click here to go to the original topic

 
       Unité-Vidéo Index du Forum -> Audio
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
kurtnoise



Inscrit le: 19 Oct 2002
Messages: 5494
Localisation: Marseille

Posté le: Sam 18 Mar 2006, 12:12    Sujet du message: Encoder en HE-AAC sous Linux  

Quelques lignes explicatives pour vous montrer comment encoder vos fichiers audios au format HE-AAC. Pour ceux et celles qui découvriraient ce format, je vous invite à aller voir cette page pour de plus amples informations.

A l'heure actuelle, le HE-AAC se développe de plus en plus notamment pour tout ce qui touche au streaming audio et/ou vidéo car ce format est réellement efficient pour de faibles débits tout en gardant une certaine qualité.

Le peu d'intérêt qu'il y a pour ce format concernant les systèmes Linux, vient peut être du fait du manque d'outils gérant parfaitement ce dernier ou alors par manque de connaissances tout simplement. Vous allez voir que sans grandes difficultés, il est tout à fait possible de réaliser des encodes en HE-AAC.

Ce qui est le plus accessible aujourd'hui au grand public repose sur 3 outils Le premier concerne le Producer de la suite Open-Source Helix Community, bien connue pour son lecteur de fichiers real. A l’heure actuelle, il n’est plus guère développé bien que les sources soient toujours accessibles. Le second fait référence au compresseur de référence pour la norme 3GPP. Lui aussi ne connaît plus un développement très intensif. Enfin, le dernier arrivé pendant l’été 2007, le Nero Digital Audio Encoder. Oui, la firme bien connue dans le monde du multimédia pour sa suite logiciel dédiée à la gravure, s’attaque depuis peu au monde des pingouins. Ainsi donc maintenant, nous pouvons profiter pleinement des dernières avancées technologiques au niveau de l'HE-AAC.

Bien sûr, il est sans doute possible d'utiliser d'autres encodeurs fonctionnant sous plateforme Windows à l'aide de Wine mais l'émulation n'est pas le but recherché ici. C'est pourquoi, on se concentrera seulement sur les premières solutions.
Revenir en haut  
kurtnoise



Inscrit le: 19 Oct 2002
Messages: 5494
Localisation: Marseille

Posté le: Lun 10 Avr 2006, 15:34    Sujet du message:  

L'HE-AAC sous Producer

La communauté Helix est entièrement dédiée aux projets multimedias, en particulier tout ce qui touche à la compression A/V et au streaming. Depuis quelques années, le principal outil qu'elle propose pour réaliser ce genre de tâches, se nomme Helix Producer. Il est accessible à la fois sous Windows mais également sous Linux et MacOS. L'intégration du format audio AAC s'est faite au cours de l'année 2004 avec quelques améliorations en 2005.

Pour récupérer cet outil, il suffit de s'inscrire préalablement sur https://helixcommunity.org/. C'est bien sûr gratuit et sans engagement. Une fois l'inscription faite, dirigez-vous sur https://helixcommunity.org/beula/download/ puis téléchargez le fichier helixproducer_11_linux.tgz et racp_w_32_48_linux.tgz pour la mise à jour de la librairie. Il est également possible d'avoir accès aux sources directement par ssh mais la compilation me semblant un peu trop compliquée à mes yeux, je n'entrerai pas dans les détails ici. Pour plus d'infos, je vous renvoie directement à cette page.

A présent, il va falloir décompresser ces fichiers. Pour ce faire, dans une console, tapez :
Code: $ tar xvzf helixproducer_11_linux.tgz
Un répertoire producer est créé. Entrez dans celui-ci pour copier le fichier racp_w_32_48_linux.tgz. Ensuite, décompressez le :
Code: $ tar xvzf racp_w_32_48_linux.tgz
et copiez racp.so dans le répertoire codecs :
Code: $ cp racp.so /codecs

Maintenant, passons à la création du fichier d'audiences. Ce sont de simples fichiers texte qui renferment un certain nombre de paramètres pour l'encodage facilitant l'utilisation du Producer. Par défaut, cet outil permet l'encodage en HE-AAC pour des débits de 64kbps, 96 kbps et 128 kbps. Grâce à la mise à jour de la librairie, d'autres débits sont accessibles (32kbps et 48 kbps).
Donc, ouvrez votre éditeur de texte préféré et copiez ces quelques lignes :

Code: <?xml version="1.0"?>
<audience>
  <avgBitrate type="uint">48000</avgBitrate>
  <maxBitrate type="uint">48000</maxBitrate>
  <streams>
    <audioStream>
      <pluginName type="string">rn-audiocodec-realaudio</pluginName>
      <codecName type="string">racp</codecName>
      <codecFlavor type="uint">3</codecFlavor>
      <streamContext type="bag">
        <presentationType type="string">audio-only</presentationType>
        <audioMode type="string">music</audioMode>
      </streamContext>
    </audioStream>
  </streams>
</audience>

Les lignes les plus importantes correspondent au avgBitrate, maxBitrate et codecFlavor. Les deux premières permettent de spécifier le débit (en bps). Donc pour cet exemple, cela renvoit à du 48 kbps. l'avgBitrate (le débit moyen) et le maxBitrate (le débit max) doivent avoir les mêmes valeurs. La valeur du codecFlavor, quant à elle, permet au Producer de reconnaitre le type de format audio. Pour du HE-AAC @32kbps, il vous faut spécifier un codecFlavor de 4, pour du HE-AAC @48kbps, une valeur de 3, pour du HE-AAC @64kbps, une valeur de 0, pour du HE-AAC @96 kbps, une valeur de 1 et pour du 128kbps, une valeur de 2.
Une fois ces modifications finies, il suffit d'enregistrer votre fichier dans le répertoire audiences de producer. L'extension du fichier texte est .rpad. Ainsi, vous pourrez les réutiliser ultérieurement et simplifie grandement la ligne de commandes concernant l'encodage.

A présent, on va vérifier que Producer possède toutes les librairies pour pouvoir fonctionner. Toujours dans la console, tapez :
Code: $ ./Producer ldd
S'il vous manque une ou des librairies, cela vous sera notifié. Notez que Producer ayant été compilé avec gcc-3.3, libstdc++5 est indispensable.

Maintenant, l'encodage proprement dit. Producer s'utilise en ligne de commandes et ne supporte que les fichiers audios wav. Le taux d'échantillonnage n'a pas trop d'importance ici. Du moment que c'est en 44,100KHz ou 48 KHz, c'est parfait. Dernier élement à prendre en compte, l'HE-AAC sous Producer n'est possible que pour des flux stereo. Donc, la fameuse ligne de commandes pour un encodage HE-AAC @48kbps est la suivante :
Code: $ ./producer -i mon_fichier_input.wav -ad racp_48.rpad -dt -o fichier_output.ra
En supposant que votre fichier wav soit dans le même répertoire que l'éxecutable. Sinon, il vous faut spécifier le chemin exact tel que ...../fichier_input.wav.
La commande -ad fait référence à la prise en compte du fichier d'audience. Dans mon exemple, j'ai sauvegardé le fichier sous le nom racp_48.rpad mais vous pouvez lu donner le nom que vous voulez. A condition de respecter l'extension.
-dt permet de désactiver l'encodage en 2 passes, pas nécessaire pour l'audio, plus utile pour la video. Si tout s'est passé correctement, vous devriez voir "Encoding successful!" en ligne de commentaires :

Citation: Helix DNA(TM) Producer 11.0 Build number: 11.0.0.2013
Info: Preparing to encode file ~/Jarvis.wav to file ~/Jarvis.ra
Info: Starting encode
Info: WAV reader sending end of stream sample.
Info: Out- Total Audio Video Pre- Audience Name
Info: Aud kbps kbps kbps roll
Info: Stat1: 1:1 48 47.7 n/a 256 racp48
Info: Total Bitrate = 48 kbps
Info: Encoding successful!

Si votre lecteur préféré est celui d'Helix, votre fichier devrait pouvoir être lu sans problème, sinon il vous faut extraire le flux AAC. Ce dernier étant encapsulé dans le conteneur Real, le meilleur moyen est de passer par le conteneur Matroska pour pouvoir l'éditer. MKVtoolnix est disponible à cet endroit. Un autre outil également intéressant qui permet de passer des fichiers real en aac/mp4, est dtdrive. Malheureusement, le site d'Helix ne dispose pas de fichier binaire pour plateforme Linux...seulement Windows. Donc, la seule voie possible pour se procurer ce logiciel semble être via le cvs en récupérant les sources. Si une personne est parvenue à créer un exécutable ou un paquet concernant dtdrive, faites-le moi savoir. Je l'intégrerai ici.

L'installation de MKVtoolnix ne devrait pas poser de problèmes sinon regardez la doc pour de plus amples informations. Donc, les fichiers Real (Audio et/ou Video) peuvent être encapsulés dans un fichier mkv. Tout cela sans pertes bien évidemment...Pour le mux de votre fichier ra, utilisez mmg, l'interface graphique, ou bien mkvmerge par ligne de commandes :

Code: $ mkvmerge -o ~/Fichier_ra.mka  --language 0:eng -a 0 -D -S ~/fichier_output.ra --track-order 0:0

Ensuite, il faut démuxer (décapsuler) cette piste audio. On utilise alors mkvextract :
Code: $ mkvextract tracks ~/Fichier_ra.mka 1:~/Track_Audio.aac
Ainsi, tout lecteur ayant intégré la librairie de faad2 pourra parfaitement décoder votre fichier HE-AAC.

Notez que pour finir, la qualité de ce compresseur semble être de bonne facture puisqu'il rivalise avec celui de Nero @96 kbps, comme l'a testé Guruboolez au cours du mois de juillet 2005.
Revenir en haut  
kurtnoise



Inscrit le: 19 Oct 2002
Messages: 5494
Localisation: Marseille

Posté le: Lun 10 Avr 2006, 15:36    Sujet du message:  

L'HE-AAC via le compresseur 3GPP

Si l'on reprend la définition proposée par Wikipedia, 3GPP ( pour 3rd Generation Partnership Project) est un projet commun d'organismes de standardisation en Télécommunications tels l'ETSI (Europe), ARIB/TTC (Japon), CCSA (Chine), ATIS (Amerique de Nord) et TTA (Corée du Sud), visant à produire des spécifications techniques pour les réseaux mobiles de 3ème génération. 3GPP assure aussi la maintenance et le développement de spécifications techniques pour les normes mobiles GSM, GPRS et EDGE.

L'application qui nous intéresse ici, se trouve sur le site officiel à l'adresse suivante. Deux versions sont accessibles : une version en nombres flottants (floating point <-> n°26-410) et une autre en nombres entiers (fixed point <-> n°26-411). La première étant la plus à jour, on la préfèrera à la seconde. L'utilisateur moyen ne devrait pas percevoir de différences entre ces 2 versions. L'intérêt est peut être plus significatif pour les développeurs.
.
La première chose à faire est de décompresser le fichier dans le répertoire de votre choix :

Code: $ unzip 26410-660.zip -d ~/

Sur cet exemple, les fichiers sont décompressés dans le répertoire home mais vous pouvez les mettre où vous voulez. Refaites la même manipulation pour le nouveau fichier zip (2640-660_ANSI-C_source_code) puisque l'encodeur et le décodeur se trouvent dans ce dernier.
Code: $ unzip 2640-660_ANSI-C_source_code -d ~/

Ensuite, dirigez-vous dans le répertoire contenant les sources de l'encodeur (FloatFR_aacPlusenc par défaut). Le décodeur ne nous intéresse pas ici. Comme on n'est pas flemmard, on va compiler soi-même ce compresseur :

Code: $ make

Et c'est suffisant... {:-D Normalement la compilation se passe sans problème. D'abord les dépendances et librairies sont créées puis le frontend. Au final, vous vous retrouvez avec un exécutable : enhAacPlusEnc.

Par défaut, ce compresseur permet d'encoder à un débit max de 32 kbps pour des flux mono et 48 kbps pour du stéréo. Notez également que pour des débits compris entre 16 et 36 kbps, le mode Parametric Stereo (PS) est automatiquement activé. Aujourd'hui, en matière de compression avec pertes (lossy), les deux champs d'applications les plus développés sont l'encodage multicanal et l'efficience à bas débits. Ainsi pour l'AAC est apparu deux nouvelles techniques améliorant les faibles bitrates :

Le SBR [Spectral Band Replication] : un outil désigné pour reproduire les plus hautes fréquences basées sur les plus basses auxquelles on ajoute quelques informations paramétriques. Le mode AAC-LC (Low Complexity) avec la partie SBR est donc appelé HE-AAC (High Efficiency), ou HE-AAC v1.
Le PS [Parametric Stereo] : un outil dédié à la reproduction artificielle du son stéréo. Les données audios sont encodées comme un flux monophonique à l'aide de quelques informations paramétriques additionnelles embarquées dans le flux pour permettre la re-création de la stéréo. Le mode HE-AAC complété de la partie PS est habituellement nommé HE-AAC v2.

En fait, globalement cela améliore sensiblement la qualité. Mais dès que l'on augmente le débit, ces outils deviennent beaucoup moins intéressants.

Si l'échelle de débits proposés par ce compresseur vous convient parfaitement, la commande pour un encodage stéréo HE-AAC @48 kbps est donc :

Code: $ ./enhAacPlusEnc input.wav output.m4a 48000 s

ou pour du PS-AAC @32 kbps :

Code: $ ./enhAacPlusEnc input.wav output.m4a 32000 s

A condition que votre fichier input soit dans le même répertoire que l'exécutable sinon, il faut spécifier le chemin complet. Autre remarque, l'extension du fichier d'output. Ici j'ai choisi m4a mais vous pouvez spécifiez allègrement mp4, m4a ou 3gpp. Ce compresseur utilise la librairie isomedia pour encapsuler le flux AAC dans son propre conteneur type. Pensez que pour un éventuel mux dans un conteneur matroska, l'extension mp4/m4a est préférable; 3gp n'étant pas reconnu par mkvmerge.

Autre exemple à partir d'un fichier vob (dans le cadre de sauvegarde de dvd) :

Code: $ mkfifo audiodump.wav
$ ./enhAacPlusEnc ~/audiodump.wav ~/output.m4a 48000 s & mplayer ~/Input.vob -aid 128 -vc null -vo null -ao pcm

Ceci n'est qu'un exemple utilisant un pipeline via mkfifo et mplayer. Reportez-vous au man de ce dernier pour de plus amples informations. Cependant l'essentiel se concentre dans -vc null -vo null -ao pcm.

N'étant pratiquement pas tuné, la vitesse d'encodage de cet encodeur est relativement faible comparée à d'autres compresseurs. Quant à la lecture/décodage, l'installation de la librairie FAAD2 est fortement conseillée puisqu'elle permet le décodage des flux HE et PS.

De même, les outils pour la création de fichiers mkv (mkvtoolnix) ou mp4 (MP4Box) gèrent parfaitement ces flux.

Dernier point pour les personnes qui seraient intéressées par des débits plus élevés. Les sources de l'encodeur étant disponibles, on peut allègrement en profiter pour s'en servir de base de développement ou du moins voir à quoi ressemble le codage SBR ;). Pour ce faire, chargez le fichier sbr_main.c (répertoire FloatFR_sbrenclib/src/) dans votre éditeur préféré puis allez à la ligne 66 et rajoutez :

Code:   { 52000, 60000,  22050, 2, 12,  9, 3, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 56 kbit/s */
  { 60000, 68000,  22050, 2, 14, 10, 3, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 64 kbit/s */
  { 68000, 72001,  22050, 2, 14, 10, 3, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 72 kbit/s */

Pour ce qui est du 44,1KHz et concernant le 48 KHz (ligne ~74) :

Code:   { 52000, 60000,  24000, 2, 12,  9, 3, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 56 kbit/s */
  { 60000, 68000,  24000, 2, 14, 10, 3, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 64 kbit/s */
  { 68000, 72001,  24000, 2, 14, 10, 3, 0, -3, SBR_SWITCH_LRC, 2 }, /* nominal: 72 kbit/s */

Enregistrez ces modifications et refaites une compile :

Code: $ make clean all

Attention, ceci est purement formel. Je n'ai pas assez de connaissances en la matière pour dire si ces tunings sont parfaitement indispensables. Cependant, cela permet de bénéficier de débits jusqu'à 72 kbps. Au dessus, il semblerait que le compresseur n'apprécie pas trop...:(

Niveau qualité, celui-ci s'en sort pas trop mal comparé à d'autres (Nero Digital ou Coding Technologies) comme l'illustre les derniers tests AAC qui sont sortis @48 kbps.



Revenir en haut  
 
       Unité-Vidéo Index du Forum -> Audio
Page 1 sur 1


Powered by phpBB Search Engine Indexer
Powered by phpBB 2.0.17 © 2001, 2002 phpBB Group
Traduction par phpBB-fr.com