Python FFMPEG loudnorm筛选器与消音器移动筛选器组合使用时不起作用

Python FFMPEG loudnorm筛选器与消音器移动筛选器组合使用时不起作用,python,python-3.x,audio,ffmpeg,normalization,Python,Python 3.x,Audio,Ffmpeg,Normalization,我想为TTS模型培训一致地规范化音频文件。输出音频文件应符合以下标准: 单通道 22050赫兹的采样率 wav格式 音频剪辑开始和结束时无静音 音量-24分贝 我已经达到了前4个标准。到目前为止,它工作正常 标准化音量基本上也适用于此ffmpeg命令-af loudnorm=I=-24:LRA=11:TP=-1.5,但不适用于静音移除:只要我使用此ffmpeg命令移除静音agate=threshold=0.045:attack=0.5:release=500:ratio=5000,消音器移动=开

我想为TTS模型培训一致地规范化音频文件。输出音频文件应符合以下标准:

  • 单通道
  • 22050赫兹的采样率
  • wav格式
  • 音频剪辑开始和结束时无静音
  • 音量-24分贝
  • 我已经达到了前4个标准。到目前为止,它工作正常

    标准化音量基本上也适用于此ffmpeg命令
    -af loudnorm=I=-24:LRA=11:TP=-1.5
    ,但不适用于静音移除:只要我使用此ffmpeg命令移除静音
    agate=threshold=0.045:attack=0.5:release=500:ratio=5000,消音器移动=开始时段=1:start\u threshold=0.0075,反之,消音器移动=开始\u周期=1:开始\u阈值=0.0075,areverse
    ,响度标准化不再工作:输出音量现在在-25dB和-32dB之间变化,而不是期望的-24dB

    这是我使用的完整ffmpeg命令

    ffmpeg -i filename.flac -ac 1 -af agate=threshold=0.045:attack=0.5:release=500:ratio=5000,silenceremove=start_periods=1:start_threshold=0.0075,areverse,silenceremove=start_periods=1:start_threshold=0.0075,areverse,loudnorm=I=-24:LRA=11:TP=-1.5,aresample=22050 -y -hide_banner filename.wav
    
    这是我用来运行它的一段代码:

    import os
    
    INPUT_DIR = '/home/username/all_data'
    OUTPUT_DIR = '/home/username/normalized_data'
    for filename in os.listdir(INPUT_DIR):
        wav_filename = filename[:-5] + '.wav'
        command = (f'ffmpeg -i {INPUT_DIR}/{filename} -ac 1 -af agate='
                   f'threshold=0.045:attack=0.5:release=500:ratio=5000,'
                   f'silenceremove=start_periods=1:start_threshold=0.0075,'
                   f'areverse,silenceremove=start_periods=1:start_threshold='
                   f'0.0075,areverse,loudnorm=I=-24:LRA=11:TP=-1.5,aresample'
                   f'=22050 -y -hide_banner {OUTPUT_DIR}/{wav_filename}')
        os.system(command)
    
    编辑:

    ffmpeg命令的完整日志可在此处查看:

    username@pop-os:~$ ffmpeg -i /home/username/audios/filename.flac -ac 1 -af agate=threshold=0.045:attack=0.5:release=500:ratio=5000,silenceremove=start_periods=1:start_threshold=0.0075,areverse,silenceremove=start_periods=1:start_threshold=0.0075,areverse,loudnorm=I=-24:LRA=11:TP=-1.5,aresample=22050 /home/username/result.wav
    ffmpeg version 4.2.4-1ubuntu0.1 Copyright (c) 2000-2020 the FFmpeg developers
      built with gcc 9 (Ubuntu 9.3.0-10ubuntu2)
      configuration: --prefix=/usr --extra-version=1ubuntu0.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-nvenc --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
      libavutil      56. 31.100 / 56. 31.100
      libavcodec     58. 54.100 / 58. 54.100
      libavformat    58. 29.100 / 58. 29.100
      libavdevice    58.  8.100 / 58.  8.100
      libavfilter     7. 57.100 /  7. 57.100
      libavresample   4.  0.  0 /  4.  0.  0
      libswscale      5.  5.100 /  5.  5.100
      libswresample   3.  5.100 /  3.  5.100
      libpostproc    55.  5.100 / 55.  5.100
    Input #0, flac, from '/home/mareike/tts_data/save/audios_flac/0a6c8520-7536-11eb-8338-b7015f354987.flac':
      Duration: 00:00:04.64, start: 0.000000, bitrate: 1090 kb/s
        Stream #0:0: Audio: flac, 44100 Hz, stereo, s32 (24 bit)
    Stream mapping:
      Stream #0:0 -> #0:0 (flac (native) -> pcm_s16le (native))
    Press [q] to stop, [?] for help
    Output #0, wav, to '/home/mareike/result_0a6c8520-7536-11eb-8338-b7015f354987.wav':
      Metadata:
        ISFT            : Lavf58.29.100
        Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 22050 Hz, mono, s16, 352 kb/s
        Metadata:
          encoder         : Lavc58.54.100 pcm_s16le
    size=     138kB time=00:00:03.19 bitrate= 353.0kbits/s speed=14.3x    
    video:0kB audio:138kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.055375%
    

    谁能告诉我我做错了什么,以及我如何最终将音量标准化为-24 dB(结合静音消除)?非常感谢您的帮助,非常感谢

    显示ffmpeg命令中的完整日志,但不显示
    -hide_banner
    。完成,抱歉延迟,中间出现了一些问题。我希望日志能有所帮助。Loudnorm对于小于3秒的输入不起作用,所以你必须做一些变通。看,谢谢你的提示!我会尝试一下,也许还会尝试speechnorm而不是loudnorm(因为音频只包含口语文本)。也许这也是一个解决办法。