FFMPEG: изменить ввод без остановки процесса

Как я могу изменить ввод на ffmpeg без остановки процесса на Linux Debian 9? Я пользователь ввода колода ссылок, и мне нужно изменить в файл MP4 ввода.

ffmpeg -f decklink -i 'DeckLink Mini Recorder' -vf setpts=PTS-STARTPTS -pix_fmt uyvy422 -s 1920x1080 -r 25000/1000 -f decklink 'DeckLink Mini Monitor' 

Для любого другого человека, ожидающего этот ответ, я нашел следующее решение (с использованием Python и CV2):

ШАГ 1: Запустите вашу камеру (или любой другой вход ffmpeg) в режиме реального времени локально

 ffmpeg -i /dev/video0 -b 50k -r 20 -s 720x480 -f mpegts udp://127.0.0.1:2000 

ШАГ 2. Сделайте объявление или видео, которое вы хотите отобразить, с разрешением в качестве входных данных и, что наиболее важно, сохраните в виде видеофайла .3gp. ШАГ 3: Запишите файл switcher.py в тот же каталог, что и ваш файл .3gp

 import cv2 import sys def main(argv): adName = argv[0] cap = cv2.VideoCapture("udp://127.0.0.1:2000") showAd = 2 while cap.isOpened(): if showAd == 1: cap.release() del cap cap = cv2.VideoCapture(adName) showAd = 0 if showAd == 2: cap.release() del cap cap = cv2.VideoCapture("udp://127.0.0.1:2000") showAd = 0 ret, frame = cap.read() try: height, width, channels = frame.shape except: cap.release() del cap cap = cv2.VideoCapture("udp://127.0.0.1:2000") key = cv2.waitKey(33) if key==27: showAd = 1 if key==32: showAd = 2 if(ret): sys.stdout.write(frame.tostring()) cv2.imshow("frame",frame) cap.release() if __name__ == "__main__": main(sys.argv[1:]) в import cv2 import sys def main(argv): adName = argv[0] cap = cv2.VideoCapture("udp://127.0.0.1:2000") showAd = 2 while cap.isOpened(): if showAd == 1: cap.release() del cap cap = cv2.VideoCapture(adName) showAd = 0 if showAd == 2: cap.release() del cap cap = cv2.VideoCapture("udp://127.0.0.1:2000") showAd = 0 ret, frame = cap.read() try: height, width, channels = frame.shape except: cap.release() del cap cap = cv2.VideoCapture("udp://127.0.0.1:2000") key = cv2.waitKey(33) if key==27: showAd = 1 if key==32: showAd = 2 if(ret): sys.stdout.write(frame.tostring()) cv2.imshow("frame",frame) cap.release() if __name__ == "__main__": main(sys.argv[1:]) 

ШАГ 5: Запустите switcher.py с вашим именем объявления и результатами.

 python switcher.py ad.3gp| ffplay -f rawvideo -pixel_format bgr24 -video_size 720x480 -i - 

ШАГ 6: Нажмите «Esc», чтобы показать свою рекламу!

ПОМНИТЕ, ЧТОБЫ ИЗМЕНИТЬ ЗНАЧЕНИЯ ЭКРАНА!

Надеюсь, я кому-то помог! (Возможно, я сделаю некоторые правки в этом посте)

Хммм, я не очень хорошо понимаю ваш вопрос …

Если у вас есть проблемы с использованием DeckLink и ffmpeg, эти сайты могут быть полезны:

https://www.ffmpeg.org/ffmpeg-devices.html#decklink

https://trac.ffmpeg.org/wiki/Capture/Blackmagic

Если вы пытаетесь переключиться с одного DeckLink на камеру или другое записывающее устройство, то я боюсь сказать, что вам нужно будет кодировать «переключатель» (возможно, при streamовой передаче stream остановится). Если вам нужна помощь с кодированием, напишите мне! (У меня недостаточно репутации, чтобы комментировать)