Дерево страниц

resources/archive/video_exporter.py

Модуль предоставляет высокоуровневый интерфейс экспорта видео в виде класса ShotSaver.

Аргументы класса

  • callback (callable[str, str], optional): Callback функция, в которую передается текущий статус экспорта.
  • queue_maxlen (int, optional): Максимальная длина очереди на экспорт. По умолчанию 1000.

Публичные атрибуты класса

  • export_folder (str): Стандартная папка для экспорта видео. По умолчанию папка скриншотов сервера.
  • file_name_tmpl (str): Шаблон стандартного имени файла. По умолчанию "{name} ({dt_start} - {dt_end}){sub}.avi"
  • callback (callable[str, str], optional): Тоже что аргумент callback
  • cancel_task_with_states (Tuple[int]): Список статусов задач, которые удаляются из списка задач в gui интерфейсе трассира. По умолчанию (2, 3)
    Список возможных статусов:
    • 0 - in queue
    • 1 - exporting
    • 2 - success
    • 3 - failed

По умолчанию удаляются все задачи из списка, которые успешно завершены или звершились с ошибкой.
Для отладки можно отключить автоматическую очистку задач.

from video_exporter import VideoExporter

ve = VideoExporter()
ve.cancel_task_with_states = tuple()

Методы класса

  • export - Создание задачи на экспорт видео фрагмента.
    Спиоск аргументов:
    • channel_full_guid (str): Guid канала вида ChannelGuid_ServerGuid
    • dt_start (datetime.datetime): Дата/время начала видеофрагмента для экспорта
    • dt_end (datetime.datetime, optional): Датавремя окончания видеофрагмента для экспорта
    • duration (int, optional): Продолжительность видеофрагмента в секундах. Используется только если не задано dt_end. По умолчанию 60
    • prefer_substream (bool, optional): Если True - экспортирует субпоток. По умолчанию False
    • file_name (str, optional): Имя экспортируемого файла. Если не заано формирует имя согласно параметру file_name_tmpl
    • file_path (str, optional): Путь для экспорта файла. Если не задано используется путь, указанный в параметре export_folder
    • options (Dict[str: any]): Доп. опции для экспорта, описание ниже.
    • callback (callable[str, str], optional): Callback функция, в которую передается текущий статус экспорта. Если не задано - используется callback параметр класса.
    • task_guid (str, optional): Guid задачи. По умолчанию задается с помощью функции host.random_guid()

Опции экспорта

  • is_hardware (bool): определяет источник видео. False - TRASSIR, True - камера. 
  • video_codec ('mpeg4'|'wmv'): Название видеокодека. Регистр букв игнорируется. В случае задания любого другого значения, в том числе пустой строки, будет использоваться оригинальный формат видео (без перекодирования).
  • video_bitrate (200|400|600|800|1000|2000|2500|3000|5000|7500|10000|16000): битрейт выходного видеопотока в Килобитах/с. В случае задания любого другого значения будет использоваться ближайшее не большее из поддерживаемых, т.е. при указании 999, будет использоваться значение 800, за исключением значений меньше 200 (включая отрицательные), в случае которых будет использоваться значение 200. По умолчанию используется оригинальный битрейт исходного видео, но при указании этого поля нельзя задать оригинальный битрейт. Поэтому если вам нужен оригинальный битрейт, вообще не задавайте поле video_bitrate.
    Применяется только если задан видеокодек (включено перекодирование), в противном случае игнорируется.
  • video_resolution ('2560x1920'|'2048x1536'|'1920x1080'|'1600x1200'|'1280x1024'|'1280x1960'|'1280x720'|'1024x768'| '800x600'|'720x576'|'704x576'|'640x480'|'352x288'|'320x240'|'176x144'):  разрешение выходного видео. Не допускается задавать любые другие значения. В случае задания пустой строки будет использоваться оригинальное разрешение видео.
    Применяется только если задан видеокодек (включено перекодирование), в противном случае игнорируется.
  • audio_codec ('no audio'|'pcm'|'wma'): название аудиокодека. Регистр букв игнорируется. В случае задания любого другого значения, в том числе пустой строки, будет использоваться оригинальный формат аудио (без перекодирования).
  • audio_bitrate (64|128): битрейт выходного аудиопотока в Килобитах/с. В случае задания значения больше 96 будет использоваться значение 128, иначе будет использоваться значение 64. По умолчанию используется оригинальный битрейт исходного аудиопотока, но при указании этого поля нельзя задать оригинальный битрейт. Поэтому если вам нужен оригинальный битрейт, вообще не задавайте поле audio_bitrate.
    Применяется только если задан аудиокодек (включено перекодирование), в противном случае игнорируется.
  • need_fliprotate (bool): при значении True будут применяться параметры "flip" и "rotate" из настроек соответствующего канала.
    Применяется только если задан видеокодек (включено перекодирование), в противном случае игнорируется.
  • watermark_need_figures (bool): при значении True поверх видео будут рисоваться фигуры (при их наличии). 
    Применяется только если задан видеокодек (включено перекодирование), в противном случае игнорируется.
  • need_channel_name_watermark (bool): при значении True поверх видео будут рисоваться имя канала (взятое из настроек соответствующего канала)
    Применяются только если задан видеокодек (включено перекодирование), в противном случае игнорируются.
  • need_timestamp_watermark (bool): при значении True поверх видео будут рисоваться таймстамп текущего кадра в области заданной полем watermark_align.
    Применяются только если задан видеокодек (включено перекодирование), в противном случае игнорируются.
  • watermark_align (0|1|2|3|4): определяет в какой области кадра будет рисоваться watermark-текст.
    • 0 или 1 - верхний левый угол;
    • 2 - верхний правый угол;
    • 3 - нижний левый угол;
    • 4 - нижний правый угол. 

Статусы экспорта

Возможные статусы 'экспорта содержатся в объекте status:

  • status.canceled - Задача отменена.
  • status.exporting - Видео экспортируется.
  • status.error - Произошла ошибка экспорта.
  • status.success - Видео успешно экспортировано.
  • status.in_queue - Задача в очереди на экспорт.

Примеры кода

Экспортируем архив за последние 15 секунд.
import datetime
from video_exporter import VideoExporter

CHANNEL_GUID = "uR76TlcA_O4Yazs8u"

ve = VideoExporter()

dt = datetime.datetime.now() - datetime.timedelta(seconds=15)
ve.export(CHANNEL_GUID, dt, duration=15)
Экспортируем субпоток за сегодня с 12:00 до 12:15.
import datetime
from video_exporter import VideoExporter

CHANNEL_GUID = "uR76TlcA_O4Yazs8u"

ve = VideoExporter()

today = datetime.datetime.now().today()

dt_start = datetime.datetime.combine(today, datetime.time(hour=12))
dt_end = datetime.datetime.combine(today, datetime.time(hour=12, minute=15))

ve.export(CHANNEL_GUID, dt_start, dt_end=dt_end, prefer_substream=True)
Отслеживаем статус экспорта видео

При успешном экспорте открываем видео.

import os
import datetime
import host
from video_exporter import VideoExporter, status

CHANNEL_GUID = "uR76TlcA_O4Yazs8u"

tasks = {}


def callback(guid, state):
    host.message("[%s] %s" % (guid, state))
    if state == status.success:
        fpath = tasks.pop(guid)
        os.startfile(fpath)
    elif state == status.error:
        fpath = tasks.pop(guid)
        host.error("Export failed: %s" % fpath)


ve = VideoExporter(callback=callback)

dt = datetime.datetime.now() - datetime.timedelta(seconds=15)
task_guid, file_path = ve.export(CHANNEL_GUID, dt, duration=15)
tasks[task_guid] = file_path