Добавьте 1 секунду тишины к аудио через FFmpeg

14

У меня есть аудиофайл AC3 5.1, в который я хотел бы вставить x секунд тихого звука в начале. Это не имеет никакого отношения к мультиплексированию видео, поэтому его смещение бесполезно, поскольку кажется, что оно работает только с аудиопотоком, сопровождающим видео. Я хотел бы добиться этого с помощью ffmpeg. Есть идеи?

Makaveli84
источник
ffmpeg будет добавлять или присоединять кодекеры с одинаковой скоростью?
Psycogeek
Я полагаю ... @Psycogeek
Makaveli84
И способен ли он генерировать тихий аудиофайл с одинаковой скоростью и каналом кодека? ffmpeg.org/ffmpeg-filters.html#Examples-34 ? Я сам использую методы графического интерфейса, но делать то, что вы спрашиваете, должно быть довольно легко и очень быстро, если параметры все одинаковые. Вот где это показано, добавляя его в Mov. stackoverflow.com/questions/12368151/… в ответах
Psycogeek
Используйте Ardor, чтобы добавить все, что вы хотите. Если вам нужны эффекты, скачайте плагины Calf ..
панель инструментов

Ответы:

23

Использование демультиплексора concat (добавить тишину в начало и / или конец)

Используйте демультиплексор concat, если вы хотите избежать перекодирования основного сегмента. Этот метод работает для добавления тишины в начало или конец (или оба).

  1. Используйте фильтр источника звука anullsrc для создания звука без звука. Вам нужно будет соответствовать формату, разметке канала и частоте дискретизации основного аудиофайла. Пример для создания 5.1-канального, частота дискретизации 48000 Гц, 1-секундный беззвучный аудиофайл AC3 (поскольку это был формат в вопросе):

    ffmpeg -f lavfi -i anullsrc=channel_layout=5.1:sample_rate=48000 -t 1 silence.ac3
    
  2. Теперь создайте текстовый файл с именем, в input.txtкотором перечислены файлы для объединения:

    file 'silent.ac3'
    file 'main.ac3'
    

    Если вы хотите тишины в конце, просто переключите порядок файлов в input.txt.

  3. Теперь вы можете объединить файлы, используя демультиплексор concat :

    ffmpeg -f concat -i input.txt -codec copy output.ac3
    

Использование фильтра concat (добавить тишину в начало и / или конец)

Используйте фильтр concat, если вы хотите сделать все в одной команде или если вы хотите выводить данные в формате, отличном от входного (поскольку этот метод все равно перекодирует). Этот метод работает для добавления молчания к началу или концу или к обоим.

Пример добавления 1 секунды паузы к началу стерео, частоте дискретизации 44100 Гц:

ffmpeg -f lavfi -t 1 -i anullsrc=channel_layout=stereo:sample_rate=44100 -i audio.oga -filter_complex "[0:a][1:a]concat=n=2:v=0:a=1" output.m4a
  • Фильтрация приведет к перекодированию, а демультиплексор concat - нет.

  • В anullsrc рекомендуется совмещать расположение каналов и частоту дискретизации входа.

  • Если вы хотите добавить тишину до конца , а не просто изменить порядок входов данных на Concat фильтр: [1:a][0:a]concat=n=2:v=0:a=1.


Использование фильтра adelay (добавить тишину в начало)

Используйте аудиофильтр adelay, если вы хотите сделать все в одной команде или если вы хотите вывести в формате, отличном от входного (поскольку этот метод все равно перекодирует). Это работает только для добавления тишины в начало файла.

Этот пример добавит 1 секунду тишины к началу стереовхода:

ffmpeg -i input.flac -af "adelay=1000|1000" output.opus
  • Фильтрация приведет к перекодированию, а демультиплексор concat - нет.
  • Значение в миллисекундах. Пользователи последних версий (текущий git master или что-то более новое, чем FFmpeg 4.1) могут вместо этого использовать 1sодну секунду.
  • Каждый канал нуждается в собственной задержке. Например, будет использоваться монофонический вход adelay=1000, а вход 5.1 adelay=1000|1000|1000|1000|1000|1000.

Использование фильтра apad (добавьте тишину до конца)

Используйте аудиофильтр apad, если вы хотите сделать все в одной команде, или если вы хотите выводить формат, отличный от входного (поскольку этот метод все равно перекодирует). Это работает только для добавления тишины в конец файла.

Этот пример добавит 1 секунду тишины в конец:

ffmpeg -i input.wav -af "apad=pad_dur=1" output.m4a
  • Фильтрация приведет к перекодированию, а демультиплексор concat - нет.

  • pad_durОпция была добавлена после выхода FFmpeg 4.1, так что вам нужно будет использовать свежий билд от мерзавца главного филиала или ждать FFmpeg 4.2.

llogan
источник
5
[Parsed_aevalsrc_0 @ 000000000195fec0] This syntax is deprecated. Use '|' to sep arate the list items.Новый синтаксис-i "aevalsrc=0|0|0|0|0|0:d=1"
Стивен Пенни
Могу ли я сделать это для нескольких файлов одновременно?
Аарон Франке
@AaronFranke Да, но у ffmpeg такой функции нет. Вы должны будете использовать вашу оболочку или язык сценариев для зацикливания команды. Ваша ОС неизвестна, поэтому я не могу дать вам готовое решение, но посмотрите, как вы преобразуете весь каталог с помощью ffmpeg? для некоторой общей информации (пропустите принятый ответ, поскольку он излишне сложен и неэффективен).
Llogan