I'm working on a captcha solver and I need to use ffmpeg, though nothing works. Windows 10 user.
Warning when running the code for the first time:
C:\Users\user\AppData\Roaming\Python\Python310\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)
Then, when I tried running the script anyway and it required ffprobe, I got the following error:
C:\Users\user\AppData\Roaming\Python\Python310\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 "D:\Scripts\captcha\main.py", line 164, in <module>
main()
File "D:\Scripts\captcha\main.py", line 155, in main
captchaSolver()
File "D:\Scripts\captcha\main.py", line 106, in captchaSolver
sound = pydub.AudioSegment.from_mp3(
File "C:\Users\user\AppData\Roaming\Python\Python310\site-packages\pydub\audio_segment.py", line 796, in from_mp3
return cls.from_file(file, 'mp3', parameters=parameters)
File "C:\Users\user\AppData\Roaming\Python\Python310\site-packages\pydub\audio_segment.py", line 728, in from_file
info = mediainfo_json(orig_file, read_ahead_limit=read_ahead_limit)
File "C:\Users\user\AppData\Roaming\Python\Python310\site-packages\pydub\utils.py", line 274, in mediainfo_json
res = Popen(command, stdin=stdin_parameter, stdout=PIPE, stderr=PIPE)
File "C:\Program Files\Python310\lib\subprocess.py", line 966, in __init__
self._execute_child(args, executable, preexec_fn, close_fds,
File "C:\Program Files\Python310\lib\subprocess.py", line 1435, in _execute_child
hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
FileNotFoundError: [WinError 2] The system cannot find the file specified
I tried downloading it normally, editing environment variables, pasting them in the same folder as the script, installing with pip, tested ffmpeg manually to see if it works and indeed it converted a mkv to mp4, however my script has no intention of running
CodePudding user response:
As you can see by the error message, the issue is with ffprobe
and not ffmpeg
.
Make sure that both ffprobe.exe
and ffmpeg.exe
are in the executable path.
- One option is placing
ffprobe.exe
andffmpeg.exe
in the same folder as the Python script (D:\Scripts\captcha\
in your case). - Other option is adding the folder of
ffprobe.exe
andffmpeg.exe
to Windows system path.
(Placing the EXE files in a folder that is already in the system path may also work).
Debugging Pydub source code (pydub-0.25.1):
The code fails in the following code:
hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
# no special security
None, None,
int(not close_fds),
creationflags,
env,
os.fspath(cwd) if cwd is not None else None,
startupinfo)
Where args = 'ffprobe -of json -v info -show_format -show_streams test.mp3'
We are getting there from:
info = mediainfo_json(orig_file, read_ahead_limit=read_ahead_limit)
From:
prober = get_prober_name()
Here is the source code of get_prober_name
method:
def get_prober_name():
"""
Return probe application, either avconv or ffmpeg
"""
if which("avprobe"):
return "avprobe"
elif which("ffprobe"):
return "ffprobe"
else:
# should raise exception
warn("Couldn't find ffprobe or avprobe - defaulting to ffprobe, but may not work", RuntimeWarning)
return "ffprobe"
The which
method looks for the command is in the execution path (returns None
if it is not found).
As you can see from Pydub sources, ffprobe.exe
should be in the execution path.
Note
For setting FFmpeg path we may also apply something like:import pydub pydub.AudioSegment.converter = 'c:\\FFmpeg\\bin\\ffmpeg.exe' sound = pydub.AudioSegment.from_mp3("test.mp3")
But there is no such option for FFprobe.
CodePudding user response:
If you haven't installed the ffmpeg/ffprobe as @Rotem answered, you can use my ffmpeg-downloader
package:
pip install ffmpeg-downloader
ffdl install --add-path
The --add-path
option adds the installed FFmpeg folder to the user's system path. Re-open the Python window and both ffmpeg and ffprobe will be available to your program.