当我将无声音频 (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_rate
和 cl
/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
几个小时后,我将音频乱码的问题缩小为我正在附加的 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_rate
和 cl
/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