Додайте тишу в кінці MP3


12

Хтось із вас знає про спосіб додавання тиші фіксованої тривалості до кінця MP3 в Linux? Наприклад, за допомогою MEncoder, FFmpeg тощо?

Він повинен бути командним рядком, оскільки він буде сценарій і запускається на нашому сервері.

Я покрутився навколо цього, і найкраще, що я міг зробити, - це використання padфункції в SoX , але це не працюватиме з MP3.

Я міг би перетворити його в WAV, використовувати SoX, потім знову конвертувати його в MP3 і скопіювати метадані (мінус тривалість) з оригіналу в новий MP3. Але, перш ніж написати сценарій для цього, я подумав, чи знайдеться рішення з одним ударом.


2
Я думаю, ви можете виконати щось подібне за допомогою mp3DirectCut (лише для Windows, але вони кажуть, що він сумісний з Linux під Wine), що дозволяє уникнути повторного стиснення звукових даних. Якби ви ходили MP3 -> WAV -> MP3, ви б перетискали вже стислий потік даних MP3, втрачаючи багато якості в дорозі.
— Прорив

Дякую. Чи можете ви запустити програмне забезпечення Windows через Wine з командного рядка? Я вважаю за краще уникати рішень для вина, якщо це можливо, оскільки я не хочу встановлювати Wine на нашому сервері.
— Макс Вільямс

Хм, ви можете уникати маршруту Wine, якщо у вас його вже немає. Вино саме по собі завантаження досить велике, значно вище мегабайт або два для простого інструменту вирізання / злиття MP3. Я впевнений, що існує рівнозначне, оригінальне для Linux рішення. Якщо я знайду якісь додаткові інструменти, я обов'язково повідомлю вас.
— Прорив

Відповіді:


9

Це можна легко зробити за допомогою padаргументу SoX та наступного синтаксису:

sox <oldfile> <newfile> pad <silence at beginning of file> <silence at end of file>

Приклад:

sox mp3.mp3 mp3withsilence.mp3 pad 0 1

Ці мовчки - це за секунди. (Інші звичаї можливі, використовуючи інший синтаксис, щоб вставити ці тиші на певні позиції. Докладнішу інформацію див. У документації SoX.)


Слід зазначити, що я перевірив це нормально з MP3-файлами (із встановленими libmad-0.dll та libmp3lame-0.dll, відповідно, для декодування та кодування MP3). Наскільки це можливо, я б рекомендував працювати з форматом без втрат і конвертувати лише в MP3 лише в кінці.
— Fabien Snauwaert

це дуже здорово - дякую Фабієн!
— Макс Вільямс

Це без втрат?
— Геремія

Оновлення: я прочитав на сторінці sox, що вона перетворюється на внутрішній формат, після чого перекодує…
— Geremia

MP3 - це формат втрат. Кодування та повторне кодування до формату втрати поступово погіршить якість звуку (чи ви його чуєте чи ні.) Як таке, найкраще працювати з форматами без втрат і кодувати до формату втрати лише в кінці. Для списку втрачених аудіокодеків: en.wikipedia.org/wiki/Lossy_compression#Audio та для списку аудіокодеків без втрат en.wikipedia.org/wiki/Lossless_compression#Audio
— Fabien Snauwaert

15

За допомогою ffmpeg ви можете використовувати фільтр aevalsrc для створення тиші, а потім у другій команді використовуйте протокол concat, щоб поєднати їх без втрат:

ffmpeg -filter_complex aevalsrc=0 -t 10 10SecSilence.mp3
ffmpeg -i "concat:input.mp3|10SecSilence.mp3" -c copy output.mp3

Ви можете контролювати довжину тиші, змінюючи -t 10час, який ви хочете в секунди. Звичайно, вам потрібно створити тишу лише один раз, тоді ви можете зберегти файл і використовувати його для вкладки кожного з потрібних файлів. Можливо, ви також хочете шукати конмат-демуксер - він трохи більш трудомісткий, але вам може бути легше потрапити в сценарій оболонки.

Якщо ви хочете зробити це в одній команді, ви можете використовувати фільтр concat - це зажадає від вас перекодування звуку (оскільки фільтри не сумісні -codec copy), тому варіант вище, мабуть, найкращий для вас. Але це може бути корисно для всіх, хто працює з необмеженою PCM, прагнучи додати мовчання до кінця, перш ніж кодувати аудіо:

ffmpeg -i input.mp3 \
-filter_complex 'aevalsrc=0::d=10[silence];[0:a][silence]concat=n=2:v=0:a=1[out]' \
-map [out] -c:a libmp3lame -q:a 2 output.mp3

Контролюйте довжину тиші, змінюючи потрібний d=10час (у секундах). Якщо ви використовуєте цей метод, вам може бути корисний цей посібник з кодування MP3 FFmpeg .


дякую @evilsoup. Я просто спробував це і отримав наступне - max-thinkpad-linux: ~ $ ffmpeg -filter_complex aevalsrc = 0 -t 4.61 тиша.mp3ffmpeg version 0.8.4-4:0.8.4-0ubuntu0.12.04.1, Copyright (c) 2000-2012 the Libav developers built on Nov 6 2012 16:51:33 with gcc 4.6.3 *** THIS PROGRAM IS DEPRECATED *** This program is only provided for compatibility and will be removed in a future release. Please use avconv instead. Unrecognized option 'filter_complex' Failed to set value 'aevalsrc=0' for option 'filter_complex'
— Макс Вільямс

@max Перш за все, ви фактично використовуєте avconv від проекту libav - це роздріб FFmpeg, який Debian & Ubuntu використовують замість основного проекту, і вони надають калічену версію ffmpeg. Спробуйте використовувати avconvзамість цього - синтаксис має бути однаковим, просто замініть ffmpegна avconv.
— злий

Якщо це не працює, спробуйте оновити до новішої версії ffmpeg. Оскільки ви перебуваєте на Ubuntu, ви повинні мати можливість використовувати цей PPA , або для найновішої версії ви зможете скласти його з джерела .
— злий

1
@MaxWilliams Або ви можете завантажити статичну збірку , яку не потрібно спочатку збирати. Просто завантажуйте, витягуйте, використовуйте.
— slhck

1
для подальшої довідки: якщо ви зіткнулися з помилкою, як я, спробуйте замінити одинарні котирування подвійними лапками
— SZT
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.