23

Какую команду я должен использовать, чтобы преобразовать mp3 файл в wav , битрейт которого является переменным. Или лучше, как я узнаю, является ли этот источник звука fixed битрейтом или variable?

3 ответа3

29

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

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

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

Если вы хотите меньший размер файла для файла WAV в кодировке PCM, установите формат семпла с меньшей битовой глубиной (см. -encoders для полного списка) и / или выберите более низкую частоту семплирования (-ar 22050 будет использовать 22.05 кГц например).

Вот пример выполнения обоих:

ffmpeg -i song.mp3 -acodec pcm_u8 -ar 22050 song.wav
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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .