通过ffmpeg filter_complex Concat两个音频文件


1

如果我尝试连接两个mp4视频文件 -filter_complex 使用命令:

ffmpeg -i a.mp4 -i b.mp4 -filter_complex \
"[0:1] [0:0] [1:1] [1:0] concat=n=2:v=1:a=1 [v] [a]" \
-map [v] -map [a] -y testfull.mp4

它工作正常,但如果我尝试类似音频文件,如:

ffmpeg -i a.mp3 -i b.mp3 -filter_complex \
"[0:1] [0:0] [1:1] [1:0] concat=n=2:a=1 [a]" \
-map [a] -y testfull.mp3

出现错误:

Input #1, mp3, from 'b.mp3':   Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isomavc1mp42
    creation_time   : 2010-12-13 21:15:11
    encoder         : Lavf53.4.0   Duration: 00:02:01.61, start: 0.000000, bitrate: 64 kb/s
    Stream #1:0: Audio: mp3, 8000 Hz, stereo, s16p, 64 kb/s
Stream specifier ':1' in filtergraph description [0:1] [0:0] [1:1] [1:0] concat= n=2:a=1 [a] matches no streams.

如果我修改 -filter_complex 参数和运行命令为:

ffmpeg -i a.mp3 -i b.mp3 -filter_complex \
"concat=n=2:a=1 [a]" -map [a] -y testfull.mp3

出现以下错误

Input #1, mp3, from 'b.mp3':   Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isomavc1mp42
    creation_time   : 2010-12-13 21:15:11
    encoder         : Lavf53.4.0   Duration: 00:02:01.61, start: 0.000000, bitrate: 64 kb/s
    Stream #1:0: Audio: mp3, 8000 Hz, stereo, s16p, 64 kb/s
Cannot find a matching stream for unlabeled input pad 0 on filter Parsed_concat_ 0

任何人都可以帮助我如何通过最新加入两个音频文件 ffmpeg 建立可能与 -filter_complex


更新: 好的,解决了我的问题 ffmpeg 命令:

ffmpeg -i "concat:a.mp3|b.mp3" -c copy output.mp3

Answers:


1

只是为了说清楚 [0:1] [0:0] [1:1] [1:0] 指的是来自2个文件的流。

在你的情况下:

[0:1] is video from first file  
[0:0] is audio from first file  
[1:1] is video from second file  
[1:0] is audio from second file

在mp3文件的情况下,视频流不存在。因此,您应该删除命令中的视频流引用。

如果您的上一个命令有效 - 是的,这是一个有效的mp3文件解决方案。


是的,我放弃但仍然得到错误。通过直接连接流而不是使用过滤器解决了我的问题
irfanmcsd

0

你必须告诉concat过滤器没有视频: v=0 而且您不需要处理视频流 [0:0] [1:0] 要么,所以命令就像:

ffmpeg -i a.mp3 -i b.mp3 -filter_complex \
"[0:a] [1:a] concat=n=2:v=0:a=1 [a]" \
-map [a] -c:a mp3 testfull.mp3

这不行。 MP3是单流的,所以 [0:1][1:1] 将失败。使用 [0:a][1:a] 此外,您在使用过滤器时无法复制流,因此它将是 -c:a mp3
Gyan

0

n是STREAM SEGMENTS的数量,而不是输入文件

来自concat docs

过滤器适用于同步视频和音频流的片段。所有段必须具有相同数量的每种类型的流,并且这也将是输出流的数量。

过滤器接受以下选项:

n - 设置段数。默认值为2。

过去几天我一直在与此作斗争,一直在阅读这个问题及其反应。我正在将PNG序列(输入0)与WAV文件(输入1)合并并保持相同的错误

在过滤器Parsed_concat_ 0上找不到未标记输入板0的匹配流

在经过十六次试验并失败之后,我在n = 1(即一个所需的输出流)上,v = 1:a = 1 ...即一个视频和一个音频输入流..又名concat ONE SEGMENT由输入的视频组成0和来自输入1和tada的音频工作得很好。

完整的cmdline

ffmpeg -i'/var/tmp/input.%04d.png -i'/var/tmp/input.wav'-filter_complex'[0:v:0] [1:a:0] concat = n = 1: v = 1:a = 1 [vout] [aout]'-map'[vout]'-map'[aout]'-vcodec'mjpeg''/ var / tmp / output.mov'


0

你必须混合音频流:

ffmpeg -i 1.mp4 -i 1.3gp -i 2.3gp -i 1.mp3
  -filter_complex "[2]adelay=10000|10000[s2];[3:a][1:a][s2]amix=3[a]"
  -map 0:v -map "[a]" -c:v copy result.mp4
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.