Запуск стрима из скрипта Python (PyLiveStream?)

Моя задача

Программа динамически генерирует видео кусочками по несколько минут и складывает всё в папку (generated/0.mp4, generated/1.mp4 и т.д.). Мне нужно стримить их на YouTube подряд, без разрывов между файлами.


Суть вопроса

Как я могу поочерёдно и непрерывно писать фреймы в поток, заменяя "на лету" исходные видеофайлы - т.е. по окончании отправки файла 0.mp4 без задержки начать отправлять 1.mp4?


Мои попытки

  1. Изначально я нашёл решение с помощью библиотеки vidgears:
# Минимальный пример

from vidgear.gears import CamGear, WriteGear

output_params = {
    "-acodec": "aac",
    "-ar": 44100,
    "-b:a": 712000,
    "-vcodec": "libx264",
    "-preset": "medium",
    "-b:v": "4500k",
    "-bufsize": "512k",
    "-pix_fmt": "yuv420p",
    "-f": "flv"
}

current_chunk_num = 0

writer = WriteGear(
    output  = f"rtmp://a.rtmp.youtube.com/live2/{MY_YT_TOKEN}",
    logging = True,
    **output_params
)

stream = CamGear(
    source = "generated/0.mp4",
    logging = True
).start()

try:

    while True:

        frame = stream.read()

        if frame is None:
            current_chunk_num += 1
            stream.stop()
            stream = CamGear(
                source = f"generated/{current_chunk_num}.mp4",
                logging = True
            ).start()
        
        writer.write(frame)

except KeyboardInterrupt:
    stream.stop()
    writer.close()

..однако при попытке переопределения stream происходят непонятные вещи в духе

[mov,mp4,m4a,3gp,3g2,mj2 @ 000001c278113040] moov atom not found

с дальнейшим завершением работы скрипта.


  1. Я нашёл библиотеку PyLiveStream, но, насколько я понял из страницы на PyPI, это консольная утилита, непригодная для использования из моей собственной программы.

Могу ли я (как?) всё же приспособить VidGears под такого рода задачу или использовать другие библиотеки для её реализации?


Ответы (0 шт):