PROJET AUTOBLOG


Le blog de Seboss666

Site original : Le blog de Seboss666

⇐ retour index

Mise à jour

Mise à jour de la base de données, veuillez patienter...

Petites différences entre WAV, FLAC, MP3

mercredi 9 août 2017 à 18:30

Avant d’aborder le sujet plus global de la compression de données, j’aimerai vous partager rapidement quelques détails sur les raisons qui ont fait du MP3 le champion de l’audio numérique grand public depuis maintenant près de 20 ans, et ce même si d’autres ont tenté de le remplacer à plusieurs reprises.

Petit rappel sur les formats

Le WAV est un format non compressé d’audio. D’un point de vue purement technique, c’est du PCM. Le FLAC, c’est un format compressé mais sans pertes, libre de brevets. Le MP3 est en revanche un format compressé, initialement affublé d’une tétrachiée de brevets qui ne l’ont pas empêché de se retrouver dans tous les appareils du marché pendant maintenant 20 ans. Initialement parce que depuis quelques mois, les derniers brevets sont arrivés à expiration et donc maintenant plus aucune restriction n’existe pour son utilisation dans tout types de produits.

Petit rappel sur l’échantillonnage et le bitrate

Dans le domaine de l’audio numérique, la fréquence d’échantillonnage correspond au nombre de fois qu’on capture un son en une seconde. Plus la fréquence est élevée, plus le son capturé est proche dans son évolution de ce qu’on entend avec nos oreilles. Il faut aussi tenir compte de la taille de l’échantillon : en informatique, on code avec des bits, séries de 0 et de 1. plus il y a de bits pour un échantillon, plus la quantité d’informations est importante, et plus fidèle sera le son.

Chaque marche représente un échantillon, plus on a d’échantillon, plus on est proche de la courbe d’origine

Exemple, le CD audio que l’on connaît maintenant depuis plus de 30 ans utilise une fréquence d’échantillonnage de 44100 Hz sur 16 bits (soit 44100 échantillons par seconde).

Vient enfin le concept de bitrate, qui dans le cas du MP3 est lié à la compression : un débit de bits plus faible indique une compression plus forte, ce qui veut dire une perte d’information plus grande. Voilà pourquoi je considère les plateformes grand public comme des destructeurs, puisque trop souvent le MP3 se limite à maximum du 256kbps (même si de rares vendeurs proposent jusqu’à 320kbps).

Voilà, on a les bases, on peut y aller.

Attaquons les choses sérieuses : la comparaison

Le morceau que j’ai utilisé provient d’un artiste dont je vous parlerai plus longuement dans un billet dédié. Sa version non compressée fait 50Mo :

-rw-r--r-- 1 seboss666 seboss666 50M 17 juin   2015 './Never Gonna Give You Up Metal.wav'
[seboss666@seboss666-ltp ~/tmp ]$ ffmpeg -i Never\ Gonna\ Give\ You\ Up\ Metal.wav 
ffmpeg version 3.3.2 Copyright (c) 2000-2017 the FFmpeg developers
 built with gcc 7.1.1 (GCC) 20170630
 configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-avisynth --enable-avresample --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libass --enable-libbluray --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxvid --enable-shared --enable-version3
 libavutil 55. 58.100 / 55. 58.100
 libavcodec 57. 89.100 / 57. 89.100
 libavformat 57. 71.100 / 57. 71.100
 libavdevice 57. 6.100 / 57. 6.100
 libavfilter 6. 82.100 / 6. 82.100
 libavresample 3. 5. 0 / 3. 5. 0
 libswscale 4. 6.100 / 4. 6.100
 libswresample 2. 7.100 / 2. 7.100
 libpostproc 54. 5.100 / 54. 5.100
Guessed Channel Layout for Input Stream #0.0 : stereo
Input #0, wav, from 'Never Gonna Give You Up Metal.wav':
 Metadata:
 encoded_by : REAPER
 date : 2015-06-17
 creation_time : 01-00-44
 time_reference : 788894
 Duration: 00:03:16.34, bitrate: 2116 kb/s
 Stream #0:0: Audio: pcm_s24le ([1][0][0][0] / 0x0001), 44100 Hz, stereo, s32 (24 bit), 2116 kb/s

La rapide petite analyse nous indique donc du PCM, avec une fréquence de 44100Hz sur 24 bits, soit un peu mieux que notre bon vieux CD audio. J’aurais pas craché sur du 96kHz mais on va pas chipoter non plus, 14 albums pour 70$ sans compression, même sans tenir compte du taux de change, la qualité est déjà bien au dessus de ce qu’on peut trouver sur les plateformes grand public.

Malgré un espace confortable de 16Go, je ne compte pas engorger la clé USB utilisée pour mon autoradio avec autant d’espace consommé. Les archives ZIP pèsent à elles seules 7,6Go, Rajoutez une trentaine de Mo par album une fois extrait. Vous comprenez maintenant d’où vient l’idée de l’article ?

Pour parvenir à mes fins j’ai réadapté certains vieux scripts, et notamment celui pour le passage du FLAC au MP3 qui a maintenant de la bouteille mais qui fait toujours autant le travail. Commençons justement par la conversion en FLAC, avec une petite subtilité. Lors de mes recherches sur les options que je pourrai appliquer, j’ai cherché comment conserver au maximum la qualité originale, ne sachant pas notamment si l’encodage de 24bit allait être conservé. Eh bien oui, si on utilise les options suivantes :

ffmpeg -i "$FILE" -map_metadata 0 -af aformat=s32:44100 "${FILE%.*}.flac";

Dans les infos originales, on a déjà ce s32 affublé d’un « 24bit » juste à côté. Donc ça donne quoi ?

-rw-r--r-- 1 seboss666 seboss666 42M 30 juil. 08:43 './flac/Never Gonna Give You Up Metal.flac'

Seulement 8M de gagné, c’est pas foufou, mais rapporté à 12×14 morceaux, ça fait 1,3Go de gagné. Un joli début donc. Admettons que j’accepte de sacrifier une partie de la qualité, en repassant sur un encodage en 16bit. Déjà pourquoi ferais-je une chose pareille ? Ne serait-ce que parce que je n’ai pas d’appareil d’une qualité suffisante me permettant d’apprécier toute la clarté du son, que de toute façon une de mes oreilles commence légèrement à décliner par rapport à l’autre (à moins que ça ne soit directement mon cerveau, ce qui n’est pas exclus non plus); et si la qualité CD convient à une grande majorité de personnes depuis 30 ans, et que toutes les tentatives grand public pour le remplacer ont échoué (au point qu’on voit revenir le Vinyle en force), et si les gamins de maintenant arrivent à supporter un MP3 compressé à mort lu par leur smartphone sur le casque Beats horriblement cher qu’ils ont extorqués à leurs parents, on est pas près d’élever le niveau. 16bit seraient donc suffisants pour le commun des mortels.

On remarquera donc l’ironie de la chose puisqu’on va utiliser un format dit sans perte mais on va mécaniquement perdre de l’information. Pour ça, il faut légèrement modifier l’option aformat :

ffmpeg -i "$FILE" -map_metadata 0 -af aformat=s16:44100 "${FILE%.*}.flac";

Oui c’est aussi simple et puissant que ça. Voyons dès lors le résultat :

-rw-r--r-- 1 seboss666 seboss666 25M 30 juil. 08:44 './flac_16bit/Never Gonna Give You Up Metal.flac'

Ah ouais. Là on se rapproche d’une taille raisonnable, mais au prix d’une information moins précise.

L’information moins précise, on va l’obtenir de toute façon avec le MP3, avec les mêmes réglages que mon script original, simplement en disant qu’on cherche du WAV au lieu du FLAC, ce qui nous donne le fichier suivant :

-rw-r--r-- 1 seboss666 seboss666 7,5M 29 juil. 08:54 './mp3/Never Gonna Give You Up Metal.mp3'

Bon ben là ça met tout le monde d’accord. A noter qu’on a tout de même conservé le 44100 Hz et qu’on est repassé sur 16 bits :

Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16p, 320 kb/s

Et à l’écoute, en fonction des outils (casque, carte son, logiciel de lecture/égaliseur, autoradio), le résultat reste plus que correct. On comprend mieux dès lors pourquoi, même affublé de brevets, le format a explosé d’abord de manière illégale (pour ceux qui ne connaissent pas l’histoire, il n’y avait AUCUNE plateforme de vente numérique de musique lorsque Napster est apparu en 1999), puis sur les plateformes en ligne une fois la lubie des DRM dépassée (avant que l’évolution des débits ne permette l’apparition et l’expansion du streaming, retirant le contrôle de l’écoute des mains des consommateurs).

Quel format choisir dès lors ?

Celui que vous voulez ! Tout dépendra de vos contraintes, qu’elles soient liées à l’espace disque (les smartphones ne sont pas spécialement bien équipés de ce côté-là), à l’appareil sur lequel vous allez jouer la musique (mon autoradio ne supporte tout simplement pas le FLAC), au dispositif de restitution (enceintes, casques), bref, vous avez compris. Pour ma part, je garde plusieurs versions : les WAV d’origine, dans leur archive que je vais tout de même passer au format 7z, ce qui me permet là aussi d’économiser environ 80Mo par album (et encore cette valeur est tirée d’un test avec les options par défauts de 7z en ligne de commande), et les FLAC 16bit. A l’occasion, si j’ai besoin d’un support supplémentaire, je fais la conversion rapidement, et le tour est joué 🙂


Bonus : les formats qui ont tenté de supplanter le MP3

Ce n’est pas une liste exhaustive (faites un ffmpeg -codecs |grep D.A pour vous en convaincre), mais lorsque le MP3 a commencé à rencontrer son succès auprès du grand public, les vendeurs de musique ont mis des années à proposer leur catalogue en ligne de manière légale, d’abord affublé de restrictions (DRM, pour Digital Rights Management, ou MTP en français, Mesure Technique de Protection – en bref, un dispositif destiné à vous empêcher de faire ce que vous voulez de ce que vous avez acheté). En parallèle, des alternatives open-source/libre ont également vu le jour avec parfois des objectifs différents (c’est le cas du FLAC qui contrairement au MP3, ne perd en théorie pas d’informations).

Il y a d’abord l’AAC, conçu par l’institut Fraunhofer à partir de 1997, qui était déjà l’initiateur du MP3 (car il faut savoir que ce dernier remonte à bien longtemps avant sa montée en popularité du début des années 2000). C’est notamment le format qu’essaie de privilégier Apple dans son univers, et il est vrai que les promesses de qualité égale à poids plus faible sont alléchantes. Apple ayant fait du Apple (à savoir du Apple-compatible only) avec notamment les DRM les premiers temps, et personne d’autre ne l’ayant considéré, le format n’a jamais pu décoller, et reste marginal à l’heure actuelle. Malgré tout, les travaux pour le faire évoluer et entrer dans le monde de la HD et du streaming continuent.

Toujours dans le domaine du propriétaire/breveté de partout, Microsoft a tenté le coup avec le WMA, qui n’apporte strictement rien que ce soit en terme de qualité, de performance, ou d’ouverture (idem, ils ont forcé à mort le DRM avec l’argument « ça marche sur windows », mais seulement avec le lecteur Windows Media qui n’était déjà pas le plus populaire des lecteurs audio sous Windows à la fin des années 90). Je ne vais que très rapidement évoquer un autre format vite tombé en désuétude, le RealMedia, qui se lisait avec le RealPlayer, et était l’un des premiers formats à pouvoir se lire en streaming durant les années 90 (bien avant les solutions d’aujourd’hui donc).

Côté libre, on a le Vorbis, qui a taux de compression égal est censé fournir un fichier de taille plus légère et d’une meilleure qualité (ça, on sait que c’est compliqué à évaluer). C’est généralement valable la plupart du temps, mais le souci, c’est son support matériel presque entièrement absent du marché quand à l’époque de la montée en puissance du MP3 FraunHofer proposait directement des modèles d’implémentation dans des puces de décodage dédiées (de la programmation physique quoi). Le même Vorbis a été choisi par Google pour gérer la partie audio du Webm, aux côtés du VP8 puis du VP9 pour la vidéo. J’ai évoqué le FLAC, qui a du succès, mais qui pourtant ne vise pas le même objectif puisqu’il n’y a pas de perte de qualité au prix d’une consommation disque furieuse. Reste l’Opus, qui est principalement destiné à des applications de flux (streaming, soit vidéo, soit au sein de logiciels de communications), mais qui peut également faire l’affaire. Pareil, malgré l’absence de brevets, tout comme pour le Vorbis, on voit peu de support de la part des constructeurs, et rares sont les applications de lecture en dehors d’un certain VLC à le supporter hors navigateurs Web évidemment.

C’est dommage, le MP3 c’est bien, mais ça a déjà 25 ans, on a su mettre le Divx/XviD à la retraite (enfin presque), il serait temps de s’attaquer à nos oreilles maintenant que nos yeux sont rassasiés.

Rapide retour sur Juillet

dimanche 6 août 2017 à 10:30

Très très rapide le retour, vous allez voir.

Visites toujours en chute

En même temps c’est toujours comme ça l’été, et j’ai toujours pas trouvé comment virer le blocage de l’image utilisée, ni comparé avec les logs bruts (si on peut faire avaler 1 an de logs à goaccess ça serait cool, encore faut-il que je regarde de près comment il fonctionne).

Ajoutez à ça encore des problèmes de renouvellement Let’s Encrypt qui m’ont fait perdre quelques jours à cause d’un Ipv6 capricieux et vous avez un cocktail parfait pour une sacrée descente.

Technique : presque RAS

J’ai activé les mises à jour auto pour les plugins en plus du cœur de WordPress (pas encore passé sur le 4.8, toujours pas réinstallé mon dev à la maison). Voilà, c’est tout. La VM Debian 9 arrivera quand elle sera prête, surtout quand on trouvera la motivation. Objectif premier, tenter de résoudre les pépins de disque, et améliorer un peu la réactivité de l’ensemble (l’occasion aussi de faire un gros gros clean dans les confs nginx/php qui sont héritées d’ISPConfig).

Qu’est qu’on peut attendre d’Août ?

Bonne question. Si vous avez la réponse prévenez-moi.

Voilà, j’avais prévenu, c’est court, très court, trop court. Comme le temps disponible que j’ai pour écrire ou finaliser des articles en ce moment.

Quelques liens en vrac et en français, 21° édition

mercredi 2 août 2017 à 18:30

A défaut d’écrire beaucoup je continue de lire pas mal. Voici donc quelques sujets à potasser au calme en ce début de mois d’Aout.

La fraude au paiement sans contact a augmenté en Angleterre

Les gens ne comprennent pas pourquoi je refuse d’utiliser le paiement sans contact, que ce soit via smartphone ou ma carte bancaire. C’est simple : c’est absolument pas sécurisé, et il ne faudra pas longtemps avant que l’explosion britannique ne débarque en France, maintenant que les outils sont abordables et rentables.

Supprimer les contenus de la section « Reprendre la lecture » de Netflix

Il y a beaucoup de contenus sur Netflix, du bon, du très bon, du moins bon. Et quand vous ne comptez pas terminer ce moins bon que vous avez démarré, il vous suffit de suivre les conseils de cet article pour faire le ménage de votre section « reprendre la lecture ».

Un film de Zombie sous licence Creative Commons

Il y a quelques années des employés du CERN, entre deux tests d’explosion et de découverte de nouvelles particules subatomiques, ont tourné un film de zombies. Fidèle à l’esprit d’ouverture qui les anime, le film est disponible sous licence Creative Commons.

Libérer Internet : Sexe, alcool et vie privée

Internet sous sa forme originelle, entièrement acentrée, neutre, est en danger. Pour savoir de quel(s) danger(s) on parle pour lui comme pour nous, pour le fonctionnement de la société, je vous invite à regarder, revoir et partager cette conférence d’un membre d’LDN.

Je ne peux pas rester les bras croisés et regarder Mark Zuckerberg détruire l’Internet

Non, Facebook pas plus que Google sont nos amis. Vous n’avez pas eu envie de regarder la conférence juste au dessus ? Alors lisez au moins cet article, histoire de vraiment prendre conscience des problèmes qu’on a actuellement (sans même parler des états « démocratiques » qui prennent la tangente des pays totalitaires sous couvert de sécurité).

La cryptanalyse (méthodes antiques)

Si les gens connaissent la cryptographie, qui n’est pas une pratique récente liée à l’informatique, mais remonte à l’antiquité, et consiste à cacher un message sous une forme différente, moins connaissent son pendant « attaque » qui consiste à découvrir le message original sans connaitre la méthode de masquage. Et certains concepts inventés dans l’antiquité sont toujours exploitables aujourd’hui, ils sont très intéressants à découvrir.

J’ai testé Free Mobile en box internet avec le partage de connexion et le forfait 4G

Une fois de plus, un test d’un profil de consommateur seul. J’ai déjà rappelé plusieurs fois pourquoi ce type de réseau est dangereux pour la neutralité (la consommation implique que le trafic est unidirectionnel, ce qui n’est pas dans la nature d’Internet, mais du Minitel pour prendre un exemple franco-français). Et pire, ce test vient d’un type qui habite dans la ville la plus radio-équipée de France, donc pas représentatif de la réalité du terrain de plus de la moitié de la population.

Comment transformer facilement son raspberry en serveur vpn ?

Pas mal comme article, malheureusement la partie réseau à faire à la main, que dire des créations de certificat. Pour avoir un vrai coup de boost il faudrait une interface de gestion (web typiquement, comme openvpn-admin), ou à minima, les scripts de nicolargo.

Géolocalisation : « Si on me tue un jour, on pourra me retrouver »

Le discours du « rien à cacher » a beau avoir fait son chemin dans les têtes des nouvelles génération qui ont grandi avec les smartphones et Facebook, malgré tout nous avons un rapport compliqué à la géolocalisation, et cet article est une bonne réflexion, pour se rendre compte des limites du rien à cacher. Parce qu’on a toujours quelque chose à cacher, quand bien même ça serait anodin.

Comment désactiver le préchargement des URLs sur Firefox ?

Alors que le travaille continue sous le capot pour transformer Firefox en navigateur qui poutre de la maman ours, d’autres pistes sont explorées pour améliorer l’expérience de navigation pour les utilisateurs. L’une de ces méthodes est le préchargement des URLs (en gros, on commence à charger les pages avant même de cliquer dessus), mais ça a quelques implications sur la vie privée. Il est donc conseillé de désactiver ce mécanisme si vous vous sentez concerné.

Le cancer – Science étonnante

Enfin une explication claire, et pourtant orientée scientifique des principes liés au cancer, et au fonctionnement cellulaire plus globalement. Ayant été confronté à ce phénomène (pas directement, mais via ma mère, par un cancer du sein), je tiens à remercier ici David Louapre pour ce travail qu’on devrait vraiment partager au plus grand nombre.

 

Découper un fichier audio/vidéo sans le recompresser/réencoder

dimanche 30 juillet 2017 à 10:30

Aujourd’hui, et au risque de me faire taper sur les doigts, je vais vous montrer quelque chose de bien illégal, que je ne recommande pas, mais qui va me permettre de vous démontrer un peu plus la puissance de ffmpeg en tant que couteau suisse du multimédia. Quand l’offre légale ne permet pas de profiter de la musique dans des conditions acceptables, les bidouilleurs prennent la relève !

Vous avez certainement déjà croisé des compilations ou des albums complets sur YouTube, qui se matérialisent donc sous la forme de vidéos d’une ou deux heures voire plus, avec en description une playlist avec des timecodes. Dernièrement, après avoir écouté l’une d’entre elles, j’ai été frustré de ne pouvoir trouver l’intégralité des morceaux de cette compilation de manière légale en achat à l’unité (principalement Amazon pour moi, n’ayant rien d’autre sous la main) : certains ne sont dispos qu’en streaming, très rares ceux qui sont sur Bandcamp -ce qui est quand même cool-, d’autres sont à acheter physiquement mais à importer depuis d’autres pays pour un surcoût pas raisonnable du tout et qui ne rentrera pas dans les poches de l’artiste de toute façon. Du coup l’idée a germé dans mon esprit de faire mon gros pirate. Après tout, c’est déjà plus ou moins ce que je fais pour regarder YouTube dans mon salon, alors…

NB : par la suite l’URL de la vidéo a été volontairement modifiée. Je rappelle en outre que ce que je présente est la plupart du temps illégal, d’autant que ces compilations sont réalisées sans l’accord des artistes. Donc quand c’est possible, achetez directement à la source, c’est bien plus sympa pour eux, et BandCamp est super cool pour ça. Aussi, si vous pêchez un peu, je vous invite à relire les termes expliqués sur le multimédia pour mieux comprendre certains points de vocabulaire.

Première étape : récupération de l’audio dans le bon format

Malheureusement, l’audio est comme trop souvent le parent pauvre dans l’affaire : si YouTube propose 4K, 360, VR et tout le toutim pour la vidéo, l’audio, au max, tient à du 192kbps au format m4a inséré dans un conteneur MP4 « legacy » en 720p, ou 160kbps en Opus pour les autres via DASH. C’est pas folichon par rapport à du FLAC (j’aurai peut-être l’occasion d’y revenir dans un autre article) ou du MP3 320kbps, mais j’ai décidé de me tourner vers Opus du coup. Pour info, Opus est un codec libre de compression et diffusion audio, qui peut être utilisé aussi bien en fichier qu’en streaming live (notamment utilisé sur Mumble et donc sur Youtube pour les vidéos et les lives).

YouTube introduit une subtilité cependant : le flux est récupéré dans un conteneur Webm (simplification du MKV par Google pour embarquer de la vidéo VP8/9, concurrent du H264, utilisé notamment sur Youtube, et pour le Web de manière générale, d’où son nom). Pas vraiment ce qu’on recherche pour lancer un programme de gestion et de lecture de bibliothèque musicale.

On y va quand même :

[seboss666@seboss666-ltp ~/Téléchargements ]$ youtube-dl -F https://www.youtube.com/watch?v=MT0Bqzd3SRY
[youtube] MT0Bqzd3SRY: Downloading webpage
[youtube] MT0Bqzd3SRY: Downloading video info webpage
[youtube] MT0Bqzd3SRY: Extracting video information
[youtube] MT0Bqzd3SRY: Downloading js player vflrwQIQw
[youtube] MT0Bqzd3SRY: Downloading js player vflrwQIQw
[youtube] MT0Bqzd3SRY: Downloading MPD manifest
[info] Available formats for MT0Bqzd3SRY:
format code  extension  resolution note
139          m4a        audio only DASH audio   55k , m4a_dash container, mp4a.40.5@ 48k (22050Hz), 41.03MiB
249          webm       audio only DASH audio   72k , opus @ 50k, 43.72MiB
250          webm       audio only DASH audio   90k , opus @ 70k, 57.96MiB
140          m4a        audio only DASH audio  134k , m4a_dash container, mp4a.40.2@128k (44100Hz), 109.58MiB
171          webm       audio only DASH audio  152k , vorbis@128k, 111.64MiB
251          webm       audio only DASH audio  169k , opus @160k, 114.09MiB
278          webm       256x144    144p   61k , webm container, vp9, 30fps, video only, 20.88MiB
242          webm       426x240    240p   75k , vp9, 30fps, video only, 37.00MiB
243          webm       640x360    360p  110k , vp9, 30fps, video only, 73.01MiB
160          mp4        256x144    DASH video  134k , avc1.4d400c, 30fps, video only, 57.90MiB
134          mp4        640x360    DASH video  145k , avc1.4d401e, 30fps, video only, 79.14MiB
244          webm       854x480    480p  169k , vp9, 30fps, video only, 116.69MiB
133          mp4        426x240    DASH video  229k , avc1.4d4015, 30fps, video only, 98.79MiB
135          mp4        854x480    DASH video  259k , avc1.4d401f, 30fps, video only, 139.97MiB
247          webm       1280x720   720p  318k , vp9, 30fps, video only, 195.60MiB
136          mp4        1280x720   DASH video  473k , avc1.4d401f, 30fps, video only, 241.37MiB
248          webm       1920x1080  1080p  780k , vp9, 30fps, video only, 357.83MiB
137          mp4        1920x1080  DASH video  818k , avc1.640028, 30fps, video only, 375.13MiB
17           3gp        176x144    small , mp4v.20.3, mp4a.40.2@ 24k
36           3gp        320x180    small , mp4v.20.3, mp4a.40.2
43           webm       640x360    medium , vp8.0, vorbis@128k
18           mp4        640x360    medium , avc1.42001E, mp4a.40.2@ 96k
22           mp4        1280x720   hd720 , avc1.64001F, mp4a.40.2@192k (best)

Je me tourne donc vers le code 251 pour récupérer le flux Opus dans un conteneur Webm :

[seboss666@seboss666-ltp ~/Téléchargements ]$ youtube-dl -f 251 https://www.youtube.com/watch?v=MT0Bqzd3SRY
[youtube] MT0Bqzd3SRY: Downloading webpage
[youtube] MT0Bqzd3SRY: Downloading video info webpage
[youtube] MT0Bqzd3SRY: Extracting video information
WARNING: unable to extract uploader nickname
[youtube] MT0Bqzd3SRY: Downloading js player en_US-vfln4fWRV
[youtube] MT0Bqzd3SRY: Downloading MPD manifest
[download] Destination: Epic Compilation-MT0Bqzd3SRY.webm
[download] 100% of 114.09MiB in 01:42

J’ai le donc le fichier Webm, je voudrais que ça soit maintenant un fichier exploitable par des lecteurs de musique (Amarok, Clementine, RythmBox, Banshee), mais je veux éviter de recompresser au passage, ce qui dégraderait la qualité. ffmpeg sait faire, c’est cool :

[seboss666@seboss666-ltp ~/Téléchargements ]$ ffmpeg -i Epic\ Compilation-MT0Bqzd3SRY.webm -vn -acodec copy Epic\ Compilation-MT0Bqzd3SRY.opus
ffmpeg version 3.3.2 Copyright (c) 2000-2017 the FFmpeg developers
  built with gcc 7.1.1 (GCC) 20170630
  configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-avisynth --enable-avresample --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libass --enable-libbluray --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxvid --enable-shared --enable-version3
  libavutil      55. 58.100 / 55. 58.100
  libavcodec     57. 89.100 / 57. 89.100
  libavformat    57. 71.100 / 57. 71.100
  libavdevice    57.  6.100 / 57.  6.100
  libavfilter     6. 82.100 /  6. 82.100
  libavresample   3.  5.  0 /  3.  5.  0
  libswscale      4.  6.100 /  4.  6.100
  libswresample   2.  7.100 /  2.  7.100
  libpostproc    54.  5.100 / 54.  5.100
Input #0, matroska,webm, from 'Epic Compilation-MT0Bqzd3SRY.webm':
  Metadata:
    encoder         : google
  Duration: 02:00:34.82, start: -0.007000, bitrate: 132 kb/s
    Stream #0:0(eng): Audio: opus, 48000 Hz, stereo, fltp (default)
Output #0, opus, to 'Epic Compilation-MT0Bqzd3SRY.opus':
  Metadata:
    encoder         : Lavf57.71.100
    Stream #0:0(eng): Audio: opus, 48000 Hz, stereo, fltp (default)
    Metadata:
      encoder         : Lavf57.71.100
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
Press [q] to stop, [?] for help
size=  115227kB time=02:00:34.82 bitrate= 130.5kbits/s speed=2.79e+03x    
video:0kB audio:114328kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.786729%
[seboss666@seboss666-ltp ~/Téléchargements ]$ file Epic\ Compilation-MT0Bqzd3SRY.opus 
Female Metal Vocals _ Epic Compilation-MT_Bqzd3SRY.opus: Ogg data, Opus audio,

Deux petites choses à retenir ici : par principe, je demande à retirer tout flux vidéo qui pourrait se trouver là (-vn), et je dis à ffmpeg de ne pas recompresser/réencoder le flux (-acodec copy). Simple, efficace, et on a notre flux exploitable. Au passage on gagne 1Mo à passer à un conteneur audio/vidéo à audio pur (ogg en l’occurrence qui avait d’abord été créé pour embarquer du Vorbis, un autre codec audio qu’on comparait au MP3 à sa création).

Deuxième étape : les coups de ciseaux logiciel

Bien, maintenant on veut un fichier par morceau, ce qui est bien plus pratique, si par exemple comme moi vous laissez l’autoradio de la voiture en mode shuffle, ce qui peut conduire à 4h de route sans entendre deux fois le même artiste ou le même morceau; et ça c’est cool.

Dans mon cas j’ai les timecodes, mais si vous ne les avez pas, vous pouvez toujours utiliser Audacity pour visualiser le son du fichier et déterminer où couper, l’ouverture prend du temps (un peu plus d’une minute dans mon cas), mais voilà le résultat :

Alors oui, certains me diront qu’on pourrait potentiellement tout faire avec Audacity, je ne sais pas s’il permet d’éviter de recompresser, sachant que techniquement il « importe » le fichier quand on l’ouvre pour pouvoir le manipuler (et donc recompresse à l’exportation). Et puis c’est pas assez geek, mince. Bref, ici, vous avez compris que je vais essayer d’extraire le morceau qui semble un peu plus calme que les autres (moins saturé).

Le morceau commence à 26:48 et termine à 33:21, ce qui donne un morceau de 6 minutes 33 secondes. Ce sont ces éléments que l’on va passer à ffmpeg pour faire le taf :

ffmpeg -i Epic\ Compilation-MT0Bqzd3SRY.opus -ss 00:26:48.0 -t 00:06:33.0 -acodec copy Epic\ Compilation-Track06.opus

On passe donc la position de départ (-ss), la durée du morceau (-t) et comme tout à l’heure on indique de ne pas réencoder (-acodec copy). A noter que j’indique un .0 à la fin de la seconde, en effet, lors d’une première mesure avec Audacity j’étais plutôt sur une base de 6 minutes 32 secondes et 5 dixièmes. J’aurai pu donc indiquer une durée de 00:06:32.5.

L’opération est très rapide, et si on vérifie le fichier de sortie :

[seboss666@seboss666-ltp ~/Téléchargements ]$ ffmpeg -i Epic\ Compilation-Track06.opus 
ffmpeg version 3.3.2 Copyright (c) 2000-2017 the FFmpeg developers
  built with gcc 7.1.1 (GCC) 20170630
  configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-avisynth --enable-avresample --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libass --enable-libbluray --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxvid --enable-shared --enable-version3
  libavutil      55. 58.100 / 55. 58.100
  libavcodec     57. 89.100 / 57. 89.100
  libavformat    57. 71.100 / 57. 71.100
  libavdevice    57.  6.100 / 57.  6.100
  libavfilter     6. 82.100 /  6. 82.100
  libavresample   3.  5.  0 /  3.  5.  0
  libswscale      4.  6.100 /  4.  6.100
  libswresample   2.  7.100 /  2.  7.100
  libpostproc    54.  5.100 / 54.  5.100
Input #0, ogg, from 'Epic Compilation-Track06.opus':
  Duration: 00:06:33.02, start: 0.020000, bitrate: 133 kb/s
    Stream #0:0(eng): Audio: opus, 48000 Hz, stereo, fltp
    Metadata:
      LANGUAGE        : eng
      ENCODER         : Lavf57.71.100

Une petite passe dans Audacity pour confirmer la bonne opération :

Et voilà. Ne reste plus qu’à faire la même avec les autres morceaux, à rajouter les noms et pourquoi pas des tags, convertir dans un autre format si vous ne pouvez pas lire de l’Opus dans votre voiture par exemple (préférez un bitrate assez élevé en destination pour ne pas trop distordre les morceaux et perdre en qualité, on part d’un Opus 160kbps en VBR tout de même).

Attention, on se rend compte que le morceau final ne fait que 6:32 et pas 6:33 comme je l’ai indiqué. Ça peut arriver (j’ai déjà eu l’occasion d’avoir les détails technique du pourquoi, j’ai pas tout compris et c’était en anglais), si vous avez également ce genre d’écart et qu’il vous manque quelques notes à la fin, n’hésitez pas à ajuster avec les dixièmes de secondes voire rajouter une seconde, étant donné la vitesse du traitement, ça ne sera pas long à refaire.

Un outil vraiment cool, et multi-plateforme en plus

En effet, même les windowsiens peuvent expérimenter ce que je présente aujourd’hui puisqu’il existe une version compilée pour eux. C’est d’ailleurs un outil recommandé si vous utilisez également Youtube-dl aussi sous Windows…

Cette trousse à outils est d’ailleurs au cœur d’autres logiciels plus ou moins connus de nos jours. J’ai évoqué en introduction l’aspect couteau suisse, ce n’est pas pour rien, et c’est une expression que j’ai déjà pu employer à propos de VLC Media Player, qui utilise la bibliothèque comme base pour son support des différents formats existants de vidéo et d’audio. On le retrouve aussi dans différents outils de conversion vidéo, soit de manière explicite, soit un peu plus masqué (ce qui est souvent le cas sous Windows malheureusement). L’utilitaire Youtube Downloader HD l’exploite lorsqu’il a besoin de fusionner des flux DASH si vous avez sélectionné une résolution type Full HD/4K.

Bref, c’est un très bon outil qu’il faut garder sous la main en cas de besoin (surtout sa documentation), la preuve, ici j’ai présenté comment découper, mais on peut aussi fusionner :P.

Bash : compter les heures, ajouter un 0 devant une heure inférieure à 10

dimanche 23 juillet 2017 à 10:30

J’ai été confronté à un problème simple à la base (pour un adminsys) : compter le nombre de requêtes sur un site, heure par heure, à partir d’un fichier access_log Apache. Finalement le problème était un peu plus tricky, et ça demande un peu plus d’explications qui ne tiennent pas dans une astuce diverse.

 Le log apache est facile à lire via bash, il contient la date et l’heure dans un format que grep n’aura aucun mal à identifier. Je shoot donc un one-liner rapide :

for i in {0..23}; do echo -ne "${i}h : $(grep "2017\:$i" access.log |wc -l)\n"; done

Simple, rapide, efficace, le quotidien du sysadmin quoi. Enfin efficace… Le résultat est sur le coup surprenant :

0h : 177026
1h : 294004
2h : 84661
3h : 0
4h : 0
5h : 0
6h : 0
7h : 0
8h : 0
9h : 0
10h : 24228
11h : 29431
12h : 28586
13h : 34634
14h : 34067
15h : 32441
16h : 28779
17h : 30497
18h : 27450
19h : 23891
20h : 21230
21h : 19748
22h : 21587
23h : 22096

Damned. J’imagine mal un site public sous WordPress capable de ne pas subir la moindre requête pendant plusieurs heures, entre monitoring, intervention client ou robots d’indexation. J’ai donc fait une connerie. Une connerie vite identifiée vu le pépin : l’heure est notée sur deux chiffres dans les logs, hors il n’y a que 0,1,2 qui peuvent matcher dans ce cas, ce qui explique les trous de 3 à 9.

Certains furieux trouveraient certainement une regex ultra cradingue à exploiter à la place (et faut pas hésiter à partager en commentaires), j’ai fait un peu différent (c’est surtout pour ça que je voulais en parler), à savoir passer deux ensembles de nombres à for :

for i in 0{1..9} {10..23}; do echo -ne "${i}h : $(grep "2017\:$i" starafrica-20170628.log |wc -l)\n"; done
01h : 24983
02h : 19756
03h : 14581
04h : 11723
05h : 10904
06h : 11458
07h : 15557
08h : 17999
09h : 21149
10h : 24228
11h : 29431
12h : 28586
13h : 34634
14h : 34067
15h : 32441
16h : 28779
17h : 30497
18h : 27450
19h : 23891
20h : 21230
21h : 19748
22h : 21587
23h : 22096

C’est beaucoup mieux.

Oui, on peut indiquer deux plages de valeurs sans avoir à faire deux boucles. Une bizarrerie découverte au hasard d’une recherche de solution à mon petit souci. En fait, dans la pratique les deux ensembles sont décomposés par Bash pour ne constituer qu’une seule liste, ce qui donne l’équivalent de la syntaxe suivante, bien plus longue et lente à écrire :

for i in "00" "01" "02" "03" "04" "05" ... "23"; do ...

Ce langage ne cesse de m’étonner, j’ai l’impression qu’on pourrait y passer une vie sans en avoir fait le tour.

Bon ça m’empêchera pas de continuer à m’intéresser à PHP et Python 😛