《自拍教程68》Python调用摄像头? 干嘛? 干正事!!!(python 摄像头拍照)

网友投稿 307 2022-06-22


准备阶段

Python面向对象类形式

由于涉及设备初始化,开始录像,停止录像等功能。

更建议直接用面向对象类形式来定义这个模块。

# coding=utf-8

import os

import time

import subprocess

class FFmpegRecorder(object):

def __init__(self, camera_device="None"):

self.__restore_ffmpeg() # 先重置ffmpeg

self.camera_device = camera_device

self.__ffmpeg_p = None

def __restore_ffmpeg(self):

'''防止ffmpeg正在录制视频,导致视频设备被占用'''

os.system("taskkill /im ffmpeg.exe /f")

def start_record(self, output_file):

command = "ffmpeg -f dshow -s 640x480 -i video=\"%s\" -vcodec libxvid -y %s" % (self.camera_device, output_file)

self.__ffmpeg_p = subprocess.Popen(command)

def stop_record(self):

if self.__ffmpeg_p != None:

self.__ffmpeg_p.terminate()

time.sleep(1)

else:

print("please run start_record() firstly")

if __name__ == "__main__":

CAMERA_DEVICE = "USB " # 常量, 自行去Windows设备管理器查看

f_obj = FFmpegRecorder(CAMERA_DEVICE)

for i in range(100):

f_obj.start_record("%s.avi" % i)

time.sleep(20) #录制一个20s的视频

f_obj.stop_record()

time.sleep(1)

运行效果视频

视频上传失败,跳转至官网查看本视频效果

扩展阅读

以上案例只能录制无声视频,如果想录制有声视频,

且想分别在Window操作系统及Linux操作系统端实现,可参考以下命令:

功能

命令

环境

列出所有ffmpeg能调用的视频及音频设备源

ffmpeg -list_devices true -f dshow -i dummy

Windows系统

录制视频并录音

ffmpeg -f dshow -i video="USB " audio="USB Audio Device" -s 640x480 -vcodec libxvid -acodec aac -y C:\record.avi

Windows系统

列出所有ffmpeg能调用的视频及音频设备源

v4l2-ctl --list-devices

Linux系统

录制视频并录音

ffmpeg -f v4l2 -i video="/dev/video1" audio="/dev/snd/seq" -s 640x480 -vcodec libxvid -acodec aac -y /home/zipython/record.avi

Linux系统

小提示: ffmpeg从摄像头获取图片并编码的过程中,如果经常出现error或者frame dropped (丢帧),

可以考虑降低分辨率,比如从1920x1080降低到640x480的分辨率。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:用python来分析这几天的热点:5000亿资产是什么水平
下一篇:01.Django-基础(django基础教程 pdf)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~