forked from platypush/platypush
Added support for custom YouTube preferred video/audio formats
This commit is contained in:
parent
1962a8c4de
commit
8c339d0d55
1 changed files with 11 additions and 5 deletions
|
@ -76,6 +76,7 @@ class MediaPlugin(Plugin, ABC):
|
||||||
env: Optional[Dict[str, str]] = None,
|
env: Optional[Dict[str, str]] = None,
|
||||||
volume: Optional[Union[float, int]] = None,
|
volume: Optional[Union[float, int]] = None,
|
||||||
torrent_plugin: str = 'torrent',
|
torrent_plugin: str = 'torrent',
|
||||||
|
youtube_format: str = 'best',
|
||||||
*args, **kwargs):
|
*args, **kwargs):
|
||||||
"""
|
"""
|
||||||
:param media_dirs: Directories that will be scanned for media files when
|
:param media_dirs: Directories that will be scanned for media files when
|
||||||
|
@ -95,6 +96,9 @@ class MediaPlugin(Plugin, ABC):
|
||||||
- ``rtorrent`` - torrent support over rtorrent RPC/XML interface (recommended)
|
- ``rtorrent`` - torrent support over rtorrent RPC/XML interface (recommended)
|
||||||
- ``webtorrent`` - torrent support over webtorrent (unstable)
|
- ``webtorrent`` - torrent support over webtorrent (unstable)
|
||||||
|
|
||||||
|
:param youtube_format: Select the preferred video/audio format for YouTube videos (default: ``best``).
|
||||||
|
See the `youtube-dl documentation <https://github.com/ytdl-org/youtube-dl#format-selection>`_ for
|
||||||
|
more info on supported formats.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
super().__init__(**kwargs)
|
super().__init__(**kwargs)
|
||||||
|
@ -150,6 +154,7 @@ class MediaPlugin(Plugin, ABC):
|
||||||
self._videos_queue = []
|
self._videos_queue = []
|
||||||
self._youtube_proc = None
|
self._youtube_proc = None
|
||||||
self.torrent_plugin = torrent_plugin
|
self.torrent_plugin = torrent_plugin
|
||||||
|
self.youtube_format = youtube_format
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _torrent_event_handler(evt_queue):
|
def _torrent_event_handler(evt_queue):
|
||||||
|
@ -496,9 +501,8 @@ class MediaPlugin(Plugin, ABC):
|
||||||
# noinspection PyProtectedMember
|
# noinspection PyProtectedMember
|
||||||
return YoutubeMediaSearcher()._youtube_search_html_parse(query)
|
return YoutubeMediaSearcher()._youtube_search_html_parse(query)
|
||||||
|
|
||||||
@staticmethod
|
def get_youtube_video_url(self, url):
|
||||||
def get_youtube_video_url(url):
|
youtube_dl = subprocess.Popen(['youtube-dl', '-f', self.youtube_format, '-g', url], stdout=subprocess.PIPE)
|
||||||
youtube_dl = subprocess.Popen(['youtube-dl', '-f', 'best', '-g', url], stdout=subprocess.PIPE)
|
|
||||||
url = youtube_dl.communicate()[0].decode().strip()
|
url = youtube_dl.communicate()[0].decode().strip()
|
||||||
youtube_dl.wait()
|
youtube_dl.wait()
|
||||||
return url
|
return url
|
||||||
|
@ -521,11 +525,13 @@ class MediaPlugin(Plugin, ABC):
|
||||||
return m.group(1)
|
return m.group(1)
|
||||||
|
|
||||||
@action
|
@action
|
||||||
def get_youtube_url(self, url):
|
def get_youtube_url(self, url, youtube_format: Optional[str] = None):
|
||||||
youtube_id = self.get_youtube_id(url)
|
youtube_id = self.get_youtube_id(url)
|
||||||
if youtube_id:
|
if youtube_id:
|
||||||
url = 'https://www.youtube.com/watch?v={}'.format(youtube_id)
|
url = 'https://www.youtube.com/watch?v={}'.format(youtube_id)
|
||||||
proc = subprocess.Popen(['youtube-dl', '-f', 'best', '-g', url], stdout=subprocess.PIPE)
|
proc = subprocess.Popen([
|
||||||
|
'youtube-dl', '-f', youtube_format or self.youtube_format, '-g', url], stdout=subprocess.PIPE
|
||||||
|
)
|
||||||
raw_url = proc.stdout.read().decode("utf-8", "strict")[:-1]
|
raw_url = proc.stdout.read().decode("utf-8", "strict")[:-1]
|
||||||
return raw_url if raw_url else url
|
return raw_url if raw_url else url
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue