2

Пожалуйста, посмотрите изображение:

Каждый аудиоклип имеет одинаковый кодек /sample_rate, но имеет разную продолжительность, и каждый пробел также различен. Между клипами всегда есть пространство, без перекрытия. Таким образом, нет никакой причины для перекодирования, так как это в основном работа потокового копирования. Это важно, потому что я должен сохранить оригинальное качество для каждого клипа.

Теперь давайте подумаем, что я нашел то, что искал. Я дал этой команде псевдо-имя "-start_at", она вставляет клип в аудиопоток в указанное время. С помощью этой псевдо-команды я установлю время начала каждого клипа. А остальная часть работы должна быть выполнена командой ffmpeg /filter /script и т.д.

ffmpeg -start_at 00.00 -i audio1.opus  -start_at 06.30 -i audio2.opus  -start_at 21.15 -i audio3.opus  -start_at 26.35 -i audio4.opus

Просто подумайте, что ffmpeg автоматически заполнит пропуски тихими звуками.

Итак, есть ли команда / фильтр ffmpeg для этого? Или графический интерфейс / скрипт ffmpeg и т.д.?

2 ответа2

4

FFmpeg способен справиться с этим. Вам нужно использовать filter_complex с цепочкой фильтров. Вы можете создать тихий звук с aevalsrc. Чтобы создать 5-секундный тихий звук,

aevalsrc=0:d=5

Так что следующая команда будет работать для вас.

ffmpeg -i input_audio_1 -i input_audio_2 -i input_audio_3 -filter_complex "
aevalsrc=0:d=10[s1];
aevalsrc=0:d=15[s2];
aevalsrc=0:d=20[s3];
[s2][1:a]concat=n=2:v=0:a=1[ac1];
[s3][2:a]concat=n=2:v=0:a=1[ac2];
[0:a][s1][ac1][ac2]amix=inputs=4[aout]" -map [aout] output_audio

Здесь я предположил, что каждый звук имеет длину 5 секунд, и перекодирование необязательно, как,

-c:a libmp3lame -ac 2 -b:a 128k

Поскольку amix вызывает перекрытие аудио, я добавляю тихий звук к каждому входному аудио. Вы также можете попробовать amerge и adelay где сам документ имеет четкое объяснение.

Надеюсь, это поможет вам!

1

Вот пример аудио concat:

ffmpeg -y -f s16be -i /dev/zero -af "[in]anullsink;amovie=1.wav[a1];amovie=silence.wav[a2];amovie=2.wav[a3];amovie=4.wav[a4];[a1][a2][a3][a4]concat=n=4:v=0:a=1[out]" -shortest -t 12 output.wav

Обратите внимание на пару вещей, которые вы должны знать здесь:

  1. Я начал с чистого ввода /dev/zero , это хорошо, но, может быть, есть более хороший способ сделать это.
  2. Вам нужно знать общую продолжительность клипа, прежде чем делать его (t=12)
  3. Я предварительно сделал файл silence.wav . Вы можете использовать фильтры, такие как anullsrc (см. nb_samples в документации) или другие, но это довольно сложно, если вы спросите меня.
  4. Иногда, используя этот подход, FFmpeg не знает, когда остановиться, и, тем не менее, он не будет создавать пустой трек молчания, поскольку применяется параметр -shortest .

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