def get_image_list_from_subtitles(path, subs=[], dar=None): """ :param path: video path :param subs: list of subtitle dictionaries :param dar: display aspect ratio from video """ sanity_checks(subs) logger.info(f"Subtitles found: {len(subs)}") capture = cv2.VideoCapture(path) if not dar: dar = get_dar(path) fps = capture.get(cv2.CAP_PROP_FPS) for subtitle in subs: start, end = start_end_gif(fps, sub_dict=subtitle) end += 10 logger.info(f"Start: {start} - end: {end}; diff: {start - end}") for i in range(start, end, 3): capture.set(1, i) pil = scale_to_gif( cv2_to_pil(fix_dar(path, capture.read()[1], dar))) yield draw_quote(center_crop_image(pil), subtitle["message"])
def insert_movie(movie_dict): """ :param movie_dict: Movie dictionary from Radarr """ # pylint: disable=E1101 i = movie_dict filename = i["movieFile"]["path"] to_srt = Path(filename).with_suffix("") srt = f"{to_srt}.en.srt" display_aspect_ratio = get_dar(filename) logger.info("Getting movie info from TheMovieDatabase.org") movie = tmdb.Movies(i["tmdbId"]) movie.info() country_list = ", ".join([i["name"] for i in movie.production_countries]) movie.credits() dirs = [m["name"] for m in movie.crew if m["job"] == "Director"] logger.info("Ok") values = ( movie.title, getattr(movie, "original_title", movie.title), movie.release_date.split("-")[0], ", ".join(dirs), country_list, input(f"Category for '{movie.title}':\n- ") or "Certified Kino", f"{IMAGE_BASE}{getattr(movie, 'poster_path', 'Unknown')}", f"{IMAGE_BASE}{getattr(movie, 'backdrop_path', 'Unknown')}", filename, srt, i["tmdbId"], i["overview"], movie.popularity, movie.budget, i["movieFile"]["quality"]["quality"]["name"].split("-")[0], i["imdbId"], i["movieFile"]["mediaInfo"]["runTime"], display_aspect_ratio, ) insert_into_table(values) logger.info(f"Added: {movie.title}")
def update_dar_from_table(table="movies"): """ Update all files with missing DAR from table. :param table """ with sqlite3.connect(KINOBASE) as conn: paths = conn.execute( f"select path from {table} where dar=0").fetchall() logger.info(f"Files with missing DAR: {len(paths)}") for path in paths: dar = get_dar(path[0]) conn.execute( f"update {table} set dar=? where path=?", ( dar, path[0], ), ) conn.commit()
def get_image_list_from_range(path, range_=(0, 7), dar=None): """ :param path: video path :param subs: range of seconds :param dar: display aspect ratio from video """ sanity_checks(range_=range_) logger.info("About to extract GIF for range %s", range_) capture = cv2.VideoCapture(path) if not dar: dar = get_dar(path) fps = capture.get(cv2.CAP_PROP_FPS) start, end = start_end_gif(fps, range_=range_) logger.info(f"Start: {start} - end: {end}; diff: {start - end}") for i in range(start, end, 3): capture.set(1, i) yield scale_to_gif( center_crop_image(cv2_to_pil(fix_dar(path, capture.read()[1], dar))))