后台小程序开发的全方位指南
942
2022-09-16
《自拍教程68》Python调用摄像头? 干嘛? 干正事!!!(python 摄像头拍照)
准备阶段
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~