I am trying to use MoviePy to convert an mp4 video to mp3 audio. In the below 'convertToMP3' function I pass in episode which is an RSS entry object that has a "title" attribute. I've already downloaded an mp4 video that shares the episode title save for some quotes around the file name.
from moviepy.editor import AudioFileClip, VideoFileClip
import os
import feedparser
#Input: episode, an RSS entry object; cleanup (boolean), a flag indicating whether
or not the old video file should be deleted
#Output: None
#Creates an MP3 version of the video file and optionally deletes the video (cleanup)
def convertToMP3(self, episode, cleanup = False):
#Establish path to files
#Try absolute path with quotes
try:
path_to_files = os.path.abspath(self.dest)
video_title = ("\'%s.mp4\'" % episode.title)
video_dir = os.path.join(path_to_files, video_title)
video_version = VideoFileClip(video_dir)
except Exception as e:
print("ERROR: Absolute path with quotes doesn't work. %s" % e)
#Try absolute path without quotes
try:
path_to_files = os.path.abspath(self.dest)
video_title = ("%s.mp4" % episode.title)
video_dir = os.path.join(path_to_files, video_title)
video_version = VideoFileClip(video_dir)
except Exception as e:
print("ERROR: Absolute path without doesn't work. %s" % e)
#Try implicit path with quotes
try:
path_to_files = (self.dest)
video_title = ("\'%s.mp4\'" % episode.title)
video_dir = os.path.join(path_to_files, video_title)
video_version = VideoFileClip(video_dir)
except Exception as e:
print("ERROR: Implicit path with quotes doesn't work. %s" % e)
#Try implicit path without quotes
try:
path_to_files = (self.dest)
video_title = ("%s.mp4" % episode.title)
video_dir = os.path.join(path_to_files, video_title)
video_version = VideoFileClip(video_dir)
except Exception as e:
print("ERROR: Implicit path without quotes doesn't work. %s" % e)
try:
#Create MP3 version of episode
#video_dir = str(video_dir)
#TODO: Below line of code cannot find the video file
mp3_version = video_version.audio
mp3_version.write_audiofile(path_to_files / episode.title)
#Close the files
mp3_version.close()
video_version.close()
except Exception as e:
print("ERROR: File conversion failed. %s" % e)
The problem I'm running into is that MoviePy can't find the video file. As you can see I'm using both implicit and absolute paths but neither works. I'm running on an Ubuntu 20.04 machine using Python 3.8.2 and I have all the optional MoviePy dependencies installed. Is there something else that I'm missing?
Traceback:
dLoader1b: Testing file conversion from MP4 to MP3
Traceback (most recent call last):
File "/usr/lib/python3.8/runpy.py", line 193, in _run_module_as_main
return _run_code(code, main_globals, None,
File "/usr/lib/python3.8/runpy.py", line 86, in _run_code
exec(code, run_globals)
File "/home/caleb/.vscode/extensions/ms-python.python-2020.8.105369/pythonFiles/lib/python/debugpy/__main__.py", line 45, in <module>
cli.main()
File "/home/caleb/.vscode/extensions/ms-python.python-2020.8.105369/pythonFiles/lib/python/debugpy/../debugpy/server/cli.py", line 430, in main
run()
File "/home/caleb/.vscode/extensions/ms-python.python-2020.8.105369/pythonFiles/lib/python/debugpy/../debugpy/server/cli.py", line 267, in run_file
runpy.run_path(options.target, run_name=compat.force_str("__main__"))
File "/usr/lib/python3.8/runpy.py", line 263, in run_path
return _run_module_code(code, init_globals, run_name,
File "/usr/lib/python3.8/runpy.py", line 96, in _run_module_code
_run_code(code, mod_globals, init_globals,
File "/usr/lib/python3.8/runpy.py", line 86, in _run_code
exec(code, run_globals)
File "/home/caleb/Documents/Programming_Projects/Podcast_DLoader/dLoader_tester.py", line 46, in <module>
dLoader1c.convertToMP3(latest_ep)
File "/home/caleb/Documents/Programming_Projects/Podcast_DLoader/Podcast_DLoader.py", line 128, in convertToMP3
video_version = VideoFileClip(video_dir)
File "/usr/local/lib/python3.8/dist-packages/moviepy/video/io/VideoFileClip.py", line 88, in __init__
self.reader = FFMPEG_VideoReader(filename, pix_fmt=pix_fmt,
File "/usr/local/lib/python3.8/dist-packages/moviepy/video/io/ffmpeg_reader.py", line 35, in __init__
infos = ffmpeg_parse_infos(filename, print_infos, check_duration,
File "/usr/local/lib/python3.8/dist-packages/moviepy/video/io/ffmpeg_reader.py", line 270, in ffmpeg_parse_infos
raise IOError(("MoviePy error: the file %s could not be found!\n"
OSError: MoviePy error: the file /home/caleb/Documents/Programming_Projects/Podcast_DLoader/'NVIDIA CONFIRMS Your PSU Can't Handle RTX 3000 - WAN Show August 28, 2020.mp4' could not be found!
Please check that you entered the correct path.
EDIT
def convertToMP3(self, episode, cleanup = False):
path_to_files = (self.dest)
video_title = episode.title + ".mp4"
video_version = VideoFileClip(video_title)
try:
#Create MP3 version of episode
#video_dir = str(video_dir)
#TODO: Below line of code cannot find the video file
mp3_version = video_version.audio
mp3_version.write_audiofile(path_to_files / episode.title)
#Close the files
mp3_version.close()
video_version.close()
except Exception as e:
print("ERROR: File conversion failed. %s" % e)
This still produced the same error:
Traceback (most recent call last):
File "/usr/lib/python3.8/runpy.py", line 193, in _run_module_as_main
return _run_code(code, main_globals, None,
File "/usr/lib/python3.8/runpy.py", line 86, in _run_code
exec(code, run_globals)
File "/home/caleb/.vscode/extensions/ms-python.python-2020.8.106424/pythonFiles/lib/python/debugpy/__main__.py", line 45, in <module>
cli.main()
File "/home/caleb/.vscode/extensions/ms-python.python-2020.8.106424/pythonFiles/lib/python/debugpy/../debugpy/server/cli.py", line 430, in main
run()
File "/home/caleb/.vscode/extensions/ms-python.python-2020.8.106424/pythonFiles/lib/python/debugpy/../debugpy/server/cli.py", line 267, in run_file
runpy.run_path(options.target, run_name=compat.force_str("__main__"))
File "/usr/lib/python3.8/runpy.py", line 263, in run_path
return _run_module_code(code, init_globals, run_name,
File "/usr/lib/python3.8/runpy.py", line 96, in _run_module_code
_run_code(code, mod_globals, init_globals,
File "/usr/lib/python3.8/runpy.py", line 86, in _run_code
exec(code, run_globals)
File "/home/caleb/Documents/Programming_Projects/Podcast_DLoader/dLoader_tester.py", line 49, in <module>
dLoader1c.convertToMP3(latest_ep)
File "/home/caleb/Documents/Programming_Projects/Podcast_DLoader/Podcast_DLoader.py", line 156, in convertToMP3
video_version = VideoFileClip(video_title)
File "/usr/local/lib/python3.8/dist-packages/moviepy/video/io/VideoFileClip.py", line 88, in __init__
self.reader = FFMPEG_VideoReader(filename, pix_fmt=pix_fmt,
File "/usr/local/lib/python3.8/dist-packages/moviepy/video/io/ffmpeg_reader.py", line 35, in __init__
infos = ffmpeg_parse_infos(filename, print_infos, check_duration,
File "/usr/local/lib/python3.8/dist-packages/moviepy/video/io/ffmpeg_reader.py", line 270, in ffmpeg_parse_infos
raise IOError(("MoviePy error: the file %s could not be found!\n"
OSError: MoviePy error: the file NVIDIA CONFIRMS Your PSU Can't Handle RTX 3000 - WAN Show August 28, 2020.mp4 could not be found!
Please check that you entered the correct path.