CyberSDF

Reprenez la main sur votre numérique

Whisper : « FileNotFoundError: [Errno 2] No such file or directory: ‘ffmpeg’ »

un petit serveur domestique pose sur une etagere, diode allumee, piece calme

openai-whisper 20250625, publié le 26 juin 2025, ne décode aucun audio lui-même : chaque transcription lance le binaire ffmpeg en sous-processus, et sans lui la commande s’arrête après le téléchargement du modèle, sur cette sortie.

Sommaire
  1. L’erreur sort après le téléchargement du modèle, pas au démarrage
  2. La commande passée à ffmpeg est toujours la même, audio ou vidéo
  3. Cinq étapes, de apt install ffmpeg au premier fichier .txt
  4. ffmpeg installé, l’erreur maintenue : le PATH du processus qui lance whisper
  5. « Failed to load audio: » remplace FileNotFoundError quand ffmpeg tourne et échoue
  6. Un échec que rien ne signale : whisper sort avec le code 0
  7. E: Unable to locate package ffmpeg sur Ubuntu 24.04
  8. Le modèle turbo par défaut dépasse la mémoire d’un poste sans carte graphique
  9. Questions fréquentes sur ffmpeg et whisper
Traceback (most recent call last):
  ...
FileNotFoundError: [Errno 2] No such file or directory: 'ffmpeg'

Skipping reunion.m4a due to FileNotFoundError: [Errno 2] No such file or directory: 'ffmpeg'

La première termine la pile d’appels de whisper/audio.py : subprocess.run cherche un programme nommé ffmpeg dans le PATH et n’en trouve aucun. La seconde vient de cli(), qui rattrape l’exception fichier par fichier. Le paquet à installer est ffmpeg 7:5.1.9-0+deb12u1 sur Debian 12 bookworm et ffmpeg 7:6.1.1-3ubuntu5 sur Ubuntu 24.04 LTS, ce dernier dans le composant universe.

L’erreur sort après le téléchargement du modèle, pas au démarrage

La fonction cli() charge le modèle une fois, avant la boucle qui parcourt les fichiers audio. Sur une installation neuve, openai-whisper 20250625 part donc chercher son modèle par défaut, turbo : 809 millions de paramètres et environ 6 Go de mémoire graphique annoncés par le dépôt openai/whisper, rangés dans le fichier ~/.cache/whisper/large-v3-turbo.pt. Le FileNotFoundError n’arrive qu’ensuite, à la première seconde d’audio envoyée à ffmpeg.

Le fichier déjà récupéré n’est pas jeté : sa somme sha256 est comparée à celle inscrite dans l’URL du dépôt, et un téléchargement interrompu produit l’avertissement … exists, but the SHA256 checksum does not match; re-downloading the file avant un nouveau transfert. La comparaison se fait sans erreur de recopie avec un vérificateur de checksum.

La commande passée à ffmpeg est toujours la même, audio ou vidéo

La fonction load_audio() de whisper/audio.py construit une ligne fixe, identique pour la ligne de commande et pour l’API Python.

ffmpeg -nostdin -threads 0 -i fichier.m4a -f s16le -ac 1 -acodec pcm_s16le -ar 16000 -

Deux conséquences en découlent. Tout format que la version locale de ffmpeg sait ouvrir passe, m4a, mp3, ogg, flac, wav, ou la piste sonore d’un mp4, et le rééchantillonnage à 16 000 Hz mono est son travail, la constante SAMPLE_RATE = 16000 étant figée dans whisper/audio.py. Le binaire reste obligatoire face à un WAV déjà conforme : whisper ne lit aucun audio sans lui.

Cinq étapes, de apt install ffmpeg au premier fichier .txt

Les noms de version de ffmpeg viennent des dépôts : 7:5.1.9-0+deb12u1 pour Debian 12 bookworm, 7:7.1.5-0+deb13u1 pour Debian 13 trixie, 7:6.1.1-3ubuntu5 pour Ubuntu 24.04 LTS.

  1. Constatez l’absence du binaire et relevez la version de Python.

    command -v ffmpeg
    ffmpeg -version
    python3 --version
    

    Ce que vous devez voir : command -v ffmpeg ne renvoie rien et se termine avec le code 1, ffmpeg -version affiche une ligne terminée par bash: ffmpeg: command not found, et python3 --version répond Python 3.11.2 sur Debian 12 bookworm ou Python 3.12.3 sur Ubuntu 24.04 LTS.

  2. Installez ffmpeg depuis les dépôts de la distribution, sans ajouter de dépôt tiers.

    sudo apt update
    sudo apt install ffmpeg
    ffmpeg -version
    

    Ce que vous devez voir : la ligne Setting up ffmpeg (7:5.1.9-0+deb12u1) ... sur Debian 12, Setting up ffmpeg (7:6.1.1-3ubuntu5) ... sur Ubuntu 24.04, puis une première ligne qui commence par ffmpeg version et se poursuit par les versions de libavutil, libavcodec, libavformat et libswresample. Un E: Unable to locate package ffmpeg à la place signale un index incomplet.

  3. Créez un environnement virtuel : hors venv, pip refuse d’écrire dans le Python du système depuis PEP 668.

    sudo apt install python3-venv python3-pip
    python3 -m venv ~/whisper-venv
    source ~/whisper-venv/bin/activate
    python -m pip install -U openai-whisper
    

    Ce que vous devez voir : l’invite gagne le préfixe de l’environnement, (whisper-venv) vous@machine:~$, puis pip termine sur Successfully installed openai-whisper-20250625 …, la liste comprenant torch, tiktoken, numba et tqdm. La commande whisper est le script de lancement déposé dans ~/whisper-venv/bin/. Si l’environnement neuf répond No module named pip, complétez avec python -m ensurepip --upgrade.

  4. Transcrivez un premier fichier, avec un dossier de sortie explicite.

    whisper reunion.m4a --model small --language fr --output_format txt --output_dir ~/transcriptions
    

    Ce que vous devez voir : les segments horodatés au format [00:00.000 --> 00:04.000] texte reconnu, écrits tant que --verbose garde sa valeur par défaut True, puis le retour de l’invite. Comme --language fr est fourni, aucune détection n’est lancée. Sans lui, la sortie commence par Detecting language using up to the first 30 seconds. Use `--language` to specify the language, puis par Detected language: French.

  5. Contrôlez les fichiers écrits et ce que ffmpeg lit réellement de la source.

    ls -l ~/transcriptions
    ffprobe -v error -select_streams a:0 -show_entries stream=sample_rate,channels -of default=noprint_wrappers=1 reunion.m4a
    head -n 3 ~/transcriptions/reunion.txt
    

    Ce que vous devez voir : reunion.txt dans la liste, --output_format txt n’écrivant qu’un fichier là où la valeur par défaut all en produit six, avec les extensions txt, vtt, srt, tsv, json et jsonl. ffprobe affiche ensuite une ligne sample_rate= et une ligne channels= portant les valeurs du fichier source, par exemple 44100 et 2, que whisper ramène lui-même à 16 000 Hz mono avant l’analyse. head termine sur les premières lignes du texte transcrit.

ffmpeg installé, l’erreur maintenue : le PATH du processus qui lance whisper

Le message ne dit pas que ffmpeg manque sur la machine, il dit que le processus n’a trouvé aucun programme de ce nom dans son PATH. Une tâche cron ou une unité systemd démarre avec un PATH court, /usr/bin:/bin pour cron sur Debian comme sur Ubuntu, qui n’inclut pas /usr/local/bin, emplacement habituel d’une compilation locale de ffmpeg.

command -v ffmpeg
echo "$PATH"
which -a ffmpeg

Ce que vous devez voir : le chemin du binaire et le PATH du shell interactif. Si le premier est vide alors que ffmpeg répondait la veille, comparez avec le PATH de la tâche, ligne de crontab ou directive d’unité. Relever le chemin absolu affiché par which -a et le déclarer côté tâche évite de déplacer des fichiers système.

« Failed to load audio: » remplace FileNotFoundError quand ffmpeg tourne et échoue

RuntimeError: Failed to load audio: ... reunion.m4a: No such file or directory
Skipping reunion.m4a due to RuntimeError: Failed to load audio: ...

Le nom de l’exception sépare les deux diagnostics. FileNotFoundError accuse le binaire absent. RuntimeError: Failed to load audio: signifie que ffmpeg a été lancé, qu’il a renvoyé un code d’erreur, et que tout son stderr est recopié dans le message : la fin de ce bloc nomme l’entrée fautive, fichier déplacé, chemin relatif résolu depuis un autre répertoire, droits de lecture insuffisants, flux tronqué. Le même binaire tranche en lecture seule.

ls -l reunion.m4a
ffmpeg -v error -i reunion.m4a -f null -

Ce que vous devez voir : soit les caractéristiques du flux sans autre ligne, soit le message exact à corriger, reunion.m4a: No such file or directory ou Permission denied. Une erreur de droits se corrige côté fichier, la marche à suivre étant décrite dans permissions et utilisateurs.

Un échec que rien ne signale : whisper sort avec le code 0

cli() attrape l’exception dans sa boucle, imprime la ligne Skipping … et passe au fichier suivant sans appeler sys.exit. La commande se termine donc avec un code de retour 0 alors qu’aucun fichier n’a été transcrit.

whisper reunion.m4a --model small --language fr
echo "$?"

Ce que vous devez voir : la ligne Skipping, puis 0. Un script qui ne teste que le code de retour ne voit pas l’échec ; il doit vérifier la présence du .txt produit ou chercher Skipping dans la sortie, précaution à reprendre dans un enchaînement par lot, comme celui d’une petite routine automatisée.

E: Unable to locate package ffmpeg sur Ubuntu 24.04

Sur Ubuntu, ffmpeg est publié dans le composant universe, que certaines installations minimales n’ont pas activé, et apt répond alors avant toute installation.

E: Unable to locate package ffmpeg

Aucun paquet n’est en cause : l’index consulté ne contient pas ce nom. L’activation du composant universe, suivie de sudo apt update, fait réapparaître le paquet, la mécanique des dépôts étant détaillée dans dépôts APT. Sur Debian 12, ffmpeg est dans main et ce message ne se produit pas.

Le modèle turbo par défaut dépasse la mémoire d’un poste sans carte graphique

Dans openai-whisper 20250625, la valeur par défaut de --model est turbo, un modèle de 809 millions de paramètres qui demande environ 6 Go de mémoire graphique d’après le tableau du dépôt openai/whisper. Sur un poste sans GPU, l’exécution continue en avertissant.

FP16 is not supported on CPU; using FP32 instead

L’avertissement vient de transcribe(), qui bascule les calculs en fp32 quand le modèle tourne sur le processeur, l’option --fp16 valant True par défaut en ligne de commande comme en Python. Le tableau publié par le dépôt donne les quatre valeurs qui décident du choix, mesurées sur GPU A100 et sur de l’anglais.

Modèle Paramètres Mémoire annoncée Vitesse relative
tiny 39 M ~1 Go ~10x
base 74 M ~1 Go ~7x
small 244 M ~2 Go ~4x
medium 769 M ~5 Go ~2x
large 1550 M ~10 Go 1x
turbo 809 M ~6 Go ~8x

Un nom de modèle absent de la version installée échoue avec model should be one of [...] or path to a model checkpoint, message de valid_model_name ; la liste acceptée sort de python -c "import whisper; print(whisper.available_models())". Le choix entre plusieurs moteurs locaux se discute dans la rubrique IA, aux côtés de choisir une IA locale.

Questions fréquentes sur ffmpeg et whisper

Faut-il ffmpeg quand whisper est appelé depuis Python ?

Oui dès que l’entrée est un chemin de fichier, car load_audio() lance le binaire dans les deux interfaces. Seul un appel qui fournit déjà un tableau numpy d’échantillons à 16 000 Hz s’en passe, log_mel_spectrogram() n’ayant alors plus rien à décoder.

Pourquoi l’erreur n’apparaît-elle pas avant le téléchargement du modèle ?

Parce que cli() appelle load_model() avant la boucle audio. Le modèle déjà récupéré reste dans ~/.cache/whisper, donc un second essai après sudo apt install ffmpeg ne repart pas de zéro.

Quelle version de ffmpeg pour Debian 12, Debian 13 et Ubuntu 24.04 ?

ffmpeg 7:5.1.9-0+deb12u1 sur Debian 12 bookworm et 7:7.1.5-0+deb13u1 sur Debian 13 trixie, toutes deux dans main, contre 7:6.1.1-3ubuntu5 sur Ubuntu 24.04 LTS, dans universe. openai-whisper n’impose aucune version minimale de ffmpeg : un binaire 5.1 décode du m4a comme du mp3.

Peut-on transcrire un mp4 ou un flac sans conversion préalable ?

Oui, la ligne construite par whisper décode n’importe quel flux audio du fichier, ffmpeg choisissant la piste sonore quand la vidéo en contient une. Une conversion préalable en WAV 16 kHz mono ne change pas le résultat, elle allège seulement le décodage des longs enregistrements.

Comment changer l’emplacement du cache des modèles ?

L’option --model_dir remplace le dossier par défaut, construit sur $XDG_CACHE_HOME quand cette variable existe, sinon sur ~/.cache/whisper. Un lancement avec sudo cherche le cache de root et retélécharge le modèle : la transcription reste au compte qui possède déjà les fichiers.

du -sh ~/.cache/whisper