FFMPEG 표지 이미지가 포함된 FLAC를 OPUS로 변환

FFMPEG 표지 이미지가 포함된 FLAC를 OPUS로 변환

FLAC를 OPUS 파일로 변환하는 대규모 스크립트가 있는데 특정 문제로 어려움을 겪고 있습니다. 표지 이미지를 변환하여 복사하려고 하면 오류가 발생합니다. 프롤로그, 변환을 처리하는 스크립트 부분은 다음과 같습니다.

find $DIRECTORY -type f \
    \( -iname "*${EXTENSIONS[0]}" $(if [ ${#EXTENSIONS[@]} -gt 1 ]; \
    then printf -- '-o -iname *%s ' "${EXTENSIONS[@]:1}"; fi) \) \
    -print0 | \
    xargs -0 -P $THREADS -I {} \
        ffmpeg -i "{}" \
        $(if [ ! $VERBOSE ]; then echo "-loglevel warning"; fi) \
        -map 0:a \
        -c:a libopus -map_metadata 0 -map_metadata:s:a 0:s:a \
        -b:a $BITRATE \
        -map 0:v \
        -c:v copy -map_metadata 0 -map_metadata:s:v 0:s:v -disposition:v:1 attached_pic \
        -y "{}.opus"

다음 오류가 발생합니다.

Stream mapping:
  Stream #0:0 -> #0:0 (flac (native) -> opus (libopus))
  Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
[opus @ 0x562a9db664c0] Unsupported codec id in stream 1
[out#0/opus @ 0x562a9db64580] Could not write header (incorrect codec parameters ?): Invalid argument
[aost#0:0/libopus @ 0x562a9db68540] Error initializing output stream: 

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

ffmpeg -i "{}" \
  $(if [ ! $VERBOSE ]; then echo "-loglevel warning"; fi) \
  -map 0:a \
  -c:a libopus -map_metadata 0 -map_metadata:s:a 0:s:a \
  -b:a $BITRATE \
  -y "{}.opus"

그리고 이것은 여기 있습니다:

ffmpeg -i "{}" \
  $(if [ ! $VERBOSE ]; then echo "-loglevel warning"; fi) \
  -map 0:a \
  -map_metadata 0 -map_metadata:s:a 0:s:a \
  -b:a $BITRATE \
  -map 0:v \
  -c:v copy -map_metadata 0 -map_metadata:s:v 0:s:v -disposition:v:1 attached_pic \
  -y "{}.mp3"

유일한 차이점은 후자는 영상을 복사하지 않거나 작품 대신 MP3를 출력한다는 점이다. 따라서 ffmpeg 명령 자체는 정확해야 합니다. 왜냐하면 비디오 스트림(OPUS 및 MP3에)을 포함하지 않으면 이미지가 복사되지 않기 때문입니다.

이것은 매우 이상한 동작이며 지금 당장 어떻게 고칠 수 있는지 전혀 모르겠습니다. 이 내용이 어딘가에 문서화되어 있습니까? 리보푸스 문제인 것 같은데 왜 리보푸스는 영상까지 보고, 그렇지 않다면 왜 오류가 발생하는 걸까요?

추신: ffprobe가 유용할 수 있다는 것을 깨달았습니다.썸네일이 포함된 OPUS 파일의 경우(Kid3으로 제작) 및같은 노래의 flac 파일의 경우

PPS: 누군가가 저를 능가하기 전에, 그렇습니다. 저는 for 루프를 사용하여 이 작업을 수행할 수 있습니다. 두 가지 모두가 가능한 유용한 스크립트보다는 도전을 원합니다. 예, 수동으로 할 수 있습니다. 매달 적어도 하나의 앨범을 구입합니다. 수동으로 하고 Jellyfin에 flac를 추가하고 싶지 않습니다.

답변1

현재 FFMPEG는 OGG 컨테이너의 커버 아트를 지원하지 않습니다.ogg/opus 메타데이터에 포함된 앨범 표지 아트 이미지 작성 지원 - 댓글 11

매개변수를 사용하여 이미지를 표지 아트로 수동으로 추가할 수 있습니다 -metadata:s:a METADATA_BLOCK_PICTURE=....

수동 해결 방법은 다음을 참조하세요.OGG 오디오 파일에 예술적인 커버 추가슈퍼유저

관련 정보