Ziirish's Home :: Blog

Ziirish's Pub

 
 

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.