複数の FLAC ファイルから FLAC+cue を作成するにはどうすればよいでしょうか?

複数の FLAC ファイルから FLAC+cue を作成するにはどうすればよいでしょうか?

Google で検索してみましたが、逆のガイドしか見つかりませんでした。

アルバムからいくつかの flac ファイルがあり、すべて適切にタグ付けされています。それらを自動的にキューシート付きの 1 つの flac ファイルにしたいと思います (つまり、Audacity に貼り付けて自分でキューを作成するのではなく)。

これは可能ですか?

答え1

使用シュンツールロスレス オーディオ ファイルを操作するための多目的、マルチフォーマットのコマンドライン ツールです。

shntool join -o flac *.flac

joined.flacこれにより、 内の各ファイルのオーディオ コンテンツを含むファイルが生成されます*.flac。 に任せるのではなく、FLAC ファイルの名前を指定することもできます*.flac。これにより、ファイルが正しい順序で結合され、不要な FLAC ファイルが含まれないようにすることができます。

shntool cue *.flac > joined.cue

これにより、トラックとタイミングをリストする単純なテキスト ファイルである CUE ファイルが生成されますjoined.cue。FLAC ファイルの名前を指定する場合と同じ注意が適用されます。(これらのコマンドを順番に実行している場合、joined.flacは に含まれるファイルの 1 つになります*.flac。)

答え2

キューツールこれを行うことができます - ファイルが入っているフォルダ全体を選択し、モードに「埋め込み」を選択します (埋め込みはアルバム アートを指し、flac ファイルではありません。別のアルバム アート イメージの場合は、image+cue を選択します)。アクションに「エンコード」を選択します。ファイル タイプに flac、エンコーダーに libflake を選択します。

ここに画像の説明を入力してください

これにより、キューシート用の複数のデータセットを含むウィンドウがポップアップ表示されます。最初のデータセットはユーザーのデータに基づいており、他のデータセットは freedb や他のサイトのデータに基づいています。

ここに画像の説明を入力してください

これにより、cue ファイルを含む単一の flac ファイルが作成されます。

答え3

foob​​ar2000 ルートを試しましたが、残念ながら各トラックの INDEX 変数を正確に出力しませんでした。他の解決策もうまくいきませんでした。ChatGPT の多大な支援を得て、何度も試行錯誤し、まさにこれを実行する bash スクリプトを作成しました。

#!/bin/bash

#if this doesn't work, you may need to install flac:
#sudo apt install flac
#written with significant help from ChatGPT

#INSTRUCTIONS: 1) Save this code as create_cue.sh
#                           2) Place it in the same folder as the .flac files you want to create a .cue sheet for
#                           3) Run the bash script (you may need to mark it as executable)
#                           4) Voila! Instant .cue file. Enjoy

# Get the first FLAC file in the directory
flac_file=$(ls *.flac | head -n 1)

# Get the header information from the FLAC file
PERFORMER=$(metaflac --show-tag=ARTIST "$flac_file" | cut -d= -f2)
TITLE=$(metaflac --show-tag=ALBUM "$flac_file" | cut -d= -f2)
DATE=$(metaflac --show-tag=DATE "$flac_file" | cut -d= -f2)
COMMENT=$(metaflac --show-tag=COMMENT "$flac_file" | cut -d= -f2)

# Set variables for the cue file
CUEFILE="$PERFORMER - $TITLE.cue"

# Initialize variables for cumulative time
HOURS=0
MINUTES=0
SECONDS=0

# Start writing cue file
echo "REM DATE $DATE" >> "$CUEFILE"
echo "REM COMMENT $COMMENT" >> "$CUEFILE"
echo "PERFORMER \"$PERFORMER\"" >> "$CUEFILE"
echo "TITLE \"$TITLE\"" >> "$CUEFILE"

# Loop through each flac file in the current directory
for flacfile in *.flac; do
    
    # Get track number, performer, and title from file tags
    TRACK=$(metaflac --show-tag=TRACKNUMBER "$flacfile" | sed 's/.*=//')
    PERFORMER=$(metaflac --show-tag=ARTIST "$flacfile" | sed 's/.*=//')
    TITLE=$(metaflac --show-tag=TITLE "$flacfile" | sed 's/.*=//')

    # Write track info to cue file
    printf "FILE \"$flacfile\" WAVE \n" >> "$CUEFILE"
    printf "  TRACK %02d AUDIO\n" "$TRACK" >> "$CUEFILE"
    printf "    TITLE \"%s\"\n" "$TITLE" >> "$CUEFILE"
    printf "    PERFORMER \"%s\"\n" "$PERFORMER" >> "$CUEFILE"
    printf "    INDEX 01 %02d:%02d:%02d\n" "$HOURS" "$MINUTES" "$SECONDS" >> "$CUEFILE"

    # Get length of track in seconds
    LENGTH=$(metaflac --show-total-samples "$flacfile")
    LENGTH=$((LENGTH/44100))

    # Update cumulative time
    SECONDS=$((SECONDS+LENGTH))
    if [ $SECONDS -ge 60 ]; then
        MINUTES=$((MINUTES+SECONDS/60))
        SECONDS=$((SECONDS%60))
    fi
    if [ $MINUTES -ge 60 ]; then
        HOURS=$((HOURS+MINUTES/60))
        MINUTES=$((MINUTES%60))
    fi

done

答え4

Foobar2000を見てください。埋め込まれたキューシートを含む単一のファイルを作成でき、アートワークを埋め込むこともでき、結果のファイルを再生することもできます。 http://www.foobar2000.org/

関連情報