Как исправить ошибку FileNotFoundError: [Ошибка WinError 2] Система не может найти файл, указанный с помощью AudioSegment.from_mp3()

#python-3.x #pydub

#python-3.x #pydub

Вопрос:

Я пытался найти положение пробелов звуковой тишины в аудио видео, но я не могу пройти мимо простого импорта аудиофайла с помощью pydub в python 3

Я уже пытался изменить каталог, который pydub проверяет на наличие ffmpeg, на один в проекте, и файл находится в каталоге, из которого я запускаю скрипт, но, похоже, он по-прежнему возвращает ту же ошибку.

 from moviepy import editor
from pydub import silence, AudioSegment
from pathlib import Path
import os
AudioSegment.converter = r"C:\Users\ratee\PycharmProjects\untitled\ffmpeg\bin\ffmpeg.exe"
vid = editor.VideoFileClip("video.mp4")
print(AudioSegment.ffmpeg)
my_file = Path("audio.mp3")
if not my_file.is_file():
    vid.audio.write_audiofile("audio.mp3")
audio = AudioSegment.from_mp3("audio.mp3")
print(audio)
  

Я ожидаю, что он сохранит аудиосегмент mp3 в переменной audi , но он возвращает:

 Traceback (most recent call last):
  File "C:Program FilesJetBrainsPyCharm Community Edition 2019.1.1helperspydevpydevd.py", line 1741, in <module>
    main()
  File "C:Program FilesJetBrainsPyCharm Community Edition 2019.1.1helperspydevpydevd.py", line 1735, in main
    globals = debugger.run(setup['file'], None, None, is_module)
  File "C:Program FilesJetBrainsPyCharm Community Edition 2019.1.1helperspydevpydevd.py", line 1135, in run
    pydev_imports.execfile(file, globals, locals)  # execute the script
  File "C:Program FilesJetBrainsPyCharm Community Edition 2019.1.1helperspydev_pydev_imps_pydev_execfile.py", line 18, in execfile
    exec(compile(contents "n", file, 'exec'), glob, loc)
  File "C:/Users/ratee/PycharmProjects/untitled/fuc.py", line 12, in <module>
    song = AudioSegment.from_mp3("audio.mp3")
  File "C:UsersrateePycharmProjectsuntitledvenvlibsite-packagespydubaudio_segment.py", line 716, in from_mp3
    return cls.from_file(file, 'mp3', parameters=parameters)
  File "C:UsersrateePycharmProjectsuntitledvenvlibsite-packagespydubaudio_segment.py", line 665, in from_file
    info = mediainfo_json(orig_file)
  File "C:UsersrateePycharmProjectsuntitledvenvlibsite-packagespydubutils.py", line 263, in mediainfo_json
    res = Popen(command, stdin=stdin_parameter, stdout=PIPE, stderr=PIPE)
  File "C:UsersrateeAppDataLocalProgramsPythonPython37libsubprocess.py", line 756, in __init__
    restore_signals, start_new_session)
  File "C:UsersrateeAppDataLocalProgramsPythonPython37libsubprocess.py", line 1155, in _execute_child
    startupinfo)
  File "C:Program FilesJetBrainsPyCharm Community Edition 2019.1.1helperspydev_pydev_bundlepydev_monkey.py", line 452, in new_CreateProcess
    return getattr(_subprocess, original_name)(app_name, patch_arg_str_win(cmd_line), *args)
FileNotFoundError: [WinError 2] The system cannot find the file specified
  
 print(AudioSegment.ffmpeg)
  

возвращает, как и ожидалось

C:UsersrateePycharmProjectsuntitledffmpegbinffmpeg.exe

 print(my_file) returns
  

возвращает, как и ожидалось

audio.mp3

и код перестает выполняться в тот момент, когда я пытаюсь импортировать аудио

audio = AudioSegment.from_mp3(«audio.mp3»)

Комментарии:

1. выполнили ли вы print(AudioSegment.ffmpeg) проверку print(my_file) и, и если да, соответствуют ли они тому, что вы ожидаете?

2. Также, пожалуйста, опубликуйте, какие print(os.getcwd() "\ffmpeg\bin\ffmpeg.exe") результаты. Соответствует ли он тому, что вы ожидаете.

3. Скрипт выдает: NameError: name 'vid' is not defined . Idf помещает случайный файл mp3 с именем audio,mp3 I могу воспроизвести ошибку, которую я опубликую в качестве ответа, но, очевидно, это не ответ. Этим мы можем проверить, что пошло не так.

4. Я добавил необходимые изменения :))

Ответ №1:

Первая часть ответа пытается воспроизвести ошибку OPs для сравнения. После этого находим решение с помощью обновления 1 и, наконец, обновления 2. Имена папок x, y используются для сокращения длины пути.

Его воспроизведение выдало мне следующие ошибки:

Ошибка первая:

 c:xlibsite-packagespydubutils.py:165: 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)
c:xlibsite-packagespydubutils.py:193: 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 "C:ylol.py", line 16, in <module>
        audi = AudioSegment.from_mp3("audio.mp3")
      File "c:xlibsite-packagespydubaudio_segment.py", line 716, in from_mp3
        return cls.from_file(file, 'mp3', parameters=parameters)
      File "c:xlibsite-packagespydubaudio_segment.py", line 665, in from_file
        info = mediainfo_json(orig_file)
      File "c:xlibsite-packagespydubutils.py", line 263, in mediainfo_json
        res = Popen(command, stdin=stdin_parameter, stdout=PIPE, stderr=PIPE)
      File "c:xlibsubprocess.py", line 676, in __init__
        restore_signals, start_new_session)
      File "c:xlibsubprocess.py", line 957, in _execute_child
        startupinfo)
    FileNotFoundError: [WinError 2] The system cannot find the file specified
  

Следующий код предназначен для проверки того, могут ли быть найдены ffmpeg и ffprobe:

 AudioSegment.ffmpeg = os.getcwd() "\ffmpeg\bin\ffmpeg.exe"
print (AudioSegment.ffmpeg)
  

1) C:yffmpegbinffmpeg.exe

И:

 my_file = Path("audio.mp3")
print (my_file) 
  

выдает:

2) audio.mp3

Предлагаемое решение:

Включите следующую конкретную кодовую строку, чтобы указать, где находится ffmpeg:

pydub.AudioSegment.converter = r"C:\path\to\ffmpeg.exe" где pathto — это фактический путь

И все должно быть в порядке.

Обновление 1:

Возникшая ошибка связана с использованием имени файла в «my_file», а не «filepath», как того требует AudioSegment.from_mp3(my_file) . Предоставляя путь к файлу, это устраняет возникшую проблему [WinError2].

При запуске приведенного ниже скрипта AttributeError: 'WindowsPath' object has no attribute 'read' возникает ошибка. Ошибка связана pathlib и должна была быть исправлена в версии pydub 0.22, как описано здесь, на github. Я поднял этот вопрос на Github.

Возникшая file.read() проблема связана с версией python (2.7 против 3.5), поскольку ее больше нет во встроенной библиотеке. Поэтому .read() возникает AttributeError: 'WindowsPath' object has no attribute 'read' ошибка.

 from pydub import silence, AudioSegment
from pathlib import Path

import os, sys

print (sys.version)

#AudioSegment.ffmpeg = os.getcwd() "\ffmpeg\bin\ffmpeg.exe"

AudioSegment.converter = r"C:\x\build\win\64\ffmpeg.exe"
AudioSegment.ffprobe   = r"C:\x\build\win\64\ffprobe.exe"

#print (AudioSegment.converter)
#print (AudioSegment.ffprobe)

my_file = Path("C:\y\audio.mp3")

print ('ID1 : %s' % my_file) 

audio = AudioSegment.from_mp3(my_file)    # solves ***[WinError2]*** issue.
  

Обновление 2:

Поскольку обновление 1 решает проблему с версией платформы, обновление 2 решает проблему с ошибкой один и два одновременно, если решение 1 в обновлении 1 еще не решает ее.

Включите в свой скрипт непосредственно после инструкций import следующие строки:

 
mypaths = os.getenv('PATH').split(';')  # replace 'PATH' by 'your search path' if needed.

 for i in mypaths:
     if i.find('python'):
         print(i)
  

Распечатка показывает, указали ли вы местоположение файлов FFmpeg или нет. Если нет, вам нужно перезагрузить Windows из-за того, что пути среды Windows не обновляются, пока вы находитесь в среде / редакторе python.

В моем случае после перезагрузки c:yFFmpeg появился раздел «ПУТЬ», и все предупреждения об ошибках один и два исчезли.

Комментарии:

1. Спасибо за разъяснение для всех. Я попробовал предложенное вами решение, но, боюсь, оно не сработало

Ответ №2:

Я столкнулся с той же проблемой.

 pydub.AudioSegment.converter = os.getcwd()  "\ffmpeg.exe"                    
pydub.AudioSegment.ffprobe   = os.getcwd()  "\ffprobe.exe"
sound = pydub.AudioSegment.from_mp3(os.getcwd() "\sample.mp3")
  

И все в порядке

Ответ №3:

Я столкнулся с той же проблемой, но, по-видимому, даже после добавления ffmpeg пути он по-прежнему выдает ту же ошибку. Я попробовал это Linux без дополнительных команд, вроде AudioSegment.converter = 'pathtoffmpeg' все работает нормально, проблема в Windows IDE (pycharm, spyder и т. Д.). Попробуйте запустить скрипт непосредственно из вашего приглашения (anaconda, cmd и т. Д.) В Windows. Он должен работать.

Ссылка: https://github.com/jiaaro/pydub/issues/319