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

4 ответа4

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

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
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
0

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

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

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

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

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

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

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

После четырнадцати испытаний и неудач я упал на n = 1 (то есть один желаемый выходной поток) с v = 1:a = 1 ... то есть один поток видео и один входной аудиосигнал ... он же Concat ONE SEGMENT, состоящий из видео с входа 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 '

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .