it-swarm.com.de

Konvertieren Sie MP3 in WAV mit FFmpeg für VBR

Welchen Befehl soll ich verwenden, um eine mp3-Datei in eine wav zu konvertieren, deren Bitrate variabel ist? Oder besser, woher soll ich wissen, ob dieses Quellaudio eine fixed Bitrate oder eine variable ist?

25
Soham Dasgupta

Mit dem Befehl ffprobe song.mp3 können Sie Informationen zur Bitrate Ihrer Eingabedateien abrufen. Dies sagt Ihnen jedoch nur die Bitrate des ersten Frames. VBR in MP3-Dateien wird normalerweise einfach durch Ändern der Bitrate für jeden Frame implementiert. Ob es verwendet wird, kann also nicht durch einfaches Lesen des Headers des ersten Frames bestimmt werden. Normalerweise verwende ich eine andere Audiodatei-Player-Software, um festzustellen, ob VBR verwendet wird, da dies bei vielen angezeigt wird (z. B. Foobar2000).

Wenn Sie verlustbehaftete Ausgabe-Codecs (wie MPEG-1 Layer III oder AAC) verwenden, wählt ffmpeg eine Standard-Bitrate für den Ausgabestream oder eine variable Bitrate. Das hängt vom Encoder selbst ab.

Für verlustfreie Codecs können Sie keine variable Bitrate festlegen, da für jedes Sample eine vordefinierte Anzahl von Bits erforderlich ist. Mit ffmpeg -i song.mp3 song.wav erhalten Sie daher eine PCM-codierte WAV-Datei mit einer Abtastrate von 44.100 Hz und 16 Bit pro Abtastung. Dies ergibt ungefähr 1411 kBit/s für den gesamten Container, wahrscheinlich viel, viel größer als die MP3-Eingabedatei.

Wenn Sie eine kleinere Dateigröße für die PCM-codierte WAV-Datei wünschen, stellen Sie ein Beispielformat mit geringerer Bittiefe ein (eine vollständige Liste finden Sie unter -encoders) und/oder wählen Sie eine niedrigere Beispielrate (-ar 22050 würde beispielsweise 22,05 kHz verwenden) ).

Hier ist ein Beispiel für beides:

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

Laut @ naught101 Kommentar würde ich diesen Prozess befolgen, um die beste acodec zu ermitteln:

$ 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

Stellen Sie sich an dieser Stelle vor, dass Ihre Plattform zwischen big-endian, little-endian und der ausgewählten Bitrate wählt:

$ 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

Wir können sehen, dass diese Audiodatei ein mp3 ist (dies ist trotz der Erweiterung der Eingabedatei nicht offensichtlich, überprüfen Sie einfach die Bytes). Sie hat eine Bitrate von 128 kb/s, der Codec war s16p, Sampling bei 44100 Hz, also wählen wir dementsprechend:

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

Wenn Sie auf einem Mac sind, können Sie das Audio überprüfen, wenn es am Anfang/Ende keinen white noise hat (wenn das MP3-Original-Audio für einige Millisekunden/Sek. Kein Audio hat):

$ afplay sample.wav

und natürlich können Sie die Bitmap überprüfen:

$ 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
3
loretoparisi

Verwenden Sie ffmpeg, um die Medien zu konvertieren. Überprüfen Sie zuerst die Dateispezifikation mit ffprobe. benutze diesen Befehl ffmpeg -i kimberly.wav -acodec pcm_s16le -ar 16000 -ac 1 song.wav

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

0
Mayur Lokare