Man*_*anu 55 ffmpeg combine wav concatenation
我想使用 FFMPEG 将多个 WAV 文件连接成一个 WAV 文件。
我使用了以下命令,它生成了所需的文件。
命令:
ffmpeg -f concat -i mylist.txt -c copy output.wav
Run Code Online (Sandbox Code Playgroud)
文件 :
#mylist.txt
file '1.wav'
file '2.wav'
file '3.wav'
file '4.wav'
Run Code Online (Sandbox Code Playgroud)
但正如您所看到的,问题是我必须创建一个文本文件来指定要连接的 WAV 文件列表。
我可以完成所有这些任务,但我更喜欢一个看起来像的命令
ffmpeg -i 1.wav -i 2.wav -i 3.wav -i 4.wav output.wav
Run Code Online (Sandbox Code Playgroud)
或者
ffmpeg -i "concat:1.wav|2.wav|3.wav|4.wav" -c copy output.wav
Run Code Online (Sandbox Code Playgroud)
我已经尝试了这两个简单的命令,但它们只返回“1.wav
请帮我写一个命令(或更正上述 2 个命令)”的声音,以达到预期的结果。
请不要推荐其他媒体编码器/编辑器,我只想使用 FFMPEG,因为它已经在其他地方安装和使用。
evi*_*oup 50
您可以尝试使用concat过滤器;它需要重新编码,因此会占用更多的系统资源(在这种特殊情况下,在任何模糊的现代计算机上都是非常少的),但是 PCM -> PCM 音频在数学上应该是无损的。在您的情况下,您将使用以下内容:
ffmpeg -i input1.wav -i input2.wav -i input3.wav -i input4.wav \
-filter_complex '[0:0][1:0][2:0][3:0]concat=n=4:v=0:a=1[out]' \
-map '[out]' output.wav
Run Code Online (Sandbox Code Playgroud)
例如,如果您有五个输入文件,请使用n=5
并添加[4:0]
.
Héc*_*cci 31
我认为 wav 的最佳选择是使用sox,而不是 ffmpeg :
$ sox short1.wav short2.wav short3.wav long.wav
Run Code Online (Sandbox Code Playgroud)
解决方案来自如何在保留(非零填充)数字排序的同时附加一堆 .wav 文件?
slh*_*hck 18
在维基提到的FFmpeg使用的concat
协议是不可能的所有文件类型。它适用于大多数 MPEG 容器和比特流,但显然不适用于带有 PCM 音频的 WAV 文件。
您不一定必须创建一个临时文件并使用它。使用 Bash(或其他支持进程替换的shell ),您可以在一个命令中完成所有操作:
ffmpeg -f concat -i <( for f in *.wav; do echo "file '$(pwd)/$f'"; done ) output.wav
Run Code Online (Sandbox Code Playgroud)
进程替换<( )
会动态地创建一个ffmpeg
可以读取的文件——或者准确地说,是一个文件描述符。该文件将包含.wav
当前目录中每个文件的路径。我们必须给它加上前缀$(pwd)
以获得相对于当前目录的正确路径,而不是相对于文件描述符。
当然,替换中的命令可以更改为其他内容。
另一种选择是使用concat
ffmpeg -i "concat:file1.mp3|file2.mp3|file3.mp3" -acodec 复制出.mp3