Exemplo n.º 1
0
def create_mp4(video, audio, save_path=None):
    audio = AudioFileClip(audio) if audio is not None else None
    fps = video.shape[0] / audio.duration
    imageio.mimsave("backend_files/mute.mp4", video)
    video = VideoFileClip("backend_files/mute.mp4", audio=False)
    video.set_audio(audio)
    if save_path is not None:
        video.write_videofile(save_path, fps=fps)  # , codec='mpeg4')
    return video
Exemplo n.º 2
0
 def handleDLToMp4(self):
     try:
         appStatus.set('[1/2] Downloading...')
         root.update()
         getYTVideo = YouTube(ytLink.get())
         composedFilePath = f'{self.usrDownloadPath}{sep}{getYTVideo.title}.mp4'
         getYTVideo.streams.filter(adaptive=True,
                                   type='video').first().download(
                                       self.usrDownloadPath,
                                       filename='tmpVidFile')
         getYTVideo.streams.filter(adaptive=True,
                                   type='audio').first().download(
                                       self.usrDownloadPath,
                                       filename='tmpAudFile')
         tmpVideoFile = VideoFileClip(self.tmpVideoFilePath)
         tmpAudioFile = AudioFileClip(self.tmpAudioFilePath)
         appStatus.set('[2/2] Converting & mounting file...')
         ytLink.set('This step may take some minutes')
         root.update()
         mountClip = tmpVideoFile.set_audio(tmpAudioFile)
         mountClip.write_videofile(composedFilePath, fps=30)
         tmpVideoFile.close()
         tmpAudioFile.close()
         remove(self.tmpVideoFilePath)
         remove(self.tmpAudioFilePath)
         appStatus.set('Done!')
         ytLink.set('Check your "Downloads" directory.')
         root.update()
     except Exception as e:
         print(e)
         appStatus.set('Whoops, something went wrong!')
         ytLink.set(value='Invalid link!')
         root.update()
Exemplo n.º 3
0
    def saveVideo(self):
        count = 0
        four_cc = cv2.VideoWriter_fourcc(*'DIVX')
        name = QFileDialog.getSaveFileName(self, "Save File", "output.avi",
                                           "Videos(*.avi)")
        # if user doesn't select file directory
        if not name[0]:
            return

        out = cv2.VideoWriter(name[0], four_cc, self.fps,
                              (int(self.w), int(self.h)))

        self.progress.setMaximum(len(self.frameList))

        while count < len(self.frameList):
            (ret, frame) = self.frameList[count]

            if ret:
                count += 1
                out.write(frame)
                self.progress.setValue(count)
            else:
                break

        out.release()

        audio = AudioFileClip(self.name)
        video = VideoFileClip(name[0])
        result = video.set_audio(audio)
        result.write_videofile(name[0].replace(".avi", ".mp4"))
Exemplo n.º 4
0
 def add_music(
     self
 ):  #Creates a new video file from the temporary output file and adds the selected audio the the background.
     my_clip = VideoFileClip("".join(self.save_path.split(".")[:-1]) +
                             "_tmp.avi")
     music = AudioFileClip(self.mus_path)
     if my_clip.duration > music.duration:
         duration = music.duration
     else:
         duration = my_clip.duration
     my_clip = my_clip.set_audio(music.set_duration(duration))
     my_clip.write_videofile(self.save_path, fps=self.fps)
Exemplo n.º 5
0
def download_and_convert(url):
	print("converting url " + url)
	source = pafy.new(url)
	best = source.getbest(preftype="mp4")
	ts = datetime.datetime.fromtimestamp(time.time()).strftime('%Y%m%d-%H%M%S')
	input_filename = "/tmp/" + ts + "." + best.extension

	best.download(filepath=input_filename)
	output = VideoFileClip(input_filename)
	duration = output.duration
	
	output_filename="/tmp/" + best.title + "." + best.extension

	output = output.set_audio(audio).fl_time(lambda t: t * accel, apply_to='mask').set_duration(duration / accel)
	output.write_videofile(output_filename)

	print("uploading to s3")

	s3 = boto.connect_s3()
	bucket = s3.get_bucket('bennyhill')
	key = Key(bucket)
	key.key = best.title + "-" + ts
	key.set_contents_from_filename(output_filename)

	output_url = key.generate_url(expires_in=3600)

	print("complete")

	# save the results
	try:
		result = Result(
			url=url,
			youtube_url=output_url
		)
		db.session.add(result)
		db.session.commit()
		return result.id
	except:
		errors.append("Unable to add item to database.")
		return {"error": errors}
Exemplo n.º 6
0
def get_reddit_videos(subreddit, count, folder):
    r = praw.Reddit(client_id="Oez4fMric1z1uQ",
                    client_secret="3-IOEjlgneiGBeNT02yeZ3TDLL1asw",
                    user_agent="idk")
    counter = 0
    sub = r.subreddit(subreddit).hot(limit=count * 10)
    temp_dict = []
    titles = []
    times = []
    with open("videos.json", "r") as json_file:
        data = json.load(json_file)
        existing_titles = data["titles"]
    print(existing_titles)
    if folder != "":
        folder = folder + "/"
    for post in sub:
        if counter > (count - 1):
            break
        if post.is_video and not post.over_18 and not post.title in existing_titles:
            vid_link = post.media['reddit_video']['fallback_url']
            audio_link = f'{vid_link.split("_")[0]}_audio.mp4'
            #print(audio_link)
            #print(vid_link)
            print(f'{folder}{post.title}.mp4')
            try:
                beginning = time.perf_counter()

                title = post.title.replace(":", "_colon_")
                title = title.replace("?", "")
                urllib.request.urlretrieve(vid_link, f'{folder}{title}.mp4')
                urllib.request.urlretrieve(audio_link, f'{folder}{title}.mp3')
                vid = VideoFileClip(f'{folder}{title}.mp4')
                audio = AudioFileClip(f'{folder}{title}.mp3')
                combined_vid = vid.set_audio(audio)
                combined_vid.write_videofile(f'{folder}final {title}.mp4')
                temp_dict.append({
                    "video_title":
                    f'{folder}final {title}.mp4',
                    "duration":
                    post.media['reddit_video']["duration"],
                    "used":
                    False,
                    "url":
                    post.url,
                    "source":
                    "reddit",
                    "score":
                    post.score,
                    "tags": []
                })
                counter += 1
                print(f"-----DOWNLOADED VIDEO {counter} OF {count}-----")
                times.append(time.perf_counter() - beginning)
                titles.append(post.title)
            except:
                print("Exception at download")
                traceback.print_exc()

    with open("videos.json", "r") as json_file:
        data = json.load(json_file)
        video_list = []
        for i in data["data"]:
            video_list.append(i["video_title"])
        for i in temp_dict:
            if not i["video_title"] in video_list:
                data["data"].insert(0, i)
                data["total_duration"] += i["duration"]
                data["usable_duration"] += i["duration"]
        data["time_downloading"] += sum(times)
        data["downloads"] += len(times)
        data["average_download_time"] = data["time_downloading"] / data[
            "downloads"]
        for i in titles:
            data["titles"].append(i)
        print(temp_dict)
    with open("videos.json", "w") as json_f:
        json.dump(data, json_f, indent=2)


#get_reddit_videos("dankvideos", 100,"meme storage")
Exemplo n.º 7
0
def GetVideo():

    vedio2 = VideoFileClip(r"F:\IDM下载内容保存\you-get\呆妹儿小霸王.mp4")
    toalvideo = vedio2.set_audio("F:\IDM下载内容保存\you-get\【Douyu】呆妹儿小霸王.m4a")
    toalvideo.write_videofile(r"‪J:\vedio\daimei——hecheng.mp4")
Exemplo n.º 8
0
    logosize = im_temp.textsize(text=series_txt, font=ImageFont.truetype('./font/Alibaba-PuHuiTi-Regular.ttf', 20))
    image.close()
    image = Image.new(mode='RGBA', size=logosize)
    draw_table = ImageDraw.Draw(im=image)
    draw_table.text(xy=(0, 0), text=series_txt, fill='#FFFFFF', font=ImageFont.truetype('./font/Alibaba-PuHuiTi-Regular.ttf', 20))
    image.save('./logo/text_logo.png', 'PNG')
    image.close()

    video_name = filename
    video_path = './video/'+video_name
    video = VideoFileClip(video_path)
    if video.audio is None:
        video = VideoFileClip(video_path)
    else:
        newaudio = video.audio.fx(volumex,0)
        video = video.set_audio(newaudio)
    logo = (
        ImageClip(logo_path)
        .set_duration(video.duration)
        .resize(height=50)
        .set_pos(("left", "top"))
    )
    text = (
        ImageClip("./logo/text_logo.png")
        .set_duration(video.duration)
        .resize(height=20)
        .set_pos(("right", "bottom"))
    )
    #txt = TextClip(series_txt, color='white', font = './font/Alibaba-PuHuiTi-Regular.ttf', fontsize=20).set_pos(('right', 'bottom')).set_duration(video.duration)
    #final = CompositeVideoClip([video, logo, txt])
    final = CompositeVideoClip([video, logo, text])
Exemplo n.º 9
0
    def download(self):
        url = self.url_line_edit.text()
        target_dir = self.folder_line_edit.text()
        quality = str(self.quality_combo_box.currentText())
        is_v, is_p = self.is_v(url), self.is_p(url)

        if is_p:
            playlist = pt.Playlist(url)
            iter_things = playlist.video_urls
        elif is_v:
            iter_things = [url]
        else:
            self.url_line_edit.setText("Please enter a valid url")
            return

        if not target_dir:
            self.folder_line_edit.setText("Please choose a directory")
            return

        if quality == SELECT_QUALITY_PROMPT_STRING:
            return

        self.title_label.setText("")
        self.title_label.setText("Downloading..")
        self.message_label.setHidden(False)
        self.quality_combo_box.setHidden(True)
        self.folder_line_edit.setHidden(True)
        self.queue_push_button.setHidden(True)
        self.select_folder_push_button.setHidden(True)
        self.url_line_edit.setHidden(True)
        self.search_push_button.setHidden(True)
        self.start_push_button.setHidden(True)
        n = len(iter_things)

        for ind, text in enumerate(iter_things):
            ext, _, _, qual, vora = quality.split(" ")
            vid = pt.YouTube(text, on_progress_callback=self.update_progress)

            if vora == "resolution":
                self.video_progress_bar.setHidden(False)
                self.message_label.setText(
                    f"Downloading video.. ({ind + 1} of {n})")
                video_path, is_progressive = self.download_video(
                    vid, ext, qual, target_dir)

                if not is_progressive:
                    self.audio_progress_bar.setHidden(False)
                    self.message_label.setText(
                        f"Downloading audio.. ({ind + 1} of {n})")
                    audio_path = self.download_audio(vid, "Highest",
                                                     target_dir, ind, n)
                    self.message_label.setText(
                        f"Merging streams.. ({ind + 1} of {n})")
                    v = VideoFileClip(video_path)
                    a = AudioFileClip(audio_path)
                    v = v.set_audio(a)
                    self.message_label.setText(
                        f"Writing to disk.. ({ind + 1} of {n})")
                    v.write_videofile(f"{video_path[:-4]} - Output.mp4")
                    v.close()
                    a.close()
                    os.remove(audio_path)
                    os.remove(video_path)
                    os.rename(f"{video_path[:-4]} - Output.mp4",
                              f"{video_path[:-4]}.mp4")
                    self.audio_progress_bar.setHidden(True)

                self.video_progress_bar.setHidden(True)

            elif vora == "bitrate":
                self.audio_progress_bar.setHidden(False)
                self.message_label.setText(
                    f"Downloading audio stream.. ({ind + 1} of {n})")
                self.download_audio(vid, qual, target_dir, ind, n)
                self.audio_progress_bar.setHidden(True)

        self.title_label.setText("YouTube Downloader")
        self.message_label.setText("")
        self.message_label.setHidden(True)
        self.queue_push_button.setHidden(False)
        self.url_line_edit.setHidden(False)
        self.search_push_button.setHidden(False)