Base Vreddit class on Youtube downloader
This commit is contained in:
parent
ad3aeece07
commit
2dce3108a1
1 changed files with 5 additions and 40 deletions
|
@ -1,56 +1,21 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
import os
|
|
||||||
import pathlib
|
|
||||||
import subprocess
|
|
||||||
import tempfile
|
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
import requests
|
|
||||||
from praw.models import Submission
|
from praw.models import Submission
|
||||||
|
|
||||||
from bulkredditdownloader.site_authenticator import SiteAuthenticator
|
|
||||||
from bulkredditdownloader.resource import Resource
|
from bulkredditdownloader.resource import Resource
|
||||||
from bulkredditdownloader.site_downloaders.base_downloader import BaseDownloader
|
from bulkredditdownloader.site_authenticator import SiteAuthenticator
|
||||||
|
from bulkredditdownloader.site_downloaders.youtube import Youtube
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class VReddit(BaseDownloader):
|
class VReddit(Youtube):
|
||||||
def __init__(self, post: Submission):
|
def __init__(self, post: Submission):
|
||||||
super().__init__(post)
|
super().__init__(post)
|
||||||
|
|
||||||
def find_resources(self, authenticator: Optional[SiteAuthenticator] = None) -> list[Resource]:
|
def find_resources(self, authenticator: Optional[SiteAuthenticator] = None) -> list[Resource]:
|
||||||
try:
|
out = super()._download_video({})
|
||||||
fnull = open(os.devnull, 'w')
|
return [out]
|
||||||
subprocess.call("ffmpeg", stdout=fnull, stderr=subprocess.STDOUT)
|
|
||||||
except subprocess.SubprocessError:
|
|
||||||
return [Resource(self.post, self.post.url)]
|
|
||||||
else:
|
|
||||||
video_url = self.post.url
|
|
||||||
audio_url = video_url[:video_url.rfind('/')] + '/DASH_audio.mp4'
|
|
||||||
|
|
||||||
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()
|
|
||||||
out = Resource(self.post, self.post.url)
|
|
||||||
out.content = content
|
|
||||||
return out
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
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(
|
|
||||||
input_audio, input_video, str(working_directory / 'output.mp4'))
|
|
||||||
subprocess.call(cmd.split(), stdout=fnull, stderr=subprocess.STDOUT)
|
|
||||||
|
|
Loading…
Reference in a new issue