Converti mp3 in wav usando FFmpeg per VBR


27

Quale comando devo usare per convertire un mp3file il wavcui bitrate è variabile. O meglio come potrei sapere se l'audio della sorgente è fixedbitrate o variable?


3
Non credo che il formato di file WAV supporti i bit rate variabili. Poiché tutti i decodificatori MP3 devono supportarlo per essere conformi agli standard, dovresti essere in grado di convertire qualsiasi file MP3 in un WAV a bitrate fisso, anche se i tuoi risultati varieranno in base alla qualità dell'MP3 sorgente e al bitrate fisso scelto per il WAV creato. La maggior parte dei software di riproduzione MP3 fornisce un modo per visualizzare le proprietà del file riprodotto, quindi puoi usarne uno per vedere con che tipo di file sorgente hai a che fare.
martineau,

E il comando? Che cosa mi consiglia?
Soham Dasgupta,

Ti preghiamo di leggere di nuovo la risposta di martineau. Ho corretto alcuni errori. In particolare, non è possibile impostare la velocità in bit per i file WAV con codifica PCM.
slhck,

Risposte:


36

È possibile ottenere alcune informazioni sulla velocità in bit dei file di input utilizzando il ffprobe song.mp3comando Tuttavia, questo ti dice solo il bitrate del primo fotogramma. Il VBR nei file MP3 di solito viene implementato semplicemente modificando il bitrate per ciascun fotogramma, quindi non è possibile determinare se viene utilizzato leggendo l'intestazione del primo fotogramma. Di solito uso qualche altro software per la riproduzione di file audio per determinare se viene utilizzato VBR, poiché molti lo mostreranno (ad esempio Foobar2000).

Quando si utilizzano codec di output con perdita (come MPEG-1 Layer III o AAC), ffmpeg sceglie un bitrate predefinito per il flusso di output o un bitrate variabile. Dipende dall'encoder stesso.

Per i codec senza perdita di dati, non è possibile impostare un bitrate variabile, poiché ogni campione accetta un numero predefinito di bit. ffmpeg -i song.mp3 song.wavotterrà quindi un file WAV con codifica PCM con frequenza di campionamento di 44.100 Hz e 16 bit per campione. Ciò comporta circa 1411 kBit / s per l'intero contenitore, probabilmente molto, molto più grande del file di input MP3.

Se si desidera una dimensione del file inferiore per il file WAV con codifica PCM, impostare un formato di esempio con una profondità di bit inferiore (vedere l' -encodersopzione per un elenco completo di essi) e / o scegliere una frequenza di campionamento inferiore ( -ar 22050ad esempio, utilizzare 22,05 kHz).

Ecco un esempio di entrambi:

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

5
Se si codifica l'audio PCM in un contenitore WAV, non è possibile impostare il bitrate. Questo non ha senso. PCM è un formato non compresso: non puoi dirgli di usare più o meno bit al secondo. L'unico modo per regolare la dimensione è utilizzare una dimensione del campione diversa (vedi -sample_fmtsopzione). -ar 128ksignifica che la frequenza di campionamento sarà 128.000 Hz, invece dei soliti 44,1 o 48 kHz.
slhck

12
Probabilmente stai meglio facendo ffmpeg -i song.mp3 song.wav, in quanto sceglierà il bitrate appropriato (che è probabilmente 44.1khz). Se ti stai convertendo in wav, probabilmente non vorrai perdere ulteriori informazioni ..
nulla101

@ naught101 aveva ragione, infatti è meglio ffpmegscegliere il bitrate di campionamento giusto in base ai song.mp3dati di input. In questo modo il wavfile bitmap di output avrà il bitrate migliore. Ciò significa che le dimensioni del file saranno grandi, ma con un overfitting dei dati: `Stream # 0: 0: Audio: mp3, 44100 Hz, stereo, s16p, 128 kb /
s`

1
È abbastanza sicuro supporre, lo scopo del richiedente è quello di masterizzare i file WAV risultanti su un CD audio. L'unica frequenza adatta per questo è 44100 Hz, quindi -ar 44100è un must anche se ffmpeg utilizzerà automaticamente un codec a 16 bit adatto.
Mikhail T.

3

Secondo il commento di @ naught101, seguirei questo processo per rilevare il meglio 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

A questo punto, prendere in considerazione la vostra piattaforma di scegliere tra big-endian, little-endian, della scelta bitrate:

$ 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

Possiamo vedere che questo file audio è un mp3(questo non è ovvio, nonostante l'estensione del file di input, basta controllare i byte) ha un bitrate di 128 kb/s, il codec era s16p, campionando a 44100 Hz, quindi scegliamo di conseguenza:

$ 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%

Se sei su Mac puoi controllare l'audio se non ha white noiseall'inizio / fine (quando l'audio originale mp3 non ha audio per alcuni msec / sec):

$ afplay sample.wav

e ovviamente puoi ricontrollare la bitmap:

$ 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

Usa ffmpeg per convertire i media, controlla prima le specifiche del file usando ffprobe. usa questo comando ffmpeg -i kimberly.wav -acodec pcm_s16le -ar 16000 -ac 1 song.wav

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.