Конкат два аудио файла через ffmpeg filter_complex

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
irfanmcsd
источник

Ответы:

1

Просто чтобы прояснить ситуацию [0:1] [0:0] [1:1] [1:0]относится к потокам из двух файлов.

В твоем случае:

[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 файлов.

Rajib
источник
Да, я бросил, но все равно получаю ошибки. разрешил мою проблему путем прямого объединения потоков вместо использования фильтров
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
Rumczeis
источник
Это не сработает. MP3 являются однопотоковыми, поэтому [0:1][1:1]не удастся. Используйте [0:a][1:a]также, вы не можете копировать поток при использовании фильтров, поэтому это будет-c:a mp3
Gyan
0

n - количество сегментов потока, а не входных файлов

из конкат документации

Фильтр работает на сегментах синхронизированных видео и аудио потоков. Все сегменты должны иметь одинаковое количество потоков каждого типа, и это также будет количество потоков на выходе.

Фильтр принимает следующие параметры:

n - Установите количество сегментов. По умолчанию 2.

Последние несколько дней я боролся с этим и перечитывал этот вопрос и его ответы снова и снова. я объединял последовательность PNG (вход 0) с файлом WAV (вход 1) и продолжал получать ту же ошибку

Не удается найти соответствующий поток для немаркированной входной панели 0 в фильтре Parsed_concat_ 0

После четырнадцати испытаний и неудач, я упал на n = 1 (то есть один желаемый выходной поток) с v = 1: a = 1 ... то есть один поток видео и один входной аудиосигнал. Также как ОДИН СЕГМЕНТ, состоящий из видео с входа 0 и аудио с входа 1 и тада это работало просто отлично.

полный 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 '

Sassafras_wot
источник
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
Мохит Шарма
источник