首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从python将OpenCV和PyAudio管道到ffmpeg streaming youtube rtmp

从python将OpenCV和PyAudio管道到ffmpeg streaming youtube rtmp
EN

Stack Overflow用户
提问于 2021-07-26 17:50:16
回答 1查看 116关注 0票数 0

如何从python通过管道将openCV和PyAudio传输到ffmpeg streaming youtube rtmp。错误消息如下:没有这样的筛选器:‘管道:1’管道:1:无效参数

下面是我的代码:

导入模块

代码语言:javascript
复制
import cv2
import subprocess
import pyaudio

音频

代码语言:javascript
复制
p = pyaudio.PyAudio()
info = p.get_host_api_info_by_index(0)
numdevices = info.get('deviceCount')
for i in range(0, numdevices):
        if (p.get_device_info_by_host_api_device_index(0, i).get('maxInputChannels')) > 0:
            print("Input Device id ", i, " - ", p.get_device_info_by_host_api_device_index(0, i).get('name'))

CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 2
RATE = 44100

stream = p.open(format=FORMAT,
                channels=CHANNELS,
                rate=RATE,
                input=True,
                frames_per_buffer=CHUNK)

# Stream Audio data here
# data = stream.read(CHUNK)

视频

代码语言:javascript
复制
rtmp = r'rtmp://a.rtmp.youtube.com/live2/key'

cap = cv2.VideoCapture(0)
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fps = 30

此处为命令参数

代码语言:javascript
复制
command = ['ffmpeg',
           '-y',
           '-f', 'rawvideo',
           '-pixel_format', 'bgr24',
           '-video_size', "{}x{}".format(width, height),
           '-framerate', str(fps),
           '-i', 'pipe:0',
           '-re',
           '-f', 'lavfi',
           '-i', 'pipe:1',
           '-c:v', 'libx264',
           '-c:a', 'aac',
           '-vf', 'format=yuv420p',
           '-f', 'flv',
           rtmp]

Create subprocess to ffmpeg命令

代码语言:javascript
复制
pipe = subprocess.Popen(command, shell=False, stdin=subprocess.PIPE
)
while cap.isOpened():
    success, frame = cap.read()
    if success:
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
        pipe.stdin.write(frame.tostring())
        pipe.stdin.write(stream.read(CHUNK))

音频停止

代码语言:javascript
复制
stream.stop_stream()
stream.close()
p.terminate()

视频停止

代码语言:javascript
复制
cap.release()
pipe.terminate()

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-22 13:38:57

我已经成功地使用CreateNamePipe创建了视频,并使用标准输入创建了音频。

代码语言:javascript
复制
PIPE_NAME = r'\\.\pipe\VideoPipe'

video_pipe = win32pipe.CreateNamedPipe(
    PIPE_NAME,
    win32pipe.PIPE_ACCESS_OUTBOUND,
    win32pipe.PIPE_TYPE_BYTE | win32pipe.PIPE_READMODE_BYTE | win32pipe.PIPE_WAIT,
    1, 65536, 65536,
    0,
    None)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68527762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档