Perintah apa yang harus saya gunakan untuk mengonversi mp3file wavyang bitrate-nya variabel. Atau lebih baik bagaimana saya tahu apakah sumber audio itu fixedbitrate atau variable?
Saya tidak berpikir format file WAV mendukung laju bit variabel. Karena semua decoder MP3 harus mendukungnya agar sesuai dengan standar, Anda harus dapat mengonversi file MP3 apa pun menjadi WAV dengan bitrate tetap, meskipun hasil Anda akan bervariasi tergantung pada kualitas sumber MP3 dan bitrate tetap yang dipilih untuk WAV dibuat. Sebagian besar perangkat lunak pemutar MP3 menyediakan cara untuk melihat properti file yang sedang diputar, sehingga Anda dapat menggunakannya untuk melihat jenis file sumber yang Anda hadapi.
martineau
Dan bagaimana dengan perintahnya? Apa yang kamu sarankan?
Soham Dasgupta
Silakan baca jawaban martineau lagi. Saya memperbaiki beberapa kesalahan. Khususnya, Anda tidak dapat mengatur bitrate untuk file WAV yang dikodekan PCM.
slhck
Jawaban:
36
Anda bisa mendapatkan info tentang bitrate file input Anda dengan menggunakan ffprobe song.mp3perintah. Namun ini hanya memberi tahu Anda bitrate dari frame pertama. VBR dalam file MP3 biasanya diimplementasikan hanya dengan mengubah bitrate untuk setiap frame, jadi apakah itu digunakan tidak dapat ditentukan hanya dengan membaca header dari frame pertama. Saya biasanya menggunakan beberapa perangkat lunak pemutar file audio lainnya untuk menentukan apakah VBR sedang digunakan, karena banyak yang akan menampilkannya (misalnya Foobar2000).
Ketika Anda menggunakan codec output lossy (seperti MPEG-1 Layer III atau AAC), ffmpeg memilih bitrate default untuk aliran output, atau bitrate variabel. Itu tergantung pada encoder itu sendiri.
Untuk codec lossless, Anda tidak dapat mengatur bitrate variabel, karena setiap sampel mengambil jumlah bit yang telah ditentukan. ffmpeg -i song.mp3 song.wavkarena itu akan memberi Anda file WAV yang dikodekan PCM dengan laju sampel 44.100 Hz dan 16 bit per sampel. Ini menghasilkan sekitar 1411 kBit / s untuk seluruh wadah, kemungkinan jauh lebih besar dari file input MP3.
Jika Anda menginginkan ukuran file yang lebih kecil untuk file WAV yang dikodekan PCM, tetapkan format sampel dengan kedalaman bit lebih sedikit (lihat -encodersopsi untuk daftar lengkapnya) dan / atau pilih laju sampel yang lebih rendah (misalnya, -ar 22050akan menggunakan 22,05 kHz).
Jika Anda menyandikan audio PCM dalam wadah WAV, Anda tidak dapat mengatur bitrate. Itu tidak masuk akal. PCM adalah format yang tidak terkompresi - Anda tidak bisa mengatakannya untuk menggunakan bit lebih banyak atau lebih sedikit per detik. Satu-satunya cara untuk menyesuaikan ukuran adalah dengan menggunakan ukuran sampel yang berbeda (lihat -sample_fmtsopsi). -ar 128kberarti bahwa laju sampel akan 128.000 Hz, bukan 44,1 atau 48 kHz biasa.
slhck
12
Anda mungkin lebih baik melakukannya ffmpeg -i song.mp3 song.wav, karena itu akan memilih bitrate yang sesuai (yang mungkin 44.1khz). Jika Anda mengonversi ke wav, Anda mungkin tidak ingin kehilangan informasi lebih lanjut ..
naught101
@ naught101 benar, infact lebih baik membiarkan ffpmeguntuk memilih bitrate sampling yang tepat sesuai dengan song.mp3data input. Dengan cara ini wavfile bitmap keluaran akan memiliki bitrate terbaik. Ini berarti btw bahwa ukuran file akan menjadi besar, tetapi dengan overfitting data: `Streaming # 0: 0: Audio: mp3, 44100 Hz, stereo, s16p, 128 kb / s`
loretoparisi
1
Cukup aman untuk mengasumsikan, tujuan si penanya adalah untuk membakar file WAV yang dihasilkan ke CD audio. Satu-satunya frekuensi yang cocok untuk itu adalah 44100 Hz, jadi -ar 44100adalah suatu keharusan bahkan jika ffmpeg secara otomatis akan menggunakan codec 16-bit yang sesuai.
Mikhail T.
3
Menurut komentar @ naught101, saya akan mengikuti proses ini untuk mendeteksi yang terbaik 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
Pada titik ini, pertimbangkan platform Anda untuk memilih big-endian,, little-endianbitrate pilih:
$ 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
Kita dapat melihat bahwa file audio ini adalah mp3(ini tidak jelas, meskipun ekstensi dari file input, cukup periksa byte) memiliki bitrate 128 kb/s, codec s16p, sampling di 44100 Hz, jadi kami memilih sesuai:
$ 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%
Jika Anda menggunakan mac Anda dapat memeriksa audio jika tidak ada white noisedi awal / akhir (ketika audio asli mp3 tidak memiliki audio untuk beberapa msec / detik):
$ afplay sample.wav
dan tentu saja Anda dapat mengecek 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
Jawaban:
Anda bisa mendapatkan info tentang bitrate file input Anda dengan menggunakan
ffprobe song.mp3
perintah. Namun ini hanya memberi tahu Anda bitrate dari frame pertama. VBR dalam file MP3 biasanya diimplementasikan hanya dengan mengubah bitrate untuk setiap frame, jadi apakah itu digunakan tidak dapat ditentukan hanya dengan membaca header dari frame pertama. Saya biasanya menggunakan beberapa perangkat lunak pemutar file audio lainnya untuk menentukan apakah VBR sedang digunakan, karena banyak yang akan menampilkannya (misalnya Foobar2000).Ketika Anda menggunakan codec output lossy (seperti MPEG-1 Layer III atau AAC), ffmpeg memilih bitrate default untuk aliran output, atau bitrate variabel. Itu tergantung pada encoder itu sendiri.
Untuk codec lossless, Anda tidak dapat mengatur bitrate variabel, karena setiap sampel mengambil jumlah bit yang telah ditentukan.
ffmpeg -i song.mp3 song.wav
karena itu akan memberi Anda file WAV yang dikodekan PCM dengan laju sampel 44.100 Hz dan 16 bit per sampel. Ini menghasilkan sekitar 1411 kBit / s untuk seluruh wadah, kemungkinan jauh lebih besar dari file input MP3.Jika Anda menginginkan ukuran file yang lebih kecil untuk file WAV yang dikodekan PCM, tetapkan format sampel dengan kedalaman bit lebih sedikit (lihat
-encoders
opsi untuk daftar lengkapnya) dan / atau pilih laju sampel yang lebih rendah (misalnya,-ar 22050
akan menggunakan 22,05 kHz).Berikut ini contoh melakukan keduanya:
sumber
-sample_fmts
opsi).-ar 128k
berarti bahwa laju sampel akan 128.000 Hz, bukan 44,1 atau 48 kHz biasa.ffmpeg -i song.mp3 song.wav
, karena itu akan memilih bitrate yang sesuai (yang mungkin 44.1khz). Jika Anda mengonversi ke wav, Anda mungkin tidak ingin kehilangan informasi lebih lanjut ..ffpmeg
untuk memilih bitrate sampling yang tepat sesuai dengansong.mp3
data input. Dengan cara iniwav
file bitmap keluaran akan memiliki bitrate terbaik. Ini berarti btw bahwa ukuran file akan menjadi besar, tetapi dengan overfitting data: `Streaming # 0: 0: Audio: mp3, 44100 Hz, stereo, s16p, 128 kb / s`-ar 44100
adalah suatu keharusan bahkan jika ffmpeg secara otomatis akan menggunakan codec 16-bit yang sesuai.Menurut komentar @ naught101, saya akan mengikuti proses ini untuk mendeteksi yang terbaik
acodec
:Pada titik ini, pertimbangkan platform Anda untuk memilih
big-endian
,,little-endian
bitrate pilih:Kita dapat melihat bahwa file audio ini adalah
mp3
(ini tidak jelas, meskipun ekstensi dari file input, cukup periksa byte) memiliki bitrate128 kb/s
, codecs16p
, sampling di44100 Hz
, jadi kami memilih sesuai:Jika Anda menggunakan mac Anda dapat memeriksa audio jika tidak ada
white noise
di awal / akhir (ketika audio asli mp3 tidak memiliki audio untuk beberapa msec / detik):dan tentu saja Anda dapat mengecek bitmap:
sumber
Gunakan ffmpeg untuk mengkonversi media, periksa terlebih dahulu spesifikasi file menggunakan ffprobe. gunakan perintah ini
ffmpeg -i kimberly.wav -acodec pcm_s16le -ar 16000 -ac 1 song.wav
dimana
-pcm_s16le is codec 16 bit conversion -ar is sampling rate (16000samples/sec) -ac no of audio channel
sumber