FFMPEG:更改输入而不停止进程

FFMPEG:更改输入而不停止进程

如何在 linux Debian 9 上更改 ffmpeg 的输入而不停止进程?我是用户 Decklink 输入,我需要更改为文件 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'

答案1

对于任何其他期待这个答案的人,我得到了以下解决方案(使用 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:在 .3gp 文件所在的目录中编写 switcher.py 文件

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”即可展示您的广告!

请记住更改屏幕值!

希望我已经帮助别人了! (可能我会对这篇文章做一些编辑)

答案2

嗯,我不太明白你的问题......

如果您在使用 DeckLink 和 ffmpeg 时遇到问题,这些网站可能会有用:

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

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

如果您尝试从 DeckLink 切换到摄像机或其他录制设备,那么我恐怕您需要编写一个“切换器”(可能,如果进行流式传输,则流将停止)。如果您在编码方面需要任何帮助,请给我发送电子邮件! (我没有足够的声誉来发表评论)

相关内容