Как исправить FileNotFoundError: [WinError 2] Системе не удается найти файл, указанный в AudioSegment.from_mp3 () - PullRequest
0 голосов
/ 13 апреля 2019

Я пытался найти положение пробелов аудио-тишины в аудио-видео, но я не могу обойтись, просто импортировав аудиофайл с 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 Files\JetBrains\PyCharm Community Edition 2019.1.1\helpers\pydev\pydevd.py", line 1741, in <module>
    main()
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2019.1.1\helpers\pydev\pydevd.py", line 1735, in main
    globals = debugger.run(setup['file'], None, None, is_module)
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2019.1.1\helpers\pydev\pydevd.py", line 1135, in run
    pydev_imports.execfile(file, globals, locals)  # execute the script
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2019.1.1\helpers\pydev\_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:\Users\ratee\PycharmProjects\untitled\venv\lib\site-packages\pydub\audio_segment.py", line 716, in from_mp3
    return cls.from_file(file, 'mp3', parameters=parameters)
  File "C:\Users\ratee\PycharmProjects\untitled\venv\lib\site-packages\pydub\audio_segment.py", line 665, in from_file
    info = mediainfo_json(orig_file)
  File "C:\Users\ratee\PycharmProjects\untitled\venv\lib\site-packages\pydub\utils.py", line 263, in mediainfo_json
    res = Popen(command, stdin=stdin_parameter, stdout=PIPE, stderr=PIPE)
  File "C:\Users\ratee\AppData\Local\Programs\Python\Python37\lib\subprocess.py", line 756, in __init__
    restore_signals, start_new_session)
  File "C:\Users\ratee\AppData\Local\Programs\Python\Python37\lib\subprocess.py", line 1155, in _execute_child
    startupinfo)
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2019.1.1\helpers\pydev\_pydev_bundle\pydev_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: \ Users \ ratee \ PycharmProjects \ безымянного \ FFmpeg \ Bin \ ffmpeg.exe

print(my_file) returns

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

audio.mp3

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

audio = AudioSegment.from_mp3 ("audio.mp3")

1 Ответ

0 голосов
/ 13 апреля 2019

Это не ответ, а просто попытка воспроизвести ошибку OP для сравнения.Foldernames x, y используются для сокращения длины пути.

c:\x\lib\site-packages\pydub\utils.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:\x\lib\site-packages\pydub\utils.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:\y\lol.py", line 16, in <module>
    audi = AudioSegment.from_mp3("audio.mp3")
  File "c:\x\lib\site-packages\pydub\audio_segment.py", line 716, in from_mp3
    return cls.from_file(file, 'mp3', parameters=parameters)
  File "c:\x\lib\site-packages\pydub\audio_segment.py", line 665, in from_file
    info = mediainfo_json(orig_file)
  File "c:\x\lib\site-packages\pydub\utils.py", line 263, in mediainfo_json
    res = Popen(command, stdin=stdin_parameter, stdout=PIPE, stderr=PIPE)
  File "c:\x\lib\subprocess.py", line 676, in __init__
    restore_signals, start_new_session)
  File "c:\x\lib\subprocess.py", line 957, in _execute_child
    startupinfo)
FileNotFoundError: [WinError 2] The system cannot find the file specified

Следующий код:

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

1) C: \ y \ ffmpeg \ bin \ ffmpeg.exe

А:

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

дает:

2) audio.mp3

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

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

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

И все будет в порядке.

Обновление 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.
...