Concat dois arquivos de áudio via ffmpeg filter_complex

1

Se eu tentar concatenar dois arquivos de vídeo mp4 via -filter_complex usando o comando:

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

Funciona bem, mas se eu tentar semelhante com arquivos de áudio como:

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

O erro surge:

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.

Se eu modificar o argumento -filter_complex e executar o comando como:

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

O seguinte erro surge

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

Alguém pode me ajudar como posso juntar dois arquivos de áudio através das últimas ffmpeg builds possivelmente com -filter_complex .

Atualização: Ok, resolvi meu problema com o comando ffmpeg :

ffmpeg -i "concat:a.mp3|b.mp3" -c copy output.mp3
    
por irfanmcsd 17.11.2014 / 02:40

3 respostas

1

Apenas para esclarecer as coisas [0:1] [0:0] [1:1] [1:0] refere-se aos fluxos dos dois arquivos.

No seu caso:

[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

No caso de arquivos mp3, os fluxos de vídeo não existem. Portanto, você deve eliminar as referências de fluxo de vídeo no comando.

No caso de seu último comando funcionar - sim, essa é uma solução válida para arquivos mp3.

    
por 18.11.2014 / 14:53
0

você tem que dizer ao filtro de concatenação que não haverá vídeo: v=0 e você não precisa endereçar o fluxo de vídeo [0:0] [1:0] , então o comando seria como:

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
    
por 07.09.2016 / 14:08
0

n é o número de SEGMENTOS DE CAMPO, NÃO ARQUIVOS DE ENTRADA

dos documentos de concat

The filter works on segments of synchronized video and audio streams. All segments must have the same number of streams of each type, and that will also be the number of streams at output.

The filter accepts the following options:

n - Set the number of segments. Default is 2.

Eu tenho lutado com isso nos últimos dias e tenho lido esta pergunta e suas respostas repetidas vezes. Eu estava mesclando uma seqüência PNG (entrada 0) com um arquivo WAV (entrada 1) e continuei recebendo o mesmo erro

Cannot find a matching stream for unlabeled input pad 0 on filter Parsed_concat_ 0

Depois de treze tentativas e falhas, caí sobre n = 1 (ie um fluxo de saída desejado) com v = 1: a = 1 ... ie um vídeo e um fluxo de entrada de áudio .. também conhecido como concat ONE SEGMENT composto por um vídeo da entrada 0 e áudio da entrada 1 e tada funcionou muito bem.

cmdline completo

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'

    
por 15.09.2017 / 02:17

Tags