我正在开发一个严重依赖FFMpeg来对音频文件执行各种转换的应用程序.我目前正在命令行上测试我的FFMpeg配置.
我试图连接不同格式的多个音频文件(主要是MP3,MP2和WAV).我一直在使用官方TRAC文档(https://trac.ffmpeg.org/wiki/How%20to%20concatenate%20(join%2C%20merge)%20media%20files#differentcodec)来帮助我这个并创建以下命令:
ffmpeg -i OHIn.wav -i OHOut.wav -filter_complex '[0:0] [1:0] concat=n=2:a=1 [a]' -map '[a]' output.wav
Run Code Online (Sandbox Code Playgroud)
但是,当我使用FFMpeg的2.0.1版在Mac OS X上运行时,我收到以下错误消息:
Stream specifier ':0' in filtergraph description [0:0] [1:0] concat=n=2:a=1 [a] matches no streams.
Run Code Online (Sandbox Code Playgroud)
这是终端的完整输出:
~/ffmpeg -i OHIn.wav -i OHOut.wav -filter_complex '[0:0] [1:0] concat=n=2:a=1 [a]' -map '[a]' output.wav
ffmpeg version 2.0.1 Copyright (c) 2000-2013 the FFmpeg developers
built on Aug 15 2013 10:56:46 with llvm-gcc 4.2.1 (LLVM build 2336.11.00)
configuration: --prefix=/Volumes/Ramdisk/sw --enable-gpl --enable-pthreads --enable-version3 --enable-libspeex --enable-libvpx --disable-decoder=libvpx --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libx264 --enable-avfilter --enable-libopencore_amrwb --enable-libopencore_amrnb --enable-filters --enable-libgsm --arch=x86_64 --enable-runtime-cpudetect
libavutil 52. 38.100 / 52. 38.100
libavcodec 55. 18.102 / 55. 18.102
libavformat 55. 12.100 / 55. 12.100
libavdevice 55. 3.100 / 55. 3.100
libavfilter 3. 79.101 / 3. 79.101
libswscale 2. 3.100 / 2. 3.100
libswresample 0. 17.102 / 0. 17.102
libpostproc 52. 3.100 / 52. 3.100
Guessed Channel Layout for Input Stream #0.0 : stereo
Input #0, wav, from 'OHIn.wav':
Duration: 00:00:06.71, bitrate: 1411 kb/s
Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, stereo, s16, 1411 kb/s
Guessed Channel Layout for Input Stream #1.0 : stereo
Input #1, wav, from 'OHOut.wav':
Duration: 00:00:07.19, bitrate: 1411 kb/s
Stream #1:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, stereo, s16, 1411 kb/s
Stream specifier ':0' in filtergraph description [0:0] [1:0] concat=n=2:a=1 [a] matches no streams.
Run Code Online (Sandbox Code Playgroud)
我不明白为什么这不起作用.FFMpeg显示源文件中存在流0:0和1:0.网上唯一的其他类似问题包括在Windows中使用单引号,但是对此的测试证实它不适用于我的Mac命令行.
任何帮助将非常感激.
llo*_*gan 15
您需要告诉concat过滤器输出视频流的数量.默认值v=1适用于视频和a=0音频,但您没有视频流.最好不要依赖默认值.手动列出输入段数(n),输出视频流(v)和输出音频流(a).
ffmpeg -i input0.wav -i input1.wav -filter_complex "[0:a][1:a]concat=n=2:v=0:a=1[a]" -map "[a]" output.wav
Run Code Online (Sandbox Code Playgroud)
请注意,我添加了v=0.
有关详细信息,请参阅concat过滤器文档.
除了赞成Lord Neckbeard的回应,这解决了我的问题顺便说一句:我想提供一个Bash Shell脚本的工作示例,展示我如何连接三个mp3文件(一个介绍,中间和outro,每个都具有相同的比特率160将kbps,采样率44.1 Khz)合并为一个结果mp3.我的过滤器图形的原因如下:
[0:a] [1:a] [2:a]
而不是像:
[0:0] [1:0] [2:0]
是因为有些mp3有艺术品,ffmpeg认为每个输入mp3文件有两个流,一个音频(用于音乐本身)和一个视频(用于图像图形文件).
该:a部分让ffmpeg知道你希望它只使用它为该输入文件读取的音频流,并将其传递给concat过滤器.因此任何视频过滤器都会被忽略 这样做的好处是你不需要知道视频流的位置(这样你就不会意外地传递它),如运行如下命令所指定的:
ffprobe control-intro-recording.mp3.
无论如何,我离题了,这是shell脚本:
#!/bin/sh
ffmpeg -i ./source-files/control-intro-recording.mp3 \
-i ./source-files/control-middle-1-hour-recording-with-artwork-160-kbps.mp3 \
-i ./source-files/control-outro-recording.mp3 \
-filter_complex '[0:a] [1:a] [2:a] concat=n=3:v=0:a=1 [a]' \
-map '[a]' ./output-files/control-output-with-artwork-160-kbps-improved.mp3
Run Code Online (Sandbox Code Playgroud)