Перетворити mp3 в WAV за допомогою FFmpeg для VBR


27

Яку команду слід використовувати для перетворення mp3файлу в wavбітрейт, який є змінним. Або краще, як я можу знати, чи є джерело звуку fixedбітрейт або variable?


3
Я не думаю, що формат файлу WAV підтримує змінні швидкості передачі бітів. Оскільки всі MP3-декодери повинні підтримувати його на відповідність стандартам, ви повинні мати можливість перетворити будь-який MP3-файл у WAV з фіксованим бітретом, хоча ваші результати будуть відрізнятися залежно від якості вихідного MP3 та фіксованого бітрейта, обраного для WAV створено. Більшість програм для відтворення MP3 забезпечує спосіб перегляду властивостей файлу, який відтворюється, так що ви можете скористатися ним, щоб побачити, з якими вихідними файлами ви маєте справу.
мартино

А як щодо команди? Що ви порадите?
Сохам Дасгупта

Прочитайте ще раз відповідь мартіно. Я виправив кілька помилок. Зокрема, ви не можете встановити бітрейт для файлів WAV, кодованих PCM.
slhck

Відповіді:


36

За допомогою команди можна отримати деяку інформацію про бітрейт вхідних файлів ffprobe song.mp3. Однак це говорить лише про бітрейт першого кадру. VBR у MP3-файлах зазвичай реалізується просто шляхом зміни бітрейта для кожного кадру, тому, чи використовується він, не можна визначити, просто прочитавши заголовок першого кадру. Зазвичай я використовую якесь інше програмне забезпечення для програвача аудіофайлів, щоб визначити, чи використовується VBR, так як багато хто буде відображати це (наприклад, Foobar2000).

Коли ви використовуєте втрачені вихідні кодеки (наприклад, MPEG-1 Layer III або AAC), ffmpeg вибирає бітрейт за замовчуванням для вихідного потоку або змінний бітрейт. Це залежить від самого кодера.

Для кодеків без втрат не можна встановити змінний бітрейт, оскільки кожен зразок займає заздалегідь задану кількість біт. ffmpeg -i song.mp3 song.wavТаким чином, ви отримаєте файл WAV, кодований PCM, із частотою вибірки 44,100 Гц та 16 бітами на зразок. Це призводить до приблизно 1411 кбіт / с для всього контейнера, ймовірно, набагато більше, ніж вхідний файл MP3.

Якщо ви хочете менший розмір файлу для WAV-файлу, кодованого PCM, встановіть зразок формату з меншою глибиною бітів (див. -encodersОпцію для повного їх списку) та / або виберіть нижчу швидкість вибірки (наприклад -ar 22050, використовуйте 22,05 кГц).

Ось приклад виконання обох:

ffmpeg -i song.mp3 -acodec pcm_u8 -ar 22050 song.wav

5
Якщо ви кодуєте аудіо PCM в контейнері WAV, ви не можете встановити бітрейт. Це не має сенсу. PCM - це нестиснений формат - ви не можете сказати йому використовувати більше або менше біт на секунду. Єдиний спосіб відкоригувати розмір - використовувати інший розмір вибірки (див. -sample_fmtsВаріант). -ar 128kозначає, що частота вибірки складе 128 000 Гц замість звичайних 44,1 або 48 кГц.
slhck

12
Вам, мабуть, краще робити це ffmpeg -i song.mp3 song.wav, оскільки це обере відповідний бітрейт (який, мабуть, 44,1 кГц). Якщо ви перетворюєте на wav, ви, ймовірно, не хочете втрачати додаткову інформацію ..
naught101

@ naught101 був прав, інфакт краще дозволити ffpmegвибрати правильний бітрейт вибірки відповідно до song.mp3вхідних даних. Таким чином, вихідний растровий wavфайл матиме найкращий бітрейт. Це означає, що розмір файлу буде чудовим, але з надмірним розміщенням даних: `Stream # 0: 0: Аудіо: mp3, 44100 Гц, стерео, s16p, 128 кбіт /
с`

1
Досить безпечно припустити, мета запитувача - записати отримані WAV-файли на аудіо компакт-диск. Єдиною підходящою частотою для цього є 44100 Гц, тому -ar 44100це обов'язково, навіть якщо ffmpeg автоматично використовувати відповідний 16-бітний кодек.
Михайло Т.

3

Відповідно до коментаря @ naught101, я б дотримувався цього процесу, щоб виявити найкраще acodec:

$ ffmpeg -formats | grep PCM 

 DE f32be           PCM 32-bit floating-point big-endian
 DE f32le           PCM 32-bit floating-point little-endian
 DE f64be           PCM 64-bit floating-point big-endian
 DE f64le           PCM 64-bit floating-point little-endian
 DE s16be           PCM signed 16-bit big-endian
 DE s16le           PCM signed 16-bit little-endian
 DE s24be           PCM signed 24-bit big-endian
 DE s24le           PCM signed 24-bit little-endian
 DE s32be           PCM signed 32-bit big-endian
 DE s32le           PCM signed 32-bit little-endian
 DE u16be           PCM unsigned 16-bit big-endian
 DE u16le           PCM unsigned 16-bit little-endian
 DE u24be           PCM unsigned 24-bit big-endian
 DE u24le           PCM unsigned 24-bit little-endian
 DE u32be           PCM unsigned 32-bit big-endian
 DE u32le           PCM unsigned 32-bit little-endian

На даний момент, розглянемо вашу платформу , щоб вибрати між big-endian, little-endian, то вибрати бітрейт:

$ ffmpeg -i sample.mp3 
[mp3 @ 0x7fb33180da00] Estimating duration from bitrate, this may be inaccurate
Input #0, mp3, from 'sample.mp3':
  Metadata:
    title           : Saturday
    artist          : Winterwood
    album           : Love In The Heart
    track           : 2/15
    TPA             : 1/1
    encoded_by      : iTunes 11.0.1
    genre           : Country & Folk
    date            : 1997
  Duration: 00:04:27.76, start: 0.000000, bitrate: 128 kb/s
    Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16p, 128 kb/s

Ми можемо бачити, що цей аудіофайл є mp3(це не очевидно, незважаючи на розширення вхідного файлу, просто перевірте байти) має бітрейт 128 kb/s, кодек був s16p, вибірки на 44100 Hz, тому ми обираємо відповідно:

$ ffmpeg -i sample.mp3 -acodec pcm_s16le -ar 44100 sample.wav


Input #0, mp3, from 'sample.mp3':
  Metadata:
    title           : Saturday
    artist          : Winterwood
    album           : Love In The Heart
    track           : 2/15
    TPA             : 1/1
    encoded_by      : iTunes 11.0.1
    genre           : Country & Folk
    date            : 1997
  Duration: 00:04:27.76, start: 0.000000, bitrate: 128 kb/s
    Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16p, 128 kb/s
File 'sample.wav' already exists. Overwrite ? [y/N] y
Output #0, wav, to 'sample.wav':
  Metadata:
    INAM            : Saturday
    IART            : Winterwood
    IPRD            : Love In The Heart
    IPRT            : 2/15
    TPA             : 1/1
    ITCH            : iTunes 11.0.1
    IGNR            : Country & Folk
    ICRD            : 1997
    ISFT            : Lavf56.4.101
    Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, stereo, s16, 1411 kb/s
    Metadata:
      encoder         : Lavc56.1.100 pcm_s16le
Stream mapping:
  Stream #0:0 -> #0:0 (mp3 (native) -> pcm_s16le (native))
Press [q] to stop, [?] for help
size=   46125kB time=00:04:27.75 bitrate=1411.2kbits/s    
video:0kB audio:46125kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000457%

Якщо ви перебуваєте на mac, ви можете перевірити звук, якщо його немає white noiseна початку / в кінці (коли у оригінального аудіо mp3 немає звуку протягом декількох секунд / с):

$ afplay sample.wav

і звичайно, ви можете двічі перевірити растрову карту:

$ ffmpeg -i sample.wav
Input #0, wav, from 'sample.wav':
  Metadata:
    artist          : Winterwood
    date            : 1997
    genre           : Country & Folk
    title           : Saturday
    album           : Love In The Heart
    track           : 2/15
    encoder         : Lavf56.4.101
    encoded_by      : iTunes 11.0.1
  Duration: 00:04:27.76, bitrate: 1411 kb/s
    Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, 2 channels, s16, 1411 kb/s

0

Використовуйте ffmpeg для перетворення носія, спочатку перевірте специфікацію файлу за допомогою ffprobe. використовувати цю команду ffmpeg -i kimberly.wav -acodec pcm_s16le -ar 16000 -ac 1 song.wav

де -pcm_s16le is codec 16 bit conversion -ar is sampling rate (16000samples/sec) -ac no of audio channel

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