python - 加载到 Python 时,短 ogg 文件( Telegram 语音消息)的持续时间不正确

标签 python ffmpeg telegram voice ogg

我正在尝试使用 Python 阅读 Telegram 发送的语音消息,但对于短语音剪辑(< 10 秒),它不起作用。由于某种原因,它缩短了持续时间。好像和 OGG codec 有关系,但我不太确定。

看这里是我的代码,语音片段大约是 6 秒,但是 pydub将我的 6 秒语音片段读取为 0.06 秒。

import telegram
from pydub import AudioSegment

AudioSegment.ffmpeg = "./dependencies/ffmpeg-20180802-c9118d4-win64-static/bin/ffmpeg"
AudioSegment.converter = "./dependencies/ffmpeg-20180802-c9118d4-win64-static/bin/ffmpeg"


bot = telegram.Bot(token=token)
f = bot.get_file(file_id)
f.download('output/voiceclips/{}.ogg'.format(file_id))

myaudio = AudioSegment.from_ogg("output/voiceclips/{}.ogg".format(file_id))
print('ID: {}, which is {} seconds'.format(file_id, myaudio.duration_seconds)) 

>>> ID: ______, which is 0.06 seconds

当我在 VLC-player 中打开文件时,它还指出它有 0 秒。当我尝试使用 FFmpeg 将其转换为 WAV 文件时,它会将 ogg 文件读取为 6 秒,但将其写入为 0.05 秒的 WAV 文件。
ffmpeg -i infile.ogg outfile.wav
ffmpeg version N-91549-gc9118d4d64 Copyright (c) 2000-2018 the FFmpeg developers
  built with gcc 7.3.1 (GCC) 20180722
  configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-bzlib --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth
  libavutil      56. 18.102 / 56. 18.102
  libavcodec     58. 22.100 / 58. 22.100
  libavformat    58. 17.101 / 58. 17.101
  libavdevice    58.  4.101 / 58.  4.101
  libavfilter     7. 26.100 /  7. 26.100
  libswscale      5.  2.100 /  5.  2.100
  libswresample   3.  2.100 /  3.  2.100
  libpostproc    55.  2.100 / 55.  2.100
[ogg @ 0000020dd375ad40] 727 bytes of comment header remain
Input #0, ogg, from 'infile.ogg':
  Duration: 00:00:06.03, start: 0.000000, bitrate: 20 kb/s
    Stream #0:0: Audio: opus, 48000 Hz, mono, fltp
Stream mapping:
  Stream #0:0 -> #0:0 (opus (native) -> pcm_s16le (native))
Press [q] to stop, [?] for help
Output #0, wav, to 'outfile.wav':
  Metadata:
    ISFT            : Lavf58.17.101
    Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 48000 Hz, mono, s16, 768 kb/s
    Metadata:
      encoder         : Lavc58.22.100 pcm_s16le
size=       6kB time=00:00:00.05 bitrate= 873.0kbits/s speed=4.12x
video:0kB audio:6kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.354167%

对于较大的文件,它可以工作!

最佳答案

找到了解决方案!我们使用了 opustools,https://opus-codec.org/docs/ ,这确实有效。现在,为下载文件夹设置环境路径后, opusdec infile.ogg outfile.wav 确实适用于短语音消息

关于python - 加载到 Python 时,短 ogg 文件( Telegram 语音消息)的持续时间不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51672152/

相关文章:

python - 如何使用 telethon 向我的 channel 发送消息

python - 从Python字符串中删除特殊字符和符号

python - 我可以在没有根记录器的情况下拥有logging.ini 文件吗?

qt - 使用opencv和ffmpeg dylib错误部署QT项目

ffmpeg - 手机中用于硬件加速视频解码的 API 有哪些?

android - ffmpeg 构建错误看起来 tmp 文件创建失败?

python - HTTP 404 - 无法将 url 参数传递给 flask 路由

python - Tensorflow:Sigmoid交叉熵损失不会强制网络输出为0或1

Telegram bot 在群聊中没有响应

rpc - 如何在 Telegram 中进行基本的远程过程调用 (RPC)?