Créer des fichiers audio de bruit blanc uniques avec FFmpeg
- Linux
Il y a quelques temps déjà, j’avais eu besoin de créer des fichiers de grandes tailles pour le boulot, peu m’importait le contenu du fichier, il n’y avait que le poids qui m’importait. Aujourd’hui, toujours pour le boulot, j’ai besoin de créer des fichiers audios valides avec deux contraintes :
- les fichiers doivent toujours uniques,
- je dois pouvoir configurer la taille des fichiers.
Je ne connais que deux outils capable de manipuler des fi,hiers audios et générer du contenu audio, sox et FFmpeg (peut être en existe-t-il d’autres, j e n’ai pas cherché). Comme FFmpeg est plus orienté vers la vidéo je pensais utiliser sox, mais le problème de sox est que son architecture ne permet pas de garantir l’unicité des contenus générés, alors que FFmpeg peux utiliser un algorithme avec des données aléatoires ce qui garanti que les contenus ne seront jamais identiques.
Comme d’habitude pour ce type d’utilitaire en ligne de commande l’installation est ultra simple que ce soit pour Linux ou MacOS :
$> brew install ffmpeg
Ensuite, pour créer un fichier au format wav qui contient 10 secondes de bruit blanc, il suffit d’utiliser la commande suivante :
$> ffmpeg -f lavfi -i "anoisesrc=color=white:duration=10" noise.wav
En quelques millisecondes, vous aurez un fichier audio au format wav avec du bruit blanc. Vous pouvez ajuster la durée du fichier généré seslon vos besoins, vous pouvez également changer le type de couleur pour votre bruit (white, pink, brown, green, blue) et enfin le type de fichier. Pour changer le format de sortie du fichier, il suffit de changer l’extension du fichier pour générer un FLAC, un ogg, un mp3, FFmpeg supporte de nombreux formats.
Précision importante pour les formats audio sans pertes, tous les fichiers auront le même poids mais ils seront bien différents. Pour vérifier cela, j’ai utilisé un petit script qui prenait en paramètres un chiffre pour générer des fichiers et qui calculait le md5 de chaque fichier avant de vérifier que le nombre de md5 correspondait au nombre de fichier généré. Je vous partage le script :
#!/bin/bash
DEFAULT_FILE_COUNT=10
FILE_TO_GENERATE=${1:-DEFAULT_FILE_COUNT}
TEST_FOLDER="test"
FORMAT="flac"
mkdir $TEST_FOLDER 2> /dev/null
if [ "$?" != "0" ]; then
echo "Cleaning folder \"$TEST_FOLDER\""
rm $TEST_FOLDER/* 2> /dev/null
else
echo "Created folder \"$TEST_FOLDER\""
fi
for (( index = 1; index <= $FILE_TO_GENERATE; i++ ))
do
ffmpeg -f lavfi -i "anoisesrc=color=white:duration=10" "./${TEST_FOLDER}/file_${index}.${FORMAT}" 2> /dev/null
done
HASHES=()
for file in `ls $TEST_FOLDER`
do
HASHES+=($(md5sum "${TEST_FOLDER}/${file}" | awk '{ print $1 }'))
done
MD5_UNIQ_COUNT=$(printf "%s\n" "${HASHES[@]}" | sort | uniq | wc -l)
echo "Fichiers générés : $FILE_TO_GENERATE"
echo "MD5 unique : $MD5_UNIQ_COUNT"
J’ai executé le tests quelques fois pour vérifier que les fichiers étaient bien différents et ils l’étaient…
Avec cette commande vous pouvez maintenant très facilement créer des fichiers de différents formats (wav, mp3, flac, ogg,…) à la taille qui vous souhaitez et que ces fichiers soient presque toujours unique pratique d’avoir cette commande dans sa toolbox. FFmpeg est vraiment un utilitaire génial, cet article est un tout petit exemple de pourquoi vous devriez avoir FFmpeg dans votre boite à outils.