I'm trying to use the openai-whisper library to transcribe text from a video in the same folder as my program. However, I keep getting a FileNotFoundError: [WinError 2] The system cannot find the file specified
This is my code:
import whisper
import os
directory = os.path.dirname(os.path.abspath(__file__))
start = 0
videoList = []
for file in os.listdir(directory):
if file.endswith('.mp4'):
videoList.append(file)
model = whisper.load_model('base')
for video in videoList:
start += 1
result = model.transcribe(video)
with open("Video " f'{start}' "transcription.txt", "w") as f:
f.write(result["text"] + '\n')
I get the error when I reach the line where I am trying to transcribe the video.
I tried to see if there was a problem with finding the files in my directory at first which is why I have that first for loop. I tried seeing if my program wasn't finding the mp4 files but it is.
This is likely confusion around the idea of a working directory. Every program on any OS has a working directory. This is the directory that the application will assume relative paths are relative to. So, when a program opens
test.txt
, it opens that file in the working directory.test.txt
is a relative path, because it does not specify the full absolute path to the file (likeC:\Temp\test.txt
).The working directory can be the same as the directory where the program or script is, but it's not a given. In this piece of code:
... you determine the directory the script is in. But that does not have to be the working directory. For example, say your project looks like this:
If you run
python src/my_script.py
fromproject_dir
,directory
will be/project_dir/src
, but the script's working directory will be/project_dir
.As a result, this code:
Will look for
video.mp4
in the working directory, when you really want to look for it in the source directory.Either do this:
Or make this change to the previously discussed line:
If you do indeed want to only operate on videos in the working directory.
Of course, you need to make sure your videos are actually in the working directory in that case.