gpt4 book ai didi

python - PyAv av.open() 指定使用的编解码器

转载 作者:行者123 更新时间:2023-12-03 01:12:13 42 4
gpt4 key购买 nike

当使用 PyAv 打开 alsa 音频设备时。我如何指定使用的编解码器而不是 ffmpeg 默认的编解码器,因为那是错误的。默认使用 pcm_s16le我需要使用 pcm_s32le .我可以使用以下 ffmpeg 命令从我的设备录制:

ffmpeg -f alsa -acodec pcm_s32le -i dmic_sv alsaout.wav
但不与
ffmpeg -f alsa -i dmic_sv alsaout.wav
这会给我以下错误:
[alsa @ 0x12061c0] cannot set sample format 0x10000 2 (Invalid argument)
dmic_sv: Input/output error
如何将工作命令传输到 PyAv av.open()功能?有 stream_options但它似乎不起作用。我试过了
stream_options = [{'-acodec': 'pcm_s32le'}]
av.open('dmic_sv', format='alsa', mode='r', stream_options=stream_options)
我得到的和上面一样。
av.error.OSError: [Errno 5] Input/output error: 'dmic_sv'; last error log: [alsa] cannot set sample format 0x10000 2 (Invalid argument)
这个怎么做?

最佳答案

我会回答我自己的问题,因为我想通了。我阅读了 ffmpeg 源代码,发现当使用 alsa 音频设备并且未指定编解码器时,ffmpeg 将默认使用带符号的 16 位 pcm 样本。代码 here .通过进一步探索源代码,编解码器值来自AVFormatContext::audio_codec_id结构字段。
现在弄清楚 PyAV 使用 Cython 来使用 FFmpeg 并通过阅读 Container 的 PyAV 源代码我注意到它持有 AVFormatContext 的类在它的self.ptr多变的。然后阅读InputContainer源代码,尤其是在调用 avformat_open_input 之前打开alsa设备的功能。 PyAV 不支持指定使用的音频编解码器。
我 fork 了库并很快结束了对 solution 的破解。为了我。现在的问题是是否可以将此功能添加到 PyAV 以强制用于音频的编解码器?在这种情况下,当设备使用 pcm 样本并依赖 ffmpeg 使用选择默认值时,它将始终使用 16 位样本,而在我的情况下,我需要使用 32 位样本。
希望这可以帮助某人并为他们省去我遇到的麻烦:) 我还为 PyAV 问题 here 发布了相同的答案.

关于python - PyAv av.open() 指定使用的编解码器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63422670/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com