diff --git a/tubearchivist/home/src/download/queue.py b/tubearchivist/home/src/download/queue.py index 5a453ec..3309f51 100644 --- a/tubearchivist/home/src/download/queue.py +++ b/tubearchivist/home/src/download/queue.py @@ -16,8 +16,9 @@ from home.src.download.yt_dlp_base import YtWrap from home.src.es.connect import ElasticWrap, IndexPaginate from home.src.index.playlist import YoutubePlaylist from home.src.index.video_constants import VideoTypeEnum +from home.src.index.video_streams import DurationConverter from home.src.ta.config import AppConfig -from home.src.ta.helper import DurationConverter, is_shorts +from home.src.ta.helper import is_shorts from home.src.ta.ta_redis import RedisQueue diff --git a/tubearchivist/home/src/index/video.py b/tubearchivist/home/src/index/video.py index 406ad66..f9afffa 100644 --- a/tubearchivist/home/src/index/video.py +++ b/tubearchivist/home/src/index/video.py @@ -16,7 +16,8 @@ from home.src.index import playlist as ta_playlist from home.src.index.generic import YouTubeItem from home.src.index.subtitle import YoutubeSubtitle from home.src.index.video_constants import VideoTypeEnum -from home.src.ta.helper import DurationConverter, clean_string, randomizor +from home.src.index.video_streams import DurationConverter +from home.src.ta.helper import clean_string, randomizor from home.src.ta.ta_redis import RedisArchivist from ryd_client import ryd_client diff --git a/tubearchivist/home/src/index/video_streams.py b/tubearchivist/home/src/index/video_streams.py new file mode 100644 index 0000000..01873a8 --- /dev/null +++ b/tubearchivist/home/src/index/video_streams.py @@ -0,0 +1,54 @@ +"""extract metadata from video streams""" + +import subprocess + + +class DurationConverter: + """ + using ffmpeg to get and parse duration from filepath + """ + + @staticmethod + def get_sec(file_path): + """read duration from file""" + duration = subprocess.run( + [ + "ffprobe", + "-v", + "error", + "-show_entries", + "format=duration", + "-of", + "default=noprint_wrappers=1:nokey=1", + file_path, + ], + capture_output=True, + check=True, + ) + duration_raw = duration.stdout.decode().strip() + if duration_raw == "N/A": + return 0 + + duration_sec = int(float(duration_raw)) + return duration_sec + + @staticmethod + def get_str(duration_sec): + """takes duration in sec and returns clean string""" + if not duration_sec: + # failed to extract + return "NA" + + hours = duration_sec // 3600 + minutes = (duration_sec - (hours * 3600)) // 60 + secs = duration_sec - (hours * 3600) - (minutes * 60) + + duration_str = str() + if hours: + duration_str = str(hours).zfill(2) + ":" + if minutes: + duration_str = duration_str + str(minutes).zfill(2) + ":" + else: + duration_str = duration_str + "00:" + duration_str = duration_str + str(secs).zfill(2) + return duration_str diff --git a/tubearchivist/home/src/ta/helper.py b/tubearchivist/home/src/ta/helper.py index 1fdf15a..c1a6024 100644 --- a/tubearchivist/home/src/ta/helper.py +++ b/tubearchivist/home/src/ta/helper.py @@ -8,7 +8,6 @@ import os import random import re import string -import subprocess import unicodedata from datetime import datetime from urllib.parse import urlparse @@ -163,54 +162,3 @@ def ta_host_parser(ta_host): csrf_trusted_origins.append(f"{parsed.scheme}://{parsed.hostname}") return allowed_hosts, csrf_trusted_origins - - -class DurationConverter: - """ - using ffmpeg to get and parse duration from filepath - """ - - @staticmethod - def get_sec(file_path): - """read duration from file""" - duration = subprocess.run( - [ - "ffprobe", - "-v", - "error", - "-show_entries", - "format=duration", - "-of", - "default=noprint_wrappers=1:nokey=1", - file_path, - ], - capture_output=True, - check=True, - ) - duration_raw = duration.stdout.decode().strip() - if duration_raw == "N/A": - return 0 - - duration_sec = int(float(duration_raw)) - return duration_sec - - @staticmethod - def get_str(duration_sec): - """takes duration in sec and returns clean string""" - if not duration_sec: - # failed to extract - return "NA" - - hours = duration_sec // 3600 - minutes = (duration_sec - (hours * 3600)) // 60 - secs = duration_sec - (hours * 3600) - (minutes * 60) - - duration_str = str() - if hours: - duration_str = str(hours).zfill(2) + ":" - if minutes: - duration_str = duration_str + str(minutes).zfill(2) + ":" - else: - duration_str = duration_str + "00:" - duration_str = duration_str + str(secs).zfill(2) - return duration_str