면책조항: 저는 이 모든 것에 대해 초보자입니다. 이 질문은 어리석을 수도 있습니다.
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는 사용자 정의 디코더 사양을 지원하지 않습니다)