I am using youtube-dl with a flask app to download a file and return the file. When I download the filename is changed slightly from the video title. Looking through the source code I thought I found it with the function encodeFilename
in utils.py
. However, this is still not a match and I can't return the file.
How could I get the filename, or alternatively change the filename that is downloaded?
This is my code at the moment:
def preferredencoding():
try:
pref = locale.getpreferredencoding()
'TEST'.encode(pref)
except Exception:
pref = 'UTF-8'
return pref
def get_subprocess_encoding():
if sys.platform == 'win32' and sys.getwindowsversion()[0] >= 5:
encoding = preferredencoding()
else:
encoding = sys.getfilesystemencoding()
if encoding is None:
encoding = 'utf-8'
return encoding
@app.route('/api/v1/videos', methods=['GET'])
def api_id():
if 'link' in request.args:
link = request.args['link']
print("Getting YouTube video")
try:
title = youtube_dl.YoutubeDL().extract_info(link, download=False)["title"]
print(title.encode(get_subprocess_encoding(), 'ignore'))
print(title)
code=link.split('v=')[1]
youtube_dl.YoutubeDL().download([link])
return send_from_directory(r'C:\Users\User123', title+'-'+code+'.mp4')
except:
return "<h1>Error</h1>