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