FFmpeg – Консолидация аудиофайлов с интервалом
Пожалуйста, посмотрите изображение:
Каждый аудиоклип имеет тот же кодек / sample_rate, но имеет разную продолжительность, и каждое пространство также отличается. Между клипами всегда есть место, без перекрытия. Поэтому нет причин для перекодирования , поскольку это в основном работа с копией потока. Это важно, потому что я должен сохранить оригинальное качество для каждого клипа.
- Есть ли способ заставить FFmpeg быстрее искать конец файла в сетевом ресурсе?
- Youtube не нравится некоторые видеоролики
- Ffmpeg: чрезвычайно точное извлечение видеосегментов
- Неизвестный кодер 'libmp3lame'
- FFMPEG исчезает между изображениями
Теперь давайте подумаем, что я нашел то, что искал. Я дал этой команде псевдо-имя -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 gui / script и т. Д.?
- Создайте screencast с ffmpeg: как сохранить видео + аудио в синхронизации?
- Может ли FFMPEG извлекать изображения из видео с отметками времени?
- FFMPEG записывает субтитры во время резания видео
- Как наложить два аудиофайла с помощью ffmpeg
- Недействительная спецификация продолжительности с FFMPEG - что может быть причиной?
- Вы можете позвонить в FFMPEG в облачной функции Firebase
- Может ли ImageMagick создавать миниатюры из видео?
- Твердая shell FFmpeg для C # /. NET
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
вызывает перекрытие аудиозаписей, я amix
звук без звука для каждого входного аудио. Вы также можете попробовать amerge
и adelay
где сам документ имеет четкое объяснение.
Надеюсь, это поможет вам!
Вот пример аудио 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
Обратите внимание на пару вещей, которые вам нужно знать здесь:
- Я начал с чистого ввода
/dev/zero
, но это хорошо, но, возможно, есть лучший способ сделать это. - Вы должны знать общую продолжительность клипа перед его выполнением (
t=12
) - Я
silence.wav
файлsilence.wav
. Вы можете использовать фильтры, такие какanullsrc
(см.nb_samples
в документации ) или другое, но это довольно больно в заднице, если вы спросите меня. - Иногда, используя этот подход, FFmpeg не знает, когда остановиться, и все же он не будет создавать пустую дорожку молчания, поскольку
-shortest
параметр-shortest
.