Додайте 1 секунду тиші до аудіо через FFmpeg


13

У мене є аудіофайл AC3 5.1, до якого я хотів би вставити x секунди безшумного аудіо на початку. Це не має нічого спільного з відтворенням музичного відео, тому itsoffset марний, оскільки він, здається, працює лише зі звуковим потоком, що супроводжує відео. Я хотів би досягти цього за допомогою ffmpeg. Якісь ідеї?


ffmpeg додасть або приєднається до того ж кодека з однаковою швидкістю?
Psycogeek

Я думаю ... @Psycogeek
Makaveli84

І чи здатний він генерувати безшумний аудіофайл із точно такою ж швидкістю та каналом кодека? ffmpeg.org/ffmpeg-filters.html#Examples-34 ? Сам я використовую методи GUI, але робити те, що ви запитуєте, має бути досить легко і дуже швидко, доки параметри все однакові. Ось де показано додавання його до Mov. stackoverflow.com/questions/12368151/… у відповідях
Psycogeek

Використовуйте Ardor, щоб додати все, що завгодно. Якщо ви хочете ефекту, також завантажте додатки для теля ..
приладова панель

Відповіді:


22

Використання лаконічного контуру (додайте тишу до початку та / або кінця)

Використовуйте concat demuxer, якщо ви хочете уникнути повторного кодування основного сегмента. Цей метод працює на додавання тиші до початку або кінця (або обох).

  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 demuxer :

    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
  • Фільтрування призведе до повторного кодування, в той час як демаксер-конмат не буде.

  • У anullsrc рекомендується відповідати компоновці каналу та частоті вибірки вводу.

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


Використання фільтра аделай (додати тишу до початку)

Використовуйте звуковий фільтр аделай, якщо ви хочете виконати все в одній команді або якщо ви хочете вивести інший формат, ніж вхідний (оскільки цей спосіб все одно перекодується). Це працює лише для створення тиші на початку файлу.

Цей приклад додасть 1 секунду тиші до початку стерео входу:

ffmpeg -i input.flac -af "adelay=1000|1000" output.opus
  • Фільтрування призведе до повторного кодування, в той час як демаксер-конмат не буде.
  • Значення в мілісекундах. Користувачі останніх версій (поточний майстер git або щось новіше, ніж 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
  • Фільтрування призведе до повторного кодування, в той час як демаксер-конмат не буде.

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


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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.