首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用yt-dlp获取下载视频的文件名。

使用yt-dlp获取下载视频的文件名。
EN

Stack Overflow用户
提问于 2022-10-21 18:38:37
回答 2查看 205关注 0票数 1

我打算使用yt下载一个视频,然后使用ffmpeg将视频删除。但是为了能够使用ffmpeg,我必须知道yt生成的文件的名称。我已经阅读了他们的文档,但我似乎找不到办法将文件名返回到我的程序中。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-10-21 20:25:36

以下是文档示例

我认为您提到的数字(如.f399)只是临时的,最终在合并最终文件时会被删除。

如果您想获得文件名:

代码语言:javascript
复制
import subprocess
someFilename = subprocess.getoutput('yt-dlp --print filename https://www.youtube.com/something')
# then pass someFilename to FFmpeg

使用您自己的文件名:

代码语言:javascript
复制
subprocess.run('yt-dlp -o thisIsMyName https://www.youtube.com/something')
# this will likely download a file named thisIsMyName.webm

但是,如果您事先不确定文件类型/扩展名,只想得到它:

代码语言:javascript
复制
someFileType = subprocess.getoutput('yt-dlp --print filename -o "%(ext)s" https://www.youtube.com/something')
print(someFileType)

这并不是很有效率,但要解释一下:

代码语言:javascript
复制
import subprocess

someFileType = subprocess.getoutput('yt-dlp --print filename -o "%(ext)s" https://www.youtube.com/something')
subprocess.run('yt-dlp -o "myFileName.%(ext)s" https://www.youtube.com/something')
subprocess.run(f'ffmpeg -i "myFileName.{someFileType}" outputFile.mp4')
票数 1
EN

Stack Overflow用户

发布于 2022-11-03 14:56:23

根据文档,您应该能够传递一个进度钩并在那里检索文件名。属性,但我已经看到它附加了.f399和/或随时间变化的实例。我认为这与下载视频的部分有关,实际上是临时文件名。

我发现,通过捕获整个info_dict字典,有一个似乎具有最终文件名的_filename键。

以下是我所做的主要工作:

代码语言:javascript
复制
import yt_dlp

final_filename = None

def yt_dlp_monitor(self, d):
    final_filename  = d.get('info_dict').get('_filename')
    # You could also just assign `d` here to access it and see all the data or even `print(d)` as it updates frequently

ydl_opts = {
    "outtmpl": '/whatever/directory/%(uploader)s_%(title)s.%(ext)s',  # this is where you can edit how you'd like the filenames to be formatted
    "progress_hooks": [yt_dlp_monitor]  # here's the function we just defined
    }
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
    info = ydl.extract_info("http://youtu.be/whatever_video)

现在,每次调用钩子时,final_filename都将使用文件名进行更新。您可以只在d['status'] == 'finished'上更新它,如果您愿意的话。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74157935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档