Hier, je voulais renouveler un peu la musique présente sur mon baladeur mp3 (bouh, le méchant pirate !) Désormais, on peut mettre beaucoup de musique, mais sur un baladeur, la qualité, on s'en bat les steaks (enfin, je m'en bats les steaks).
Du coup, je me suis mis en tête de "dégrader" les quelques morceaux lossless dont je dispose afin de le mettre sur mon baladeur.
Pour ça, j'ai utilisé ffmpeg, normal. Rien de bien compliqué, des dizaines d'explications sont disponibles un peu partout.
Mais là où j'ai été déçu, c'est qu'il n'utilisait pas tous les cores de mon CPU, et bon, je trouvais pas ça bien. Du coup, je me suis concocté un petit script que je vous dévoile ici au cas où ça peut servir à quelqu'un.
#!/bin/bash
cpt=0
nb_core=$(grep -c processor /proc/cpuinfo)
ttw=5
cat flac_list | while read line
do
file=$(sed -r "s/ - /-/g;s/ +/_/g;s/.flac$/.ogg/" <<<$line)
ffmpeg -i "$line" \
-acodec libvorbis -ac 2 -ab 192k $file &
last=$!
if [ $(($cpt % $nb_core)) -eq 0 ]
then
while ps $last 2>&1 >/dev/null
do
sleep $ttw
done
fi
cpt=$(($cpt + 1))
done
Bon, je ne reviendrai pas sur la partie encodage, vous remarquerez également que je "nettoie" le chemin (on vire les espaces).
Par contre, voici le principe : on lance en backgroud nos traitements. Arrivé à nb_core itérations, on attend que le dernier traitement lancé se termine.
Et voilà, tous nos core travaillent !
Il y a peut-être plus propre/optimisé, mais j'ai pondu ça en 5 minutes, et puis j'ai eu le résultat que j'attendais, à savoir mes 4 cores à 100% avec des creux durant lesquels on observe que les n-3, n-2 et n-1 traitements se terminent avant de remonter à 100% sur les 4 cores.