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に)が含まれていないと画像がコピーされないためです。
これは非常に奇妙な動作であり、今すぐどのように修正することができるのか分かりません。この内容はどこかに文書化されていますか?リボプス問題のようですが、なぜリボプスは映像まで見て、そうでなければなぜエラーが発生するのでしょうか?
PS:ffprobeが役に立つかもしれないことに気づきました。サムネイルを含むOPUSファイルの場合(Kid3で製作)と同じ曲のflacファイルの場合
PPS:誰かが私を凌駕する前に、はい。私はforループを使ってこれを行うことができます。どちらも可能な便利なスクリプトではなく挑戦を望んでいます。はい、手動で行うことができます。毎月少なくとも1枚のアルバムを購入します。私は手動でJelyfinにflacを追加したくありません。
答え1
現在、FFMPEGはOGGコンテナのカバーアートをサポートしていません。ogg / opusメタデータに含まれるアルバムカバーアート画像の作成をサポート - コメント11
パラメータを使用して、画像をカバーアートとして手動で追加できます-metadata:s:a METADATA_BLOCK_PICTURE=...
。
手動の解決方法については、以下を参照してください。OGGオーディオファイルに芸術的なカバーを追加するスーパーユーザー