使用 ffmpeg [python soundfile] 从 opus 转换为 ogg 文件

Convert from opus to ogg file using ffmpeg [python soundfile]

我在我的一个项目中使用 python soundfile 音频文件。我有一个包含 opus 个文件的数据集。

python soundfile不能直接读取opus文件,但可以读取ogg文件。 (https://github.com/bastibe/python-soundfile/issues/252)

如何使用 ffmpeg 将所有 opus 文件转换为 ogg 文件?

我试过以下命令,

 ffmpeg -i test_file_2.opus -c:a libvorbis -b:a 16k test_file_2.ogg

但是我得到一个错误,

ffmpeg version 4.3 Copyright (c) 2000-2020 the FFmpeg developers
  built with gcc 7.3.0 (crosstool-NG 1.23.0.449-a04d0)
  configuration: --prefix=/opt/conda --cc=/opt/conda/conda-bld/ffmpeg_1597178665428/_build_env/bin/x86_64-conda_cos6-linux-gnu-cc --disable-doc --disable-openssl --enable-avresample --enable-gnutls --enable-hardcoded-tables --enable-libfreetype --enable-libopenh264 --enable-pic --enable-pthreads --enable-shared --disable-static --enable-version3 --enable-zlib --enable-libmp3lame
  libavutil      56. 51.100 / 56. 51.100
  libavcodec     58. 91.100 / 58. 91.100
  libavformat    58. 45.100 / 58. 45.100
  libavdevice    58. 10.100 / 58. 10.100
  libavfilter     7. 85.100 /  7. 85.100
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  7.100 /  5.  7.100
  libswresample   3.  7.100 /  3.  7.100
[ogg @ 0x55bad6b9cbc0] 543 bytes of comment header remain
Input #0, ogg, from 'test_file_2.opus':
  Duration: 00:00:14.10, start: 0.000000, bitrate: 34 kb/s
    Stream #0:0: Audio: opus, 48000 Hz, mono, fltp
    Metadata:
      album           : Onder Moeders Vleugels
      ENCODER_OPTIONS : --quiet
      artist          : Louisa May Alcott
      title           : 02 - Een vroolijk kerstfeest
      encoder         : opusenc from opus-tools 0.1.10;Lavf57.83.100
Unknown encoder 'libvorbis'

我现在正在使用 librosa 进行转换,但这非常慢:

# converting opus to ogg files for reading audio files with python soundfile
from glob import glob
from tqdm import tqdm
import soundfile as sf 
import librosa
import os

for f in tqdm(glob("/Data/AUDIO_DATA/mls_dutch_opus/*/audio/*/*/*.opus") + glob("/Data/AUDIO_DATA/mls_german_opus/*/audio/*/*/*.opus")):
    audio, sr = librosa.load(f, res_type='kaiser_fast', sr = 16000)
    sf.write(f.replace(".opus", ".ogg"), audio, sr, format='ogg', subtype='vorbis')
    os.remove(f)

未知编码器'libvorbis'

您的 ffmpeg 没有 libvorbis 支持。 configure 行中缺少 --enable-libvorbis。 libvorbis 是一个输出 Vorbis 音频格式的音频编码器。 Vorbis 是 OGG/OGA 容器中通常使用的音频格式。 libvorbis 是 Vorbis 音频的推荐编码器。

找到一个新的 version/package 的 ffmpeg --enable-libvorbis 或重新编译 ffmpeg 并包含它。

实验性 vorbis 编码器

FFmpeg 有一个名为 vorbis 的内置编码器,但它被认为是实验性的,无法与 libvorbis 相提并论。如果您关心质量,请改用 libvorbis。如果你想尝试 vorbis:

ffmpeg -i input.opus -c:a vorbis -strict experimental output.ogg

或管道到 oggenc

ffmpeg -i input.opus -f wav - | oggenc -o output.ogg -