Audio FFMpeg连接筛选器:流说明符';:0';在filtergraph中,没有匹配的流

Audio FFMpeg连接筛选器:流说明符';:0';在filtergraph中,没有匹配的流,audio,ffmpeg,Audio,Ffmpeg,我正在开发一个应用程序,它严重依赖FFMpeg对音频文件执行各种转换。我目前正在命令行上测试我的FFMpeg配置 我正在尝试连接多个不同格式的音频文件(主要是MP3、MP2和WAV)。我一直在使用官方TRAC文档()来帮助我完成这项工作,并创建了以下命令: ffmpeg -i OHIn.wav -i OHOut.wav -filter_complex '[0:0] [1:0] concat=n=2:a=1 [a]' -map '[a]' output.wav 但是,当我使用FFMpeg的2.0

我正在开发一个应用程序,它严重依赖FFMpeg对音频文件执行各种转换。我目前正在命令行上测试我的FFMpeg配置

我正在尝试连接多个不同格式的音频文件(主要是MP3、MP2和WAV)。我一直在使用官方TRAC文档()来帮助我完成这项工作,并创建了以下命令:

ffmpeg -i OHIn.wav -i OHOut.wav -filter_complex '[0:0] [1:0] concat=n=2:a=1 [a]' -map '[a]' output.wav
但是,当我使用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.
以下是终端的完整输出:

~/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.
我不明白这为什么不起作用。FFMpeg显示源文件中存在0:0和1:0的流。网上唯一其他类似的问题是在Windows中使用单引号,但是测试证实它不适用于我的Mac命令行

任何帮助都将不胜感激。

您需要告诉过滤器输出视频流的数量。视频的默认值为
v=1
,音频的默认值为
a=0
,但您没有视频流。最好不要依赖默认值。手动列出输入段(
n
)、输出视频流(
v
)和输出音频流(
a
)的数量

注意,我添加了
v=0


更多信息,请参见。

除了向上投票的Neckbeard勋爵的回答,它解决了我的问题。顺便说一句:我想提供一个Bash Shell脚本的工作示例,展示如何将三个mp3文件(一个intro、middle和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控件简介录制.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

我在filtergraph描述[0:0][1:0]中遇到了这个
流说明符“:0”。。。尝试合并两个视频文件时出错@洛德内克比尔德的回答帮助我诊断了这个问题。我把它作为一个单独的答案提出来,以防将来像我这样的查询者在视频文件中遇到这种情况

结果是我的一个视频没有音轨。添加带有

ffmpeg -f lavfi -i aevalsrc=0 -i title-slide.mp4 -shortest -c:v copy \
-c:a mp3 -strict experimental title.mp4

让我开始了。

我在苏和苏之间辗转反侧,但由于这里还有很多其他问题,我决定继续这样做。很高兴把它搬到苏家。顺便说一句,非常感谢你的回答。非常感谢!为我工作。穆查斯·格雷西亚斯·洛德内克比尔德(名字很酷,顺便说一句)。!这也是我的问题。ffmpeg的错误可能会更有帮助,只要说它失败是因为丢失了一个音轨。
ffmpeg -f lavfi -i aevalsrc=0 -i title-slide.mp4 -shortest -c:v copy \
-c:a mp3 -strict experimental title.mp4