免責事項:私はこのことについて初心者なので、この質問は愚かなものである可能性があります
私は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はGoogleで検索すると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 はカスタムデコーダー仕様をサポートしていません)