ffmpeg는 flac에서 alac로 변환할 때 비트 심도 s32p로만 출력합니다.

ffmpeg는 flac에서 alac로 변환할 때 비트 심도 s32p로만 출력합니다.

ffmpeg내 환경(Apple 및 Sonos)에 .최소 공통 분모다음과 같은 것 같습니다:

ALAC(.m4a) 인코딩 주파수는 44.1kHz, 비트 심도 = 16비트

내가 겪고 있는 문제는 생성된 출력 파일 ffmpeg비트 심도 '32p';즉 sample_fmt=s32p

여러 매개변수 세트를 사용하여 변환을 수행했지만 결과는 동일합니다. 왜 이런 일이 발생하는지 설명하는 내용을 찾을 수 없었습니다. 이것은 내가 시도한 명령 중 하나입니다.

$ file='01 Jubilee.flac'
$ ffmpeg -i "$file" -acodec alac -ar 44100 -sample_fmt:0 s16 -c:v png "${file/%.flac/.16.m4a}" 

난 이미 ffprobe달렸어입력 파일형식을 결정합니다.

$ ffprobe -i "$file" -show_streams  

(요약하면) 다음을 생성합니다.

Stream #0:0: Audio: flac, 176400 Hz, stereo, s32 (24 bit)
Stream #0:1: Video: mjpeg (Progressive), yuvj444p(pc, bt470bg/unknown/unknown), 450x446 [SAR 72:72 DAR 225:223], 90k tbr, 90k tbn, 90k tbc (attached pic)

...그리고 약결과물 파일:

$ ffprobe -i "${file/%.flac/.16.m4a}" -show_streams

(요약하면) 다음을 생성합니다.

Stream #0:0(und): Audio: alac (alac / 0x63616C61), 44100 Hz, stereo, s32p (24 bit), 1564 kb/s (default)
Metadata:
  handler_name    : SoundHandler
Stream #0:1: Video: png, rgb24(pc), 450x446 [SAR 1:1 DAR 225:223], 90k tbr, 90k tbn, 90k tbc (attached pic)  

[STREAM]
index=0
codec_name=alac
codec_long_name=ALAC (Apple Lossless Audio Codec)
profile=unknown
codec_type=audio
codec_time_base=1/44100
codec_tag_string=alac
codec_tag=0x63616c61
sample_fmt=s32p
sample_rate=44100

... 

etc, etc

출력의 일부만 게시했지만 ffprobe필요한 경우 전체 콘텐츠를 사용할 수 있습니다. 또한 내 ffmpeg버전은 다음과 같습니다.

$ ffmpeg -version
ffmpeg version git-2020-01-13-7225479 Copyright (c) 2000-2020 the FFmpeg developers
built with Apple clang version 11.0.0 (clang-1100.0.33.8)

마지막으로 위 변환의 결과는 다음과 같습니다 ffmpeg.

$ ffmpeg -v info -hide_banner -i "$file" -acodec alac -ar 44100 -sample_fmt:0 s16 -c:v png "${file/%.flac/.16.m4a}"
Input #0, flac, from '01 Jubilee.flac':
  Metadata:
    track           : 1
    TITLE           : Jubilee
    ARTIST          : Bill Charlap Trio
    album_artist    : Bill Charlap Trio
    ALBUM           : Stardust The Music Of Hoagy Carmichael
    DATE            : 2003
    GENRE           : Jazz
    TRACKTOTAL      : 11
    disc            : 1
    DISCTOTAL       : 1
    ALBUM ARTIST    : Bill Charlap Trio
  Duration: 00:02:23.17, start: 0.000000, bitrate: 6176 kb/s
    Stream #0:0: Audio: flac, 176400 Hz, stereo, s32 (24 bit)
    Stream #0:1: Video: mjpeg (Progressive), yuvj444p(pc, bt470bg/unknown/unknown), 450x446 [SAR 72:72 DAR 225:223], 90k tbr, 90k tbn, 90k tbc (attached pic)
    Metadata:
      comment         : Cover (front)
File '01 Jubilee.16.m4a' already exists. Overwrite? [y/N] y
Stream mapping:
  Stream #0:1 -> #0:0 (mjpeg (native) -> png (native))
  Stream #0:0 -> #0:1 (flac (native) -> alac (native))
Press [q] to stop, [?] for help
[swscaler @ 0x10dc6b000] deprecated pixel format used, make sure you did set range correctly
[ipod @ 0x7fc3a1002200] Frame rate very high for a muxer not efficiently supporting it.
Please consider specifying a lower framerate, a different muxer or -vsync 2
Output #0, ipod, to '01 Jubilee.16.m4a':
  Metadata:
    track           : 1
    TITLE           : Jubilee
    ARTIST          : Bill Charlap Trio
    album_artist    : Bill Charlap Trio
    ALBUM           : Stardust The Music Of Hoagy Carmichael
    DATE            : 2003
    GENRE           : Jazz
    TRACKTOTAL      : 11
    disc            : 1
    DISCTOTAL       : 1
    ALBUM ARTIST    : Bill Charlap Trio
    encoder         : Lavf58.35.102
    Stream #0:0: Video: png, rgb24(progressive), 450x446 [SAR 1:1 DAR 225:223], q=2-31, 200 kb/s, 90k fps, 90k tbn, 90k tbc (attached pic)
    Metadata:
      comment         : Cover (front)
      encoder         : Lavc58.65.103 png
    Stream #0:1: Audio: alac (alac / 0x63616C61), 44100 Hz, stereo, s32p (24 bit), 128 kb/s
    Metadata:
      encoder         : Lavc58.65.103 alac
frame=    1 fps=0.8 q=-0.0 Lsize=   27745kB time=00:02:23.22 bitrate=1587.0kbits/s speed= 113x    
video:396kB audio:27342kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.026342%

답변1

이것은 여기서 작동합니다.

ffmpeg -i in -c:a alac -ar 44100 -sample_fmt s16p -c:v png -vsync 0 out.m4a

ALAC 인코더는 원본 프레임이 16비트인지 확인합니다.평평한

관련 정보