我一直在尝试找到视频音频中音频静音空间的位置,但我无法通过在 python 3 中使用 pydub 导入音频文件
我已经尝试将 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)
Run Code Online (Sandbox Code Playgroud)
我希望它将 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
Run Code Online (Sandbox Code Playgroud)
print(AudioSegment.ffmpeg)
Run Code Online (Sandbox Code Playgroud)
按预期返回
C:\Users\ratee\PycharmProjects\untitled\ffmpeg\bin\ffmpeg.exe
print(my_file) returns
Run Code Online (Sandbox Code Playgroud)
按预期返回
音频.mp3
并且代码在我尝试导入音频时停止运行
音频 = AudioSegment.from_mp3("audio.mp3")
出于比较原因,答案的第一部分尝试重现 OP 错误。此后通过更新 1 找到解决方案,最后通过更新 2 找到解决方案。文件夹名称 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)
Run Code Online (Sandbox Code Playgroud)
错误二:
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
Run Code Online (Sandbox Code Playgroud)
下面的代码是检查是否可以找到ffmpeg和ffprobe:
AudioSegment.ffmpeg = os.getcwd()+"\\ffmpeg\\bin\\ffmpeg.exe"
print (AudioSegment.ffmpeg)
Run Code Online (Sandbox Code Playgroud)
1) C:\y\ffmpeg\bin\ffmpeg.exe
和:
my_file = Path("audio.mp3")
print (my_file)
Run Code Online (Sandbox Code Playgroud)
给出:
2) 音频.mp3
建议的解决方案:
包含以下特定代码行来指定 ffmpeg 所在的位置:
pydub.AudioSegment.converter = r"C:\\path\\to\\ffmpeg.exe"其中path\to\是实际路径
你应该没事。
更新1:
您遇到的错误是由于在“my_file”中使用文件名而不是AudioSegment.from_mp3(my_file). 通过提供文件路径,这可以修复引发的[WinError2]问题。
当您运行下面的脚本时,AttributeError: 'WindowsPath' object has no attribute 'read'会发生错误。该错误与 pydub 0.22 版本相关pathlib,并且应该已在github 上讨论的 pydub 0.22 版本中修复。我已经在 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.
Run Code Online (Sandbox Code Playgroud)
更新2:
由于更新 1 解决了平台版本问题,如果更新 1 中的解决方案 1 尚未解决,则更新 2 会同时解决错误一和错误二中的问题。
在导入语句之后直接在脚本中包含以下行:
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
Run Code Online (Sandbox Code Playgroud)
打印输出显示您是否已包含 FFmpeg 文件的位置。如果没有,您需要重新启动 Windows,因为当您当前处于 Python 环境/编辑器中时,Windows 环境路径不会更新。
就我而言,重新启动后c:\y\FFmpeg\出现在“PATH”下,错误一和错误二中的所有警告都消失了。
| 归档时间: |
|
| 查看次数: |
24040 次 |
| 最近记录: |