Chuyển đổi mp3 sang wav bằng FFmpeg cho VBR


27

Tôi nên sử dụng lệnh nào để chuyển đổi mp3tệp thành wavbitrate có biến. Hoặc tốt hơn làm thế nào để tôi biết liệu âm thanh nguồn đó là fixedbitrate hay variable?


3
Tôi không nghĩ định dạng tệp WAV hỗ trợ tốc độ bit thay đổi. Vì tất cả các bộ giải mã MP3 phải hỗ trợ nó tuân thủ các tiêu chuẩn, bạn sẽ có thể chuyển đổi bất kỳ tệp MP3 nào thành WAV bitrate cố định, mặc dù kết quả của bạn sẽ thay đổi tùy thuộc vào chất lượng của MP3 nguồn và bitrate cố định được chọn cho WAV tạo. Hầu hết các phần mềm phát MP3 cung cấp một cách để xem các thuộc tính của tệp đang được phát, vì vậy bạn có thể sử dụng một để xem loại tệp nguồn nào bạn đang xử lý.
martineau

Còn lệnh thì sao? Bạn đề xuất món gì?
Soham Dasgupta

Xin vui lòng đọc câu trả lời của martineau một lần nữa. Tôi đã sửa một vài lỗi. Đáng chú ý, bạn không thể đặt bitrate cho các tệp WAV được mã hóa PCM.
slhck

Câu trả lời:


36

Bạn có thể nhận được một số thông tin về tốc độ bit của các tệp đầu vào của mình bằng cách sử dụng ffprobe song.mp3lệnh. Tuy nhiên, điều này chỉ cho bạn biết bitrate của khung đầu tiên. VBR trong các tệp MP3 thường được triển khai đơn giản bằng cách thay đổi tốc độ bit cho từng khung, do đó, liệu nó có được sử dụng hay không chỉ bằng cách đọc tiêu đề của khung đầu tiên. Tôi thường sử dụng một số phần mềm trình phát tệp âm thanh khác để xác định xem VBR có đang được sử dụng hay không, vì nhiều người sẽ hiển thị điều đó (ví dụ Foobar2000).

Khi bạn sử dụng codec đầu ra bị mất (như MPEG-1 Layer III hoặc AAC), ffmpeg chọn tốc độ bit mặc định cho luồng đầu ra hoặc bitrate biến. Nó phụ thuộc vào chính bộ mã hóa.

Đối với các codec không mất dữ liệu, bạn không thể đặt bitrate thay đổi, vì mỗi mẫu lấy một số bit được xác định trước. ffmpeg -i song.mp3 song.wavdo đó sẽ giúp bạn có được tệp WAV được mã hóa PCM với tốc độ mẫu 44.100 Hz và 16 bit cho mỗi mẫu. Điều này dẫn đến khoảng 1411 kBit / s cho toàn bộ vùng chứa, có thể lớn hơn nhiều so với tệp đầu vào MP3.

Nếu bạn muốn kích thước tệp nhỏ hơn cho tệp WAV được mã hóa PCM, hãy đặt định dạng mẫu với độ sâu bit ít hơn (xem -encoderstùy chọn cho danh sách đầy đủ của chúng) và / hoặc chọn tốc độ mẫu thấp hơn ( -ar 22050ví dụ sẽ sử dụng 22,05 kHz).

Đây là một ví dụ về làm cả hai:

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

5
Nếu bạn mã hóa âm thanh PCM trong bộ chứa WAV, bạn không thể đặt tốc độ bit. Điều đó không có ý nghĩa. PCM là một định dạng không nén - bạn không thể yêu cầu nó sử dụng nhiều hơn hoặc ít bit hơn mỗi giây. Cách duy nhất để điều chỉnh kích thước là sử dụng một cỡ mẫu khác nhau (xem -sample_fmtstùy chọn). -ar 128kcó nghĩa là tốc độ mẫu sẽ là 128.000 Hz, thay vì 44,1 hoặc 48 kHz thông thường.
slhck

12
Có lẽ bạn nên làm tốt hơn ffmpeg -i song.mp3 song.wav, vì điều đó sẽ chọn bitrate thích hợp (có thể là 44.1khz). Nếu bạn đang chuyển đổi sang wav, có lẽ bạn không muốn mất thêm thông tin ..
naught 101

@ naught101 đã đúng, tốt hơn hết là hãy ffpmegchọn bitrate lấy mẫu đúng theo song.mp3dữ liệu đầu vào. Theo cách này, wavtệp bitmap đầu ra sẽ có tốc độ bit tốt nhất. Điều này có nghĩa là btw rằng kích thước tệp sẽ rất lớn, nhưng với việc quá mức dữ liệu: `Luồng # 0: 0: Âm thanh: mp3, 44100 Hz, âm thanh nổi, s16p, 128 kb / s`
loretoparisi

1
Giả định khá an toàn, mục đích của người hỏi là ghi các tệp WAV kết quả vào đĩa CD âm thanh. Tần số phù hợp duy nhất cho đó là 44100 Hz, do đó, -ar 44100ngay cả khi ffmpeg sẽ tự động sử dụng codec 16 bit phù hợp.
Mikhail T.

3

Theo nhận xét @ naught101, tôi sẽ thực hiện theo quy trình này để phát hiện tốt nhất 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

Tại thời điểm này, hãy xem xét nền tảng của bạn để chọn giữa big-endian, little-endianbitrate chọn:

$ 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

Chúng ta có thể thấy rằng tệp âm thanh này là một mp3(điều này không rõ ràng, mặc dù phần mở rộng của tệp đầu vào, chỉ cần kiểm tra các byte) có bitrate của 128 kb/s, codec là s16p, lấy mẫu tại 44100 Hz, vì vậy chúng tôi chọn theo:

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

Nếu bạn đang sử dụng mac, bạn có thể kiểm tra âm thanh nếu nó không có white noiseở đầu / cuối (khi âm thanh gốc mp3 không có âm thanh trong một số msec / giây):

$ afplay sample.wav

và tất nhiên bạn có thể kiểm tra lại 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

Sử dụng ffmpeg để chuyển đổi phương tiện, trước tiên hãy kiểm tra đặc tả tệp bằng ffprobe. sử dụng lệnh này ffmpeg -i kimberly.wav -acodec pcm_s16le -ar 16000 -ac 1 song.wav

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.