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의 미디어 코덱이 제공하는 내용은 다음과 같습니다. 현재미디어정보

Google 검색을 통해 32비트를 의미한다고 생각되는 fltp를 볼 수 있습니다.

이제 이것은 사용 중입니다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는 사용자 정의 디코더 사양을 지원하지 않습니다)

관련 정보