get_video_cover.py 2.2 KB
from urllib.parse import urljoin

from django.conf import settings
from django.db.models import Q

from gm_types.mimas.qa import VIDEO_SOURCE_TYPE


def get_video_cover_url(source_id=None, source_type=None, video_urls=[]):
    """
    根据视频地址,处理出视频封面    http://wiki.wanmeizhensuo.com/pages/viewpage.action?pageId=11604981
    :param video_url: 以列表形式传入视频地址,NTM4MTMwKzE0Nzk4OTY4NDA0ODk=.mp4 或者 http://video-static.igengmei.com/lk82Vwe46leuk-qhwTk7uXsp10tv
    :return: [{"video_url":video_url,"video_pic":video_pic}]
    """

    from talos.models.topic.video import VideoCover
    from qa.tasks.get_video_blurcover import get_video_blurcover
    if isinstance(video_urls, str):
        video_urls = [video_urls]

    urls = [video_url.replace(settings.VIDEO_HOST, '') for video_url in video_urls]
    video_cover_info = VideoCover.objects.filter(
        video_url__in=urls,
        source_type=source_type,
        source_id=source_id
    ).values("video_url", "video_pic", "webp_url", "width", "height")

    _need_filter_video_urls, video_cover_list = [], []
    for item in video_cover_info:
        webp_url = item.get("webp_url") or ""

        _video_url = urljoin(settings.VIDEO_HOST, item["video_url"])
        _data = {
            "video_url": _video_url,
            "video_pic": item["video_pic"],
            "short_video_url": webp_url,
            "width": item.get("width", 0),
            "height": item.get("height", 0),
        }
        video_cover_list.append(_data)
        _need_filter_video_urls.append(_video_url)

    _url_list = list(set(video_urls) - set(_need_filter_video_urls))
    if _url_list:
        for raw_video_url in _url_list:
            _data = {
                "video_url": raw_video_url,
                "video_pic": urljoin(raw_video_url, settings.VIDEO_PIC_URL),
                "short_video_url": "",
                "width": 0,
                "height": 0,
            }
            video_cover_list.append(_data)
        get_video_blurcover.delay(source_id=source_id, source_type=source_type, video_list=_url_list)

    video_cover_list = sorted(video_cover_list, key=lambda _item: video_urls.index(_item["video_url"]))
    return video_cover_list