sounddevice通过ffmpeg读取rstp远程网络设备声音;conda环境里用不了电脑系统环境里的应用ffmpeg

news/2024/7/10 20:14:14 标签: conda, ffmpeg

ffmpegrstp_0">1、sounddevice通过ffmpeg读取rstp远程声音

*** samples维度是samples_per_read指定 ***

##用全路径,调用系统ffmpeg,直接conda里运行不然容易出错
C:/Users/loong/.conda/envs/nlp/python.exe  D:\sound\ffmpeg_test.py

ffmpeg_test.py:

import sounddevice as sd
import numpy as np
import ffmpeg

# 音频设置
sample_rate = 44100
channels = 1
samples_per_read = 1024

# 打开RTSP流并连接到音频部分
# rtsp_url = 'rtsp://username:password@ip_address:port/stream_path'
rtsp_url = "rtsp://a******nnels/2?tcp"

input_stream = ffmpeg.input(rtsp_url).audio
print("##"*18)
print("input_stream:",input_stream)
print("##"*18)
# 配置音频处理管道和音频流
ffmpeg_process = (
    input_stream.output('pipe:', format='wav')
    .run_async(pipe_stdout=True)
    .stdout
)

# ffmpeg_process = ffmpeg.input(
#         rtsp_url
#     ).output(
#         'pipe:',
#         format='f32le',
#         acodec='pcm_f32le',
#         ac=channels,
#         ar=sample_rate,
#         loglevel='quiet',
#     ).run_async(pipe_stdout=True)

# 创建音频流
with sd.InputStream(channels=channels, dtype='float32', samplerate=sample_rate) as stream:
    while True:
        # 从FFmpeg进程中读取音频数据
        data = ffmpeg_process.read(samples_per_read * channels * 4)  # 每个样本32位浮点数,乘以4
        if not data:
            break

        # 将音频数据转换为浮点数数组
        samples = np.frombuffer(data, dtype=np.float32)
        print(samples.shape, samples)
        # 根据需要进行音频处理
        # ...

        # 在此处可以使用处理后的音频数据
        # ...

        # 读取下一批音频数据
        samples, _ = stream.read(samples_per_read)  # 阻塞式读取

# 停止FFmpeg进程,释放资源
ffmpeg_process.wait()
ffmpeg_process.terminate()

在这里插入图片描述

ffmpegzai_conda_71">2、 ffmpegzai conda环境里执行不了,在系统可以运行

import ffmpeg

stream = ffmpeg.input(r'D:\sound\222.mp4')
stream = ffmpeg.filter(stream, 'fps', fps=25, round='up')
stream = ffmpeg.output(stream, r'D:\sound\dummy2.mp4')
ffmpeg.run(stream)

会报错:
File “C:\Users\loong.conda\envs\nlp\lib\subprocess.py”, line 1435, in _execute_child
hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
FileNotFoundError: [WinError 2] 系统找不到指定的文件。
在这里插入图片描述
在这里插入图片描述

解决方法,用全部绝对路径执行可以正常运行

C:/Users/loong/.conda/envs/nlp/python.exe  D:\sound\ffmpeg_sounddevice.py

在这里插入图片描述


http://www.niftyadmin.cn/n/480806.html

相关文章

1.数据库相关知识点整理

数据库知识点复习: 1.join和left join区别 https://segmentfault.com/a/1190000017369618 当有重复值的时候: left join,right join,inner join,full join之间的区别 - lijingran - 博客园 2.阿里开发规范:为啥禁止使用外键 案例: 1&…

Ubuntu使用笔记

我的版本是20.04 使用dd命令克隆 硬盘对硬盘克隆的克完支持直接启动,小盘克到大盘,后续空间为未分配。 查看进度:sudo watch -n 5 pkill -USR1 ^dd$ 小分区克到大分区会导致大分区的显示容量变得和小分区一样. sudo parted /dev/mmcblk0 #…

flink1.15 regular join之left join 测试代码

目的: 通过测试代码查看join的效果 package com.yy.flinkSqlJoinimport org.apache.flink.streaming.api.scala.StreamExecutionEnvironment import org.apache.flink.table.api.{Schema, Table, TableResult} import org.apache.flink.table.api.bridge.scala.StreamTableEnv…

基于Java毕业生就业状况管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

Java 对象存储

Java是一种面向对象编程语言,它提供了类和对象的概念来组织和管理代码。在Java中,类是一种用户自定义的数据类型,它包含了属性和方法。对象是类的实例,可以通过调用对象的方法来操作对象的属性。在本文中,我们将深入探…

1374:铲雪车(snow)

今天我们来看看1374:铲雪车(snow) 首先,来看题目 1374:铲雪车(snow) 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 9370 通过数: 4058 【题目描述】 随着白天越来越短夜晚越来越长,我们不得不考虑铲雪问题了。整个城市所有的道路都是双车道,因为城市预算的…

如何加强网络安全

现如今,网络已经十分普及,其中也肯定会出现一些安全问题,那么,如何保护网络安全呢?我在这里给大家带来保护网络安全的 措施 ,希望能帮到大家。 一般来说,人们认为网络安全技术基本上就是“老三样”&#x…

JWT数字签名与token实现

JWT介绍 官方介绍 JSON Web Token (JWT)是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为JSON对象在各方之间安全地传输信息。该信息可以被验证和信任,因为它是数字签名的。 什么时候你应该用JSON Web Token &#xf…