move DurationConverter to separate module
This commit is contained in:
parent
bf7a429dac
commit
a4d42573ef
|
@ -16,8 +16,9 @@ from home.src.download.yt_dlp_base import YtWrap
|
||||||
from home.src.es.connect import ElasticWrap, IndexPaginate
|
from home.src.es.connect import ElasticWrap, IndexPaginate
|
||||||
from home.src.index.playlist import YoutubePlaylist
|
from home.src.index.playlist import YoutubePlaylist
|
||||||
from home.src.index.video_constants import VideoTypeEnum
|
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.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
|
from home.src.ta.ta_redis import RedisQueue
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,8 @@ from home.src.index import playlist as ta_playlist
|
||||||
from home.src.index.generic import YouTubeItem
|
from home.src.index.generic import YouTubeItem
|
||||||
from home.src.index.subtitle import YoutubeSubtitle
|
from home.src.index.subtitle import YoutubeSubtitle
|
||||||
from home.src.index.video_constants import VideoTypeEnum
|
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 home.src.ta.ta_redis import RedisArchivist
|
||||||
from ryd_client import ryd_client
|
from ryd_client import ryd_client
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
@ -8,7 +8,6 @@ import os
|
||||||
import random
|
import random
|
||||||
import re
|
import re
|
||||||
import string
|
import string
|
||||||
import subprocess
|
|
||||||
import unicodedata
|
import unicodedata
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from urllib.parse import urlparse
|
from urllib.parse import urlparse
|
||||||
|
@ -163,54 +162,3 @@ def ta_host_parser(ta_host):
|
||||||
csrf_trusted_origins.append(f"{parsed.scheme}://{parsed.hostname}")
|
csrf_trusted_origins.append(f"{parsed.scheme}://{parsed.hostname}")
|
||||||
|
|
||||||
return allowed_hosts, csrf_trusted_origins
|
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
|
|
||||||
|
|
Loading…
Reference in New Issue