FFmpeg Sample_fmt 實際上並未更改位元_深度 + 缺少支援的範例格式

FFmpeg Sample_fmt 實際上並未更改位元_深度 + 缺少支援的範例格式

免責聲明:我是這一切的初學者,這個問題可能很愚蠢

我正在嘗試將 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不支援自訂解碼器規格)

相關內容