VBR 용 FFmpeg를 사용하여 mp3를 wav로 변환


27

비트 전송률이 변수 인 mp3파일을 변환하려면 어떤 명령을 사용해야합니까 wav? 또는 소스 오디오가 fixed비트 전송인지 또는 아닌지 어떻게 알 수 variable있습니까?


3
WAV 파일 형식이 가변 비트 전송률을 지원하지 않는다고 생각합니다. 모든 MP3 디코더는 표준을 준수하도록 지원해야하므로 MP3 파일을 고정 비트 전송률 WAV로 변환 할 수 있어야합니다. 결과는 소스 MP3의 품질과 WAV에 선택된 고정 비트 전송률에 따라 달라질 수 있습니다. 만들어진. 대부분의 MP3 재생 소프트웨어는 재생중인 파일의 속성을 볼 수있는 방법을 제공하므로이를 사용하여 처리중인 소스 파일의 종류를 확인할 수 있습니다.
martineau

그리고 명령은 어떻습니까? 추천 메뉴가 무엇인가요?
Soham Dasgupta,

Martineau의 답변을 다시 읽으십시오. 몇 가지 실수를 수정했습니다. 특히 PCM 인코딩 WAV 파일의 비트 전송률을 설정할 수 없습니다.
slhck

답변:


36

ffprobe song.mp3명령 을 사용하여 입력 파일의 비트 전송률에 대한 정보를 얻을 수 있습니다 . 그러나 이것은 첫 번째 프레임의 비트 전송률 만 알려줍니다. MP3 파일의 VBR은 일반적으로 각 프레임의 비트 전송률을 변경하여 간단하게 구현되므로 사용 중인지 여부는 첫 번째 프레임의 헤더를 읽음으로써 확인할 수 없습니다. 나는 보통 다른 오디오 파일 플레이어 소프트웨어를 사용하여 VBR의 사용 여부를 결정합니다.

손실 출력 코덱 (예 : MPEG-1 Layer III 또는 AAC)을 사용하는 경우 ffmpeg는 출력 스트림의 기본 비트 전송률 또는 가변 비트 전송률을 선택합니다. 인코더 자체에 따라 다릅니다.

무손실 코덱의 경우 각 샘플에 미리 정의 된 수의 비트가 사용되므로 가변 비트 전송률을 설정할 수 없습니다. ffmpeg -i song.mp3 song.wav따라서 44,100Hz 샘플 레이트와 샘플 당 16 비트 의 PCM 인코딩 WAV 파일을 얻을 수 있습니다 . 이로 인해 전체 컨테이너에 대해 약 1411 kBit / s가 발생하며 MP3 입력 파일보다 훨씬 클 수 있습니다.

PCM으로 인코딩 된 WAV 파일의 파일 크기를 -encoders줄이려면 비트 심도를 낮추고 샘플 형식을 설정하고 ( 전체 목록 은 옵션 참조 ) 더 낮은 샘플 속도를 선택하십시오 ( -ar 22050예 : 22.05 kHz 사용).

다음은 두 가지를 모두 수행하는 예입니다.

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

5
WAV 컨테이너에서 PCM 오디오를 인코딩하면 비트 전송률을 설정할 수 없습니다. 말이되지 않습니다. PCM은 압축되지 않은 형식입니다. 초당 더 많거나 적은 비트를 사용하도록 지시 할 수 없습니다. 크기를 조정하는 유일한 방법은 다른 샘플 크기를 사용하는 것입니다 ( -sample_fmts옵션 참조 ). -ar 128k즉, 샘플 속도는 일반적인 44,1 또는 48kHz 대신 128,000Hz입니다.
slhck

12
당신은 아마 잘하고 떨어져있어 ffmpeg -i song.mp3 song.wav그 (아마도 44.1kHz로이다) 적절한 비트 레이트를 선택할 것 같이. wav로 변환하는 경우 추가 정보를 잃고 싶지 않을 것입니다.
naught101

@ naught101이 맞았습니다. 실제로 입력 데이터 ffpmeg에 따라 올바른 샘플링 비트 전송률을 선택하는 것이 좋습니다 song.mp3. 이러한 방식으로 출력 비트 맵 wav파일이 최상의 비트 전송률을 갖습니다. 이 수단은 BTW 파일 크기가 큰 수 있지만 사용하여 데이터의 overfitting에 대한 것입니다 :`스트림 # 0 : 0 : 오디오 : MP3, 44100 Hz에서, 스테레오, s16p, 128킬로바이트 / s`
loretoparisi

1
asker의 목적은 결과 WAV 파일을 오디오 CD에 굽는 것입니다. 이에 적합한 주파수는 44100Hz이므로 -ar 44100ffmpeg가 자동으로 적합한 16 비트 코덱을 사용하더라도 필수입니다.
Mikhail T.

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 원본 오디오에 msec / sec 동안 오디오가없는 경우).

$ 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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.