The system cannot find the file specified with ffmpeg
Question:
In the process of using the ffmpeg module to edit video files i used the subprocess module
The code is as follows:
#trim bit
import subprocess
import os
seconds = "4"
mypath=os.path.abspath('trial.mp4')
subprocess.call(['ffmpeg', '-i',mypath, '-ss', seconds, 'trimmed.mp4'])
Error message:
Traceback (most recent call last):
File "C:moviepy-masterresizer.py", line 29, in <module>
subprocess.call(['ffmpeg', '-i',mypath, '-ss', seconds, 'trimmed.mp4'])
File "C:Python27libsubprocess.py", line 168, in call
return Popen(*popenargs, **kwargs).wait()
File "C:Python27libsubprocess.py", line 390, in __init__
errread, errwrite)
File "C:Python27libsubprocess.py", line 640, in _execute_child
startupinfo)
WindowsError: [Error 2] The system cannot find the file specified
After looking up similar problems i understood that the module is unable to pick the video file because it needs its path, so i took the absolute path. But in spite of that the error still shows up.
The module where this code was saved and the video file trial.mp4 are in the same folder.
Answers:
The WindowsError
you see does not refer to the video file but to the ffmpeg
executable itself. The call to subprocess.call
has no idea that trimmed.mp4
is a filename you are passing. Windows knows that the first parameter ought to be an executable file and reports back to the interpreter that it can’t find it.
Double-check that ffmpeg
can be executed in the environment your interpreter is running in. You may either add it to your PATH
or specify the full path to ffmpeg.exe
.
None of the above answers worked for me.
I got it working, by opening Anaconda Navigator > CMD prompt.
conda install ffmpeg
This answer is directed at Windows users of the ffmpeg-python
library since this question is the first search result for a stricter instance of the same issue.
Adding on to user2722968’s answer because neither of the existing answers solved the problem for me.
As of this post, ffmpeg-python
uses subprocess.Popen
to run ffmpeg
. Per this issue, subprocess
does not look in Path
when resolving names, so even if FFmpeg is installed and in your Path
and you can run it from CMD/PowerShell, ffmpeg-python
may not be able to use it.
My solution was to copy ffmpeg.exe
into the Python environment where python.exe
is. This workaround seems far from ideal but it seems to have solved the problem for me.
Most of the answers didn’t work. Here is what worked for me using conda env:
pip uninstall ffmpeg-python
conda install ffmpeg
pip install ffmpeg-python
Just the conda installation gives library not found error. Didn’t try uninstalling conda library either but this works.
First Uninstall all pip libraries
pip uninstall ffmpeg
pip uninstall ffmpeg-python
Then install using conda
conda install ffmpeg
I had the same issue!
And I FOUND A SOLUTION.
I realised, viewing all these answers that I need to install ffmpeg. I tried ‘pip install ffmpeg’ but that didn’t work. What worked was copying the ffmpeg.exe file to the folder that python.exe is in.
Thats what someone up here mentioned. Thank you!
To download the ffmpeg.exe file, download the zip file from https://github.com/GyanD/codexffmpeg/releases/tag/2022-06-06-git-73302aa193
If you are going to use ‘ffmpeg.exe’ or its linux binary, you need this
conda install ffmpeg
Then you will call it via subprocess or os.system() in your code.
And make sure you will run a different thread to run ffmpeg code otherwise there will be a huge bottleneck in your main thread.
class SaveAll():
def init(self):
super(SaveAll, self).__init__()
def save(self):
try:
command = "ffmpeg -i {} -c copy -preset ultrafast {}"format(...)
os.system(command)
except ffmpeg.Error as e:
print (e.stout, file=sys.stderr)
print (e.stderr, file=sys.stderr)
def run(self):
self.thread= threading.Thread(target=self.save)
self.thread.start()
self.thread.join(1)
...
saver = SaveAll()
saver.start()
In the process of using the ffmpeg module to edit video files i used the subprocess module
The code is as follows:
#trim bit
import subprocess
import os
seconds = "4"
mypath=os.path.abspath('trial.mp4')
subprocess.call(['ffmpeg', '-i',mypath, '-ss', seconds, 'trimmed.mp4'])
Error message:
Traceback (most recent call last):
File "C:moviepy-masterresizer.py", line 29, in <module>
subprocess.call(['ffmpeg', '-i',mypath, '-ss', seconds, 'trimmed.mp4'])
File "C:Python27libsubprocess.py", line 168, in call
return Popen(*popenargs, **kwargs).wait()
File "C:Python27libsubprocess.py", line 390, in __init__
errread, errwrite)
File "C:Python27libsubprocess.py", line 640, in _execute_child
startupinfo)
WindowsError: [Error 2] The system cannot find the file specified
After looking up similar problems i understood that the module is unable to pick the video file because it needs its path, so i took the absolute path. But in spite of that the error still shows up.
The module where this code was saved and the video file trial.mp4 are in the same folder.
The WindowsError
you see does not refer to the video file but to the ffmpeg
executable itself. The call to subprocess.call
has no idea that trimmed.mp4
is a filename you are passing. Windows knows that the first parameter ought to be an executable file and reports back to the interpreter that it can’t find it.
Double-check that ffmpeg
can be executed in the environment your interpreter is running in. You may either add it to your PATH
or specify the full path to ffmpeg.exe
.
None of the above answers worked for me.
I got it working, by opening Anaconda Navigator > CMD prompt.
conda install ffmpeg
This answer is directed at Windows users of the ffmpeg-python
library since this question is the first search result for a stricter instance of the same issue.
Adding on to user2722968’s answer because neither of the existing answers solved the problem for me.
As of this post, ffmpeg-python
uses subprocess.Popen
to run ffmpeg
. Per this issue, subprocess
does not look in Path
when resolving names, so even if FFmpeg is installed and in your Path
and you can run it from CMD/PowerShell, ffmpeg-python
may not be able to use it.
My solution was to copy ffmpeg.exe
into the Python environment where python.exe
is. This workaround seems far from ideal but it seems to have solved the problem for me.
Most of the answers didn’t work. Here is what worked for me using conda env:
pip uninstall ffmpeg-python
conda install ffmpeg
pip install ffmpeg-python
Just the conda installation gives library not found error. Didn’t try uninstalling conda library either but this works.
First Uninstall all pip libraries
pip uninstall ffmpeg
pip uninstall ffmpeg-python
Then install using conda
conda install ffmpeg
I had the same issue!
And I FOUND A SOLUTION.
I realised, viewing all these answers that I need to install ffmpeg. I tried ‘pip install ffmpeg’ but that didn’t work. What worked was copying the ffmpeg.exe file to the folder that python.exe is in.
Thats what someone up here mentioned. Thank you!
To download the ffmpeg.exe file, download the zip file from https://github.com/GyanD/codexffmpeg/releases/tag/2022-06-06-git-73302aa193
If you are going to use ‘ffmpeg.exe’ or its linux binary, you need this
conda install ffmpeg
Then you will call it via subprocess or os.system() in your code.
And make sure you will run a different thread to run ffmpeg code otherwise there will be a huge bottleneck in your main thread.
class SaveAll():
def init(self):
super(SaveAll, self).__init__()
def save(self):
try:
command = "ffmpeg -i {} -c copy -preset ultrafast {}"format(...)
os.system(command)
except ffmpeg.Error as e:
print (e.stout, file=sys.stderr)
print (e.stderr, file=sys.stderr)
def run(self):
self.thread= threading.Thread(target=self.save)
self.thread.start()
self.thread.join(1)
...
saver = SaveAll()
saver.start()