免責聲明:我是這一切的初學者,這個問題可能很愚蠢
我正在嘗試將 mp3 檔案位元深度從 32 更改為 16,並更改位元率
這是我的命令:
ffmpeg -i input.mp3 -sample_fmt s16p -vsync 2 -b:a 256k output2.mp3
比特率成功更改,但位元深度沒有更改。
這些是結果。
輸入檔:
ffprobe -i input.mp3
Duration: 00:04:40.08, start: 0.025056, bitrate: 323 kb/s
Stream #0:0: Audio: mp3, 44100 Hz, stereo, fltp, 320 kb/s
輸出檔案:
ffprobe -i output.mp3
Duration: 00:04:40.08, start: 0.025056, bitrate: 283 kb/s
Stream #0:0: Audio: mp3, 44100 Hz, stereo, fltp, 256 kb/s
或者以另一種方式,這就是 VLC 的媒體編解碼器給我的: 目前媒體資訊
我們可以看到 fltp,我相信在谷歌搜尋後意味著 32 位
現在這是使用s16p但如果我嘗試s16我得到以下資訊:
[libmp3lame @ 000001645fdcaec0] Specified sample format s16 is not supported by the libmp3lame encoder
[libmp3lame @ 000001645fdcaec0] Supported sample formats:
[libmp3lame @ 000001645fdcaec0] s32p
[libmp3lame @ 000001645fdcaec0] fltp
[libmp3lame @ 000001645fdcaec0] s16p
有趣的是,因為如果我輸入,ffmpeg -sample_fmts
我會得到:
name depth
u8 8
s16 16
s32 32
flt 32
dbl 64
u8p 8
s16p 16
s32p 32
fltp 32
dblp 64
s64 64
s64p 64
這似乎意味著 s16 應該可以工作嗎?我在這裡完全錯過了什麼嗎?到底是怎麼回事?
答案1
MP3 檔案中的壓縮資料經過編碼,因此沒有任何固有的儲存格式或位元深度。指Supported sample formats
編碼器接受處理的樣本格式。
output.mp3 顯示的範例格式是解碼器發出的格式。預設情況下,ffmpeg 使用 mp3float 解碼器輸出單精度浮點樣本。若要獲得 16 位元整數,請強制使用 mp3 定點解碼器,
ffmpeg -c:a mp3 -i output.mp3
(ffprobe不支援自訂解碼器規格)