首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将pi的opencv视频传输到ffmpeg以用于Youtube流媒体

将pi的opencv视频传输到ffmpeg以用于Youtube流媒体
EN

Stack Overflow用户
提问于 2017-05-16 10:29:41
回答 1查看 1.7K关注 0票数 2

这是一个使用OpenCV读取picam的小python3脚本:

代码语言:javascript
复制
#picamStream.py

import sys, os
from picamera.array import PiRGBArray
from picamera import PiCamera
import time
import cv2

# initialize the camera and grab a reference to the raw camera capture
camera = PiCamera()
camera.resolution = (960, 540)
camera.framerate = 30
rawCapture = PiRGBArray(camera, size=(960, 540))

# allow the camera to warmup
time.sleep(0.1)

# capture frames from the camera
for frame in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True):

    image = frame.array

    # ---------------------------------
    # .
    # Opencv image processing goes here
    # .
    # ---------------------------------

    os.write(1, image.tostring())

    # clear the stream in preparation for the next frame
    rawCapture.truncate(0)

# end

我正试着把它传到ffmpeg到Youtube流

我的理解是,我需要参考下面的两个命令,才能想出一个新的ffmpeg命令。

管道picam现场视频到ffmpeg的Youtube流媒体。

raspivid -o - -t 0 -vf -hf -w 960 -h 540 -fps 25 -b 1000000 | ffmpeg -re -ar 44100 -ac 2 -acodec pcm_s16le -f s16le -ac 2 -i /dev/zero -f h264 - copy aac 128k 50实验性flv rtmp://a.rtmp.youtube.com/live2/STREAMKEY

管道OPENCV原始视频到ffmpeg的mp4文件。

python3 picamStream.py | ffmpeg -f rawvideo -pixel_format bgr24 -video_size 960x540 -framerate 30 -i - foo.mp4

到目前为止,我还没有运气。有人能帮我吗?

EN

回答 1

Stack Overflow用户

发布于 2019-04-01 06:01:53

这是我在raspberry pi中使用的程序。

代码语言:javascript
复制
#main.py

import subprocess 
import cv2

cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)

command = ['ffmpeg',
            '-f', 'rawvideo',
            '-pix_fmt', 'bgr24',
            '-s','640x480',
            '-i','-',
            '-ar', '44100',
            '-ac', '2',
            '-acodec', 'pcm_s16le',
            '-f', 's16le',
            '-ac', '2',
            '-i','/dev/zero',   
            '-acodec','aac',
            '-ab','128k',
            '-strict','experimental',
            '-vcodec','h264',
            '-pix_fmt','yuv420p',
            '-g', '50',
            '-vb','1000k',
            '-profile:v', 'baseline',
            '-preset', 'ultrafast',
            '-r', '30',
            '-f', 'flv', 
            'rtmp://a.rtmp.youtube.com/live2/[STREAMKEY]']

pipe = subprocess.Popen(command, stdin=subprocess.PIPE)

while True:
    _, frame = cap.read()
    pipe.stdin.write(frame.tostring())

pipe.kill()
cap.release()

Youtube需要一个音频源,所以使用-i /dev/zero。

我希望它能对你有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43991594

复制
相关文章

相似问题

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