Python菜鸟:(
我创建了一个脚本,可以下载任何youtube视频。
然后脚本将字幕插入视频中,并且效果很好。
但是,我有一个问题,我无法使脚本始终将视频下载到mp4中。大多数情况下,它是通过mkv下载的,我不明白为什么会发生这种情况以及如何更改代码以便始终以我喜欢的格式下载视频。
负责下载视频的功能是这样的:
def video_download():
#global resolution
try:
print(linkvideo)
ydl_opts = {
'format': 'bestvideo[ext=mp4]+bestaudio/best',
'outtmpl': video_id+"."+'%(ext)s'
#'bestvideo': 'mp4',
#'bestaudio': 'm4a',
#'ext': 'mp4'
}
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
ydl.download([linkvideo])
result = ydl.extract_info("{}".format(linkvideo))
title = result.get("id", None)
videoext = result.get("ext", None)
resolution = result.get("resolution", None)
except:
print("falhou")
pass
global ficheiro
ficheiro2 = str(title)+"."+"mkv"
ficheiro =""
for i in ficheiro2:
if (i == '"' or i =="'" or i =="/"):
pass
else:
ficheiro += i
有人可以帮助我吗?预先感谢。
我明白了,这要感谢所有试图帮助我的人。
问题是这样的:当我们尝试以我选择的选项下载任何视频时,youtube-dl会在同一文件中下载最佳的视频/音频组合,因此我在代码中添加了以下内容:
ytdl = YoutubeDL()
result = ytdl.extract_info(linkvideo, download=False)
formats = result['formats']
formato = ""
formatoaudio = ""
extaudio = ""
for format in formats:
if format['format_note'] == "1080p" and format['ext'] == "mp4":
print(format)
formato = (format['format_id'])
break
else:
print("no 1080p mp4?!")
if formato == "":
for format in formats:
if format['format_note'] == "720p" and format['ext'] == "mp4":
print(format)
formato = (format['format_id'])
break
else:
print("no 720p mp4")
然后,我对声音文件进行了相同的操作,检查是否存在任何m4a或webm声音文件。最后,我要使用FFmpeg加入两个文件。
也许这不是最佳解决方案,但我仍在学习。 :)
谢谢大家
答案 0 :(得分:0)
尝试一下:
ficheiro2 = str(title)+"."+"mp4"