zoukankan      html  css  js  c++  java
  • 使用PYaudio录制音频和视频(自己)

    参考:https://blog.csdn.net/zhaoyun_zzz/article/details/84341801

    音频录制:简洁版

    import pyaudio
    import wave
    import time
    import sys

    CHUNK = 1024
    FORMAT = pyaudio.paInt16
    CHANNELS = 2
    RATE = 44100
    RECORD_SECONDS = 5000
    WAVE_OUTPUT_FILENAME = "output.wav"

    p = pyaudio.PyAudio()
    wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')
    wf.setnchannels(CHANNELS)
    wf.setsampwidth(p.get_sample_size(FORMAT))
    wf.setframerate(RATE)

    time_count = 0
    def callback(in_data, frame_count, time_info, status):
    wf.writeframes(in_data)
    if(time_count < 10):
    return (in_data, pyaudio.paContinue)
    else:
    return (in_data, pyaudio.paComplete)

    stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
    channels=wf.getnchannels(),
    rate=wf.getframerate(),
    input=True,
    stream_callback=callback)

    stream.start_stream()
    print("* recording")
    while stream.is_active():
    time.sleep(1)
    time_count += 1

    stream.stop_stream()
    stream.close()
    wf.close()
    p.terminate()
    print("* recording done!")


    视频录制(无声音版本):

    from PIL import ImageGrab
    import numpy as np
    import cv2

    image = ImageGrab.grab()#获得当前屏幕
    width = image.size[0]
    height = image.size[1]
    print("", width, "height:", height)
    print("image mode:",image.mode)
    k=np.zeros((width,height),np.uint8)
    fourcc = cv2.VideoWriter_fourcc(*'XVID')#编码格式
    video = cv2.VideoWriter('test.avi', fourcc, 25, (width, height))
    #输出文件命名为test.mp4,帧率为16,可以自己设置
    while True:
    img_rgb = ImageGrab.grab()
    img_bgr=cv2.cvtColor(np.array(img_rgb), cv2.COLOR_RGB2BGR)#转为opencv的BGR格式
    video.write(img_bgr)
    cv2.imshow('imm', img_bgr)
    if cv2.waitKey(1) & 0xFF == ord('q'):
    break
    video.release()
    cv2.destroyAllWindows()

    音频与视频结婚:(一定记住此中的MOVIEPY==1.0.0)

    import wave
    # import PyAudio as pyaudio
    import pyaudio

    # from pyaudio import pyAudio,paInt16
    from PIL import ImageGrab
    import numpy as np
    import cv2
    from moviepy.editor import *
    from moviepy.audio.fx import all
    import time

    CHUNK = 1024
    FORMAT = pyaudio.paInt16
    CHANNELS = 2
    RATE = 44100
    WAVE_OUTPUT_FILENAME = "output.wav"

    p = pyaudio.PyAudio()
    wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')
    wf.setnchannels(CHANNELS)
    wf.setsampwidth(p.get_sample_size(FORMAT))
    wf.setframerate(RATE)
    audio_record_flag = True
    def callback(in_data, frame_count, time_info, status):
    wf.writeframes(in_data)
    if audio_record_flag:
    return (in_data, pyaudio.paContinue)
    else:
    return (in_data, pyaudio.paComplete)
    stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
    channels=wf.getnchannels(),
    rate=wf.getframerate(),
    input=True,
    stream_callback=callback)
    image = ImageGrab.grab()#获得当前屏幕
    width = image.size[0]
    height = image.size[1]
    print("", width, "height:", height)
    print("image mode:",image.mode)
    k=np.zeros((width,height),np.uint8)

    fourcc = cv2.VideoWriter_fourcc(*'XVID')#编码格式
    video = cv2.VideoWriter('test.mp4', fourcc, 9.5, (width, height))
    #经实际测试,单线程下最高帧率为10帧/秒,且会变动,因此选择9.5帧/秒
    #若设置帧率与实际帧率不一致,会导致视频时间与音频时间不一致

    print("video recording!!!!!")
    stream.start_stream()
    print("audio recording!!!!!")
    record_count = 0
    while True:
    img_rgb = ImageGrab.grab()
    img_bgr=cv2.cvtColor(np.array(img_rgb), cv2.COLOR_RGB2BGR)#转为opencv的BGR格式
    video.write(img_bgr)
    record_count += 1
    if(record_count > 200):
    break
    print(record_count, time.time())

    audio_record_flag = False
    while stream.is_active():
    time.sleep(1)

    stream.stop_stream()
    stream.close()
    wf.close()
    p.terminate()
    print("audio recording done!!!!!")

    video.release()
    cv2.destroyAllWindows()
    print("video recording done!!!!!")

    print("video audio merge!!!!!")

    #音频和视频切片
    audioclip = AudioFileClip("output.wav")
    videoclip = VideoFileClip("test.mp4")


    videoclip2 = videoclip.set_audio(audioclip)
    video = CompositeVideoClip([videoclip2])
    video.write_videofile("test2.mp4",codec='mpeg4')
  • 相关阅读:
    [转载]重构代码的7个阶段
    查看JDK源码
    敏捷结果30天之第七天:设定边界值和缓冲
    敏捷结果30天之第十一天:高效能、慢生活
    他们到底需要神马???——戏说“用户需求”
    敏捷结果30天之第一天:总体认识敏捷结果方法
    敏捷结果30天之第五天:使用热图标识出重要事情
    重构代码学习笔记一:重构的原则
    开发可统计单词个数的Android驱动程序(2)
    使用Android NDK和Java测试Linux驱动
  • 原文地址:https://www.cnblogs.com/shuimuqingyang/p/12316597.html
Copyright © 2011-2022 走看看