1
0
Fork 0
mirror of synced 2024-07-01 12:30:21 +12:00
bulk-downloader-for-reddit/bulkredditdownloader/site_downloaders/vreddit.py

57 lines
2 KiB
Python
Raw Normal View History

#!/usr/bin/env python3
import logging
import os
2021-02-07 01:29:13 +13:00
import pathlib
import subprocess
2021-02-11 12:10:40 +13:00
import tempfile
2021-02-25 23:40:08 +13:00
from typing import Optional
2021-02-11 12:10:40 +13:00
import requests
from praw.models import Submission
2021-02-25 23:40:08 +13:00
from bulkredditdownloader.authenticator import Authenticator
2021-02-11 12:10:40 +13:00
from bulkredditdownloader.resource import Resource
2021-02-07 20:08:24 +13:00
from bulkredditdownloader.site_downloaders.base_downloader import BaseDownloader
logger = logging.getLogger(__name__)
2021-02-07 14:33:19 +13:00
class VReddit(BaseDownloader):
2021-02-15 18:12:27 +13:00
def __init__(self, post: Submission):
super().__init__(post)
2021-02-25 23:40:08 +13:00
def find_resources(self, authenticator: Optional[Authenticator] = None) -> list[Resource]:
try:
fnull = open(os.devnull, 'w')
subprocess.call("ffmpeg", stdout=fnull, stderr=subprocess.STDOUT)
2021-02-11 12:10:40 +13:00
except subprocess.SubprocessError:
2021-02-25 23:40:08 +13:00
return [Resource(self.post, self.post.url)]
else:
2021-02-11 12:10:40 +13:00
video_url = self.post.url
audio_url = video_url[:video_url.rfind('/')] + '/DASH_audio.mp4'
2021-02-11 12:10:40 +13:00
with tempfile.TemporaryDirectory() as temp_dir:
video = requests.get(video_url).content
audio = requests.get(audio_url).content
with open(temp_dir / 'video', 'wb')as file:
file.write(video)
with open(temp_dir / 'audio', 'wb') as file:
file.write(audio)
self._merge_audio(temp_dir)
with open(temp_dir / 'output.mp4', 'rb') as file:
content = file.read()
2021-02-25 23:40:08 +13:00
out = Resource(self.post, self.post.url)
out.content = content
return out
@staticmethod
2021-02-11 12:10:40 +13:00
def _merge_audio(working_directory: pathlib.Path):
input_video = working_directory / 'video'
input_audio = working_directory / 'audio'
fnull = open(os.devnull, 'w')
cmd = "ffmpeg -i {} -i {} -c:v copy -c:a aac -strict experimental {}".format(
2021-02-11 12:10:40 +13:00
input_audio, input_video, str(working_directory / 'output.mp4'))
subprocess.call(cmd.split(), stdout=fnull, stderr=subprocess.STDOUT)