Запуск стрима из скрипта Python (PyLiveStream?)
Моя задача
Программа динамически генерирует видео кусочками по несколько минут и складывает всё в папку (generated/0.mp4
, generated/1.mp4
и т.д.). Мне нужно стримить их на YouTube подряд, без разрывов между файлами.
Суть вопроса
Как я могу поочерёдно и непрерывно писать фреймы в поток, заменяя "на лету" исходные видеофайлы - т.е. по окончании отправки файла 0.mp4
без задержки начать отправлять 1.mp4
?
Мои попытки
- Изначально я нашёл решение с помощью библиотеки
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
с дальнейшим завершением работы скрипта.
- Я нашёл библиотеку
PyLiveStream
, но, насколько я понял из страницы на PyPI, это консольная утилита, непригодная для использования из моей собственной программы.
Могу ли я (как?) всё же приспособить VidGears
под такого рода задачу или использовать другие библиотеки для её реализации?