gpt4 book ai didi

Python, Youtube-video-downloader-merger 我可以让这个脚本运行得更快吗?

转载 作者:行者123 更新时间:2023-12-03 05:46:48 32 4
gpt4 key购买 nike

我创建了一个从 Youtube 下载视频和声音的脚本,然后将声音和视频与 ffmpeg 合并,我想知道另一种方法可以更快地获得相同的结果吗?因为这个脚本大约需要 7 分钟 ~ 取决于视频质量和持续时间。我的代码如下:

from pytube import YouTube
import sys
import ffmpeg
import os


class Downloader(YouTube):

def __init__(self, link):
self.link = YouTube(link)
self.hq = []
self.best_video = []
self.best_sound = []


def stream_objects(self):
q = [self.hq.append(x) for x in self.link.streams.all()]
self.best_video.append(str(self.hq[1]).split()[1].split('\"')[1])
self.best_sound.append(str(self.hq[-1]).split()[1].split('\"')[1])
return self.best_video, self.best_sound

def downloady(self):
vid = self.link.streams.get_by_itag(str(self.best_video).strip("['']"))
audio = self.link.streams.get_by_itag(str(self.best_sound).strip("['']"))
self.vid_title = (f"{vid.title}"+".mp4")

vid.download(filename='video')
audio.download(filename='audio')
print('Downloaded, Now Starting Merge \n\n\n\n\n')
print(f'{self.vid_title}'+'\n')

def merge(self):
ffmpeg.output(ffmpeg.input('video.mp4'), ffmpeg.input('audio.webm'), self.vid_title).run()
os.remove('video.mp4')
os.remove('audio.webm')



if __name__=='__main__':
a = Downloader(link = sys.argv[1])
a.stream_objects()
a.downloady()
a.merge()

确定更新:
现在代码看起来像这样..第二个问题是从 YouTube 服务器下载 mp4 文件的速度很慢,我有 10Gb/s 的互联网。与 YT 服务器的连接很好,但为什么下载这么差? ? ? :)
from pytube import YouTube
import sys
import ffmpeg
import os
import subprocess

class Downloader(YouTube):

def __init__(self, link):
self.link = YouTube(link)
self.hq = []


def stream_objects(self):
self.best = self.link.streams.filter(file_extension='mp4')
q = [self.hq.append(x) for x in self.best.all()]
self.best_vid_itag = str(self.best.all()[1]).split()[1].split('\"')[1]
self.best_audio_itag = str(self.best.all()[-1]).split()[1].split('\"')[1]

def downloader(self):
vid = self.link.streams.get_by_itag(self.best_vid_itag)
aud = self.link.streams.get_by_itag(self.best_audio_itag)
print('Donwloading Video file...\n')
vid.download(filename='video')
print('Video file downloaded... Now Trying download Audio file..\n')
aud.download(filename='audio')
print('Audio file downloaded... Now Trying to merge audio and video files...\n')

def merger(self):
lin = str(self.link.title).rstrip()
lin2 = (lin+'.mp4')
subprocess.run(f'ffmpeg -i video.mp4 -i audio.mp4 -c copy "{lin2}"', shell=True)
os.remove('video.mp4')
os.remove('audio.mp4')
print('Done....\n')

if __name__=='__main__':
a = Downloader(link = sys.argv[1])
a.stream_objects()
a.downloader()
a.merger()

最佳答案

首先你下载不同编码的视频文件和音频文件

在您的情况下,它是 mp4 和 webm

例如,您应该下载 mp4 视频和 m4a 音频

或者一个 webm 视频和一个 webm 音频

然后到了ffmpeg,你应该传递一个参数“-c copy”

ffmpeg 命令行示例:

ffmpeg -i myvideo.mp4 -i myaudio.m4a -c copy output.mp4

这是github上使用相同技术的python项目的链接

https://github.com/pyIDM/pyIDM

检查 video.py 文件

进一步说明:

当你使用“-c copy”参数时,只要音频和视频具有相同的编解码器容器,ffmpeg 将只复制音轨并将其与视频合并,此过程不到 2 秒

否则它将处理视频中的每一帧和音频中的每一位,然后将它们转换为所需的格式,这需要很长时间

关于Python, Youtube-video-downloader-merger 我可以让这个脚本运行得更快吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59982489/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com