python - 如何获取使用 Youtube-dl 下载的文件的文件名

标签 python youtube-dl

我正在使用带有 flask 应用程序的 youtube-dl 下载文件并返回文件。当我下载时,文件名与视频标题略有不同。查看源代码,我以为我找到了函数 encodeFilenameutils.py .但是,这仍然不是匹配项,我无法返回文件。
我如何获取文件名,或者更改下载的文件名?
这是我目前的代码:

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>

最佳答案

class FilenameCollectorPP(youtube_dl.postprocessor.common.PostProcessor):
    def __init__(self):
        super(FilenameCollectorPP, self).__init__(None)
        self.filenames = []

    def run(self, information):
        self.filenames.append(information['filepath'])
        return [], information
    
filename_collector = FilenameCollectorPP()

my_youtube_dl = youtube_dl.YoutubeDL()
my_youtube_dl.add_post_processor(filename_collector)

# do some downloading, then look inside filename_collector.filenames
灵感来自 https://github.com/ytdl-org/youtube-dl/issues/27192#issuecomment-738004623

关于python - 如何获取使用 Youtube-dl 下载的文件的文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64759263/

相关文章:

python - 仅在点图中的 x 轴上显示整数

Python 3.5 字典比较

Python 脚本和等效命令的运行方式不同

java - 如何从 Java 执行 youtube-dl

python - 如何使用 youtube-dl 脚本从播放列表中的某个索引开始下载?

python - 对 tensorflow 中的张量列表求和

python - 返回登录用户申请的所有职位的查询集

node.js - solve() 函数在 promise 中返回未定义

python - 编写使用 youtube-dl 仅提取下载链接的 python 脚本?

python - Pyfolio - AttributeError : 'numpy.int64' object has no attribute 'to_pydatetime'