Как перекрыть и объединить несколько аудиофайлов с помощью ffmpeg? - PullRequest
0 голосов
/ 11 марта 2019

Я пытаюсь объединить несколько аудиофайлов в один файл, но вместо объединения, что я могу сделать с помощью следующей команды:

ffmpeg -v debug -i file1.wav -i file2.wav -i file3.wav -filter_complex [0:0]concat=n=3:v=0:a=1[out] -map [out] output.wav

Хотя эта команда отлично работает для объединения, я хочу, чтобы перекрытиескажем, последние 100 мс конца первого файла и 100 мс начала следующего файла.

Я сейчас пытаюсь использовать фильтр 'crossfade', предоставляемый ffmpeg, но я не добился успеха.

ffmpeg -v debug -i file1.wav -i file2.wav -i file3.wav -filter_complex [0:a]acrossfade=d=0.100:c1=exp:c2=exp,[1:a]acrossfade=d=0.100:c1=exp:c2=exp,[2:a]acrossfade=d=0.100:c1=exp:c2=exp

Это то, о чем я говорил до сих пор, но он не работает, поскольку выдает ' Буфер слишком короткий (n = 0) для ошибки frame_length = 1 '.

Документация не очень полезна, кто-нибудь знает, что можно сделать?

Заранее спасибо!

1 Ответ

0 голосов
/ 11 марта 2019

crossfade предназначен для создания перехода между двумя входами. Таким образом, к каждой паре входов необходимо применить переходное затухание, а результат использовать в качестве входа для следующего переходного затухания.

ffmpeg -v debug -i file1.wav -i file2.wav -i file3.wav -filter_complex "[0:a][1:a]acrossfade=d=0.100:c1=exp:c2=exp[a01];[a01][2:a]acrossfade=d=0.100:c1=exp:c2=exp" out.wav

Редактировать : ваши входы имеют частоту 16000 Гц, а длительность кроссфейда составляет 0,1 с (!), Что составляет менее 2 звуковых кадров при входной частоте дискретизации. Размер кадра по умолчанию - 1024 сэмпла. Таким образом, размер кадра должен быть уменьшен.

ffmpeg -v debug -i file1.wav -i file2.wav -i file3.wav -filter_complex "[0:a]asetnsamples=256[0a];[1:a]asetnsamples=256[1a];[2:a]asetnsamples=256[2a];[0a][1a]acrossfade=d=0.100:c1=exp:c2=exp[a01];[a01][2a]acrossfade=d=0.100:c1=exp:c2=exp" out.wav

...