Задать вопрос
@ComingFlex

Почему не удаётся найти путь?

Если ввести путь в поиск проводника, то файл открывается, но python его не видит. Почему?

from pydub import AudioSegment
import os

def convert_opus_to_wav(opus_file, wav_file):
    AudioSegment.converter = f"{os.getcwd()}\\ffmpeg.exe"
    AudioSegment.ffprobe = f"{os.getcwd()}\\ffprobe.exe"
    # Загрузка файла opus
    audio = AudioSegment.from_file(opus_file, format="opus")

    # Экспорт файла в формате wav
    audio.export(wav_file, format="wav")

# Пример использования
opus_file = r"C:\Users\comin\OneDrive\Рабочий стол\es/my.opus"  # Путь к файлу opus
wav_file = "output.wav"  # Путь для сохранения файла wav

convert_opus_to_wav(opus_file, wav_file)



B:\es>python main.py
B:\Programs\anaconda3\lib\site-packages\pydub\utils.py:170: RuntimeWarning: Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work
  warn("Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work", RuntimeWarning)
B:\Programs\anaconda3\lib\site-packages\pydub\utils.py:198: RuntimeWarning: Couldn't find ffprobe or avprobe - defaulting to ffprobe, but may not work
  warn("Couldn't find ffprobe or avprobe - defaulting to ffprobe, but may not work", RuntimeWarning)
Traceback (most recent call last):
  File "B:\es\main.py", line 17, in <module>
    convert_opus_to_wav(opus_file, wav_file)
  File "B:\es\main.py", line 8, in convert_opus_to_wav
    audio = AudioSegment.from_file(opus_file, format="opus")
  File "B:\Programs\anaconda3\lib\site-packages\pydub\audio_segment.py", line 728, in from_file
    info = mediainfo_json(orig_file, read_ahead_limit=read_ahead_limit)
  File "B:\Programs\anaconda3\lib\site-packages\pydub\utils.py", line 274, in mediainfo_json
    res = Popen(command, stdin=stdin_parameter, stdout=PIPE, stderr=PIPE)
  File "B:\Programs\anaconda3\lib\subprocess.py", line 971, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "B:\Programs\anaconda3\lib\subprocess.py", line 1440, in _execute_child
    hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
FileNotFoundError: [WinError 2] Не удается найти указанный файл
  • Вопрос задан
  • 1214 просмотров
Подписаться 2 Простой 1 комментарий
Решения вопроса 1
PolarOneBear
@PolarOneBear
Проблема может быть тут
AudioSegment.converter = f"{os.getcwd()}\\ffmpeg.exe"
AudioSegment.ffprobe = f"{os.getcwd()}\\ffprobe.exe"


ffmpeg и ffprobe точно установлены? Попробуйте указать абсолютный путь.

opus_file выглядит нормально
И проверьте актуальность pydub, может обновить необходимо.

pydub не может найти ffmpeg и ffprobe
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Vindicar
@Vindicar
RTFM!
AudioSegment.converter = f"{os.getcwd()}\\ffmpeg.exe"

Ты уверен, что файл лежит в текущем каталоге? Это не то же самое, что каталог программы.
Если тебе нужен каталог программы, лучше его и взять:
from pathlib import Path
import sys 

SCRIPT_DIR = Path(sys.argv[0]).parent.resolve()
FFMPEG = SCRIPT_DIR / 'ffmpeg.exe'  # чтобы не париться с разделителем каталогов (/ или \)
Ответ написан
Комментировать
NeiroNx
@NeiroNx
Программист
Винду не обманишь, раз говорит что нету, значит нету там где его ищут.
Ответ написан
@pddev
Не нужно прописывать полный путь к ffmpeg.exe, т.к. он лежит в другом каталоге. Когда не пишешь путь - система пытается найти его в текущем рабочем каталоге, а если не найден - начинает искать по путям, прописанным в переменной среды PATH.

Т.е. вместо
s = f"{os.getcwd()}\\ffmpeg.exe"
os.system(s)

> "C:\workdir\ffmpeg.exe" не является внутренней или внешней командой, исполняемой программой или пакетным файлом.


...нужно делать так:

s = "ffmpeg.exe"
os.system(s)

> ffmpeg version 6.0-full_build-www.gyan.dev Copyright (c) 2000-2023 the FFmpeg developers
 >  built with gcc 12.2.0 (Rev10, Built by MSYS2 project)
 > ....


И всё должно заработать.

P.S. Ну что - помогло?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы