【问题标题】:How can I record audio and video simultaneously in Python?如何在 Python 中同时录制音频和视频?
【发布时间】:2019-07-21 15:54:10
【问题描述】:

我需要使用 Python 录制和保存视频及其对应的音频。我可以单独执行此操作(保存音频然后保存视频),但它不会同时发生。

当然,我也想过使用多处理,但还是不行

p1 = Process(target=listen_to_speaker())
p1.start()
# needs to run at the same time as
p2 = Process(target=record_save())
p2.start()

这里,

listen_to_speaker() 记录音频并将其保存在.wav 文件中(并且还使用speech_recognition 模块存储该音频的文本转换)。

record_save() 使用 OpenCV 从网络摄像头录制视频并将其存储在 .avi 文件中

目前,录制并保存音频,然后打开网络摄像头录制视频。

我也尝试添加:

p1.join()
p2.join()

事情的结果没有改变。

我的预期结果是2个文件,一个视频和一个音频,它们是相互对应的。

【问题讨论】:

    标签: python audio video multiprocessing


    【解决方案1】:

    target= 需要不带 () 且不带参数的函数名称。它被称为“回调”。

    p1 = Process(target=listen_to_speaker)
    
    p2 = Process(target=record_save)
    

    如果您必须运行带有参数的函数,那么您可以将它们作为元组分配给 args

    p1 = Process(target=listen_to_speaker, args=(arg1,arg2) )
    
    p2 = Process(target=record_save, args=(arg1,arg2) )
    

    如果函数只需要一个参数,那么您仍然必须使用元组args=(arg1,)


    您当前的代码与此代码类似

    result1 = listen_to_speaker()
    result2 = record_save()
    
    p1 = Process(target=result1)
    p1.start()
    
    p2 = Process(target=result2)
    p2.start()
    

    所以你在主线程中运行函数并使用函数的结果启动进程。

    如果他们什么都不返回,那么你有 target=None 所以进程甚至不会启动

    【讨论】:

    • 我在运行该代码时收到此错误消息:当调用 fork() 时,+[AVCaptureDevice initialize] 可能已在另一个线程中进行。
    • 这是不同的问题 - 也许第二个进程必须等到第一次初始化设备或者设备不能同时使用两个线程。在新页面上创建新问题,描述新问题并在listen_to_speakerrecord_save中显示代码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-17
    • 1970-01-01
    • 2020-10-04
    • 2014-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多