当我将无声音频 (mp3) 附加到现有音频列表时,它会混淆最终音频吗?

When I append a silent audio (mp3) to an existing list of audio it garbles the final audio?

几个小时后,我将音频乱码的问题缩小为我正在附加的 2 秒静音音频 mp3(我想我曾用 Wavelab 制作过一次)

但是,我尝试根据 post 使用 ffmpeg 来生成类似的 2 秒音频,但它也会 corrupt/garble/chop 在音频文件的最终连接中发声。

ffmpeg -f lavfi -i anullsrc=r=44100:cl=mono -t 2 -q:a 9 -acodec libmp3lame SILENCE_2sec.MP3

我通常会将几个音频文件连接在一起,但为简单起见,我可以将其缩小为几个文件,简化为以下脚本。一个简单的 Windows 批处理文件,您应该能够在最后使用并重现问题。

rem 
rem  
SET EXE="S:\_BINS\FFmpeg 4.2.1 20200112\bin\ffmpeg.exe"

SET ROOTPATH=.\

SET IN_FILE="%ROOTPATH%MyList.txt"

ECHO file '%ROOTPATH%HELLO.mp3' > MyList.txt
ECHO file 'SILENCE_2sec.MP3' >> MyList.txt

SET OPTIONS= -f concat -safe 0 -i  %IN_FILE%  -c copy -y

SET OUT_FILE="%ROOTPATH%CONCATENATED_AUDIO_2.MP3"

SET INFO_FILE="INFO.TXT"

%EXE% %OPTIONS%  %OUT_FILE% 1> %INFO_FILE% 2>&1 

ECHO ======================== >> %INFO_FILE%
ECHO IN_FILE=%IN_FILE%  >> %INFO_FILE% 
ECHO EXE=%EXE%  >> %INFO_FILE% 
ECHO OPTIONS=%OPTIONS%  >> %INFO_FILE% 
ECHO ======================== >> %INFO_FILE%

这是 ffmpeg 的控制台信息输出,如果您需要其他输出(包括来自 ffprobe 的输出)请告诉我

ffmpeg version git-2020-01-10-3d894db Copyright (c) 2000-2020 the FFmpeg developers
  built with gcc 9.2.1 (GCC) 20191125
  configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --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-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt --enable-amf
  libavutil      56. 38.100 / 56. 38.100
  libavcodec     58. 65.103 / 58. 65.103
  libavformat    58. 35.101 / 58. 35.101
  libavdevice    58.  9.103 / 58.  9.103
  libavfilter     7. 70.101 /  7. 70.101
  libswscale      5.  6.100 /  5.  6.100
  libswresample   3.  6.100 /  3.  6.100
  libpostproc    55.  6.100 / 55.  6.100
[mp3 @ 000000000036af80] Estimating duration from bitrate, this may be inaccurate
Input #0, concat, from '.\MyList.txt':
  Duration: N/A, start: 0.000000, bitrate: 32 kb/s
    Stream #0:0: Audio: mp3, 24000 Hz, mono, fltp, 32 kb/s
Output #0, mp3, to '.\CONCATENATED_AUDIO_2.MP3':
  Metadata:
    TSSE            : Lavf58.35.101
    Stream #0:0: Audio: mp3, 24000 Hz, mono, fltp, 32 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
Press [q] to stop, [?] for help
[mp3 @ 0000000000372d00] Application provided invalid, non monotonically increasing dts to muxer in stream 0: 17280 >= 17255
size=      11kB time=00:00:02.73 bitrate=  33.2kbits/s speed=2.73e+03x    
video:0kB audio:11kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 2.137446%
======================== 
IN_FILE=".\MyList.txt"   
EXE="S:\_BINS\FFmpeg 4.2.1 20200112\bin\ffmpeg.exe"   
OPTIONS= -f concat -safe 0 -i  ".\MyList.txt"  -c copy -y   
========================  

我相信我是 运行 FFmpeg 4.2.1,最近安装 (20200112)

您可以通过保存以下内容来生成 HELLO.mp3 link

https://translate.google.com.vn/translate_tts?en=UTF-8&q=Hello+&tl=en&client=tw-ob

仅供参考,我仍然是 ffmpeg 的新手,在这个超级论坛中获得的帮助下,我更像是一个黑盒子。
请尽可能明确地使用命令行选项来说明我如何解决此问题。 谢谢。

额外提示调试:

如果我在无声音频之后附加更多文件,无声音频似乎会影响(乱码、截断)之前的音频。 您可以尝试以下输入音频文件列表。

ECHO file '%ROOTPATH%HELLO.mp3' > MyList.txt
ECHO file 'SILENCE_2sec.MP3' >> MyList.txt
ECHO file '%ROOTPATH%HELLO.mp3' >> MyList.txt
ECHO file '%ROOTPATH%HELLO.mp3' >> MyList.txt

我通常会在实际音频之后添加一个或多个无声文件以获得 post 无声效果。这是我现在的逻辑。但是,如果您在连接多个音频文件或将 x 秒的静音附加到现有音频文件的过程中有附加静音的替代方法。我也可以在编码中使用该方法。

谢谢。

无声音频需要匹配主音频的参数:

Stream #0:0: Audio: mp3, 24000 Hz, mono, fltp, 32 kb/s

以上参数为:

  • 采样率 (24000 Hz)
  • 声道布局(单声道)
  • 示例格式 (fltp)
  • 比特率 (32 kb/s)

重要的参数是采样率通道布局。在 anullsrc filter 中,您可以使用 r/sample_ratecl/channel_layout 选项进行设置,如 ffmpeg -h filter=anullsrc.[=18= 所示]

示例命令:

ffmpeg -f lavfi -i anullsrc=r=24000:cl=mono -t 2 -b:a 32k -c:a libmp3lame SILENCE_2sec.MP3