一括.flac --> .mp3トランスコーディング:ID3タグ情報を保存するシェルスクリプトを書くには?

一括.flac --> .mp3トランスコーディング:ID3タグ情報を保存するシェルスクリプトを書くには?

ここ数週間、私は.flac --> .mp3トランスコーディングへのかなり「直接」アプローチから「設定して忘れてしまう」アプローチに切り替えました。

最初のステップは、GUIフロントエンド(LAMEプラグインを使用したAudacity)の使用を中止し、代わりに私が説明したアプローチを使用することです。ここ

2番目のステップは、コマンドループが再帰的に機能するように指示して、多くのサブディレクトリを含むディレクトリを簡単な1つのステップにコード変換できるようにするbashシェルスクリプトを見つけることです。それ回答askubuntu.comユーザーが投稿しました。

さて、ID3タグ情報が保持されるようにさらに具体化する方法を学びたいと思います。これらの方法は上記のストライプID3タグデータにリンクされ、最小限のデータ(つまりヘッダーフィールドのみ)を残します。

誰でもこのようなシェルスクリプトを書く方法を教えてもらえますか?


シェルスクリプトが次のように更新されました。

#!/bin/bash
file="$1"
flac -cd "$file" | lame --preset fast extreme - "${file%.flac}.mp3"
id3cp "$file" "${file%.flac}.mp3"

~/Desktop/stackで操作を実行すると、find . -name '*.flac' -exec ~/bin/flac2mp3 '{}' \;次のような結果が出力されます。

01 - Amon Tobin - Chomp Samba.flac: done         
LAME 3.98.4 64bits (http://www.mp3dev.org/)
Using polyphase lowpass filter, transition band: 19383 Hz - 19916 Hz
Encoding <stdin> to ./01 - Amon Tobin - Chomp Samba.mp3
Encoding as 44.1 kHz j-stereo MPEG-1 Layer III VBR(q=0)
Parsing ./01 - Amon Tobin - Chomp Samba.flac: done.  Copying to ./01 - Amon Tobin - Chomp Samba.mp3: done

id3info元の.flacと生成された.mp3に対して別々に提供されます。

*** Tag information for 01 - Amon Tobin - Chomp Samba.flac

(つまり、何もない)

*** Tag information for 01 - Amon Tobin - Chomp Samba.mp3
*** mp3 info
MPEG1/layer III
Bitrate: 128KBps
Frequency: 44KHz

.flacには確かにタグ情報があります。 EasyTAGを開いて確認できます。 EasyTAGはこれを「FLAC Vorbisタグ」と呼びますが、.mp3を「ID3タグ」と呼びます。これは問題ですか?

答え1

#!/bin/sh

file="$1"
outfile=${file%.flac}.mp3

eval $(metaflac --export-tags-to - "$file" | sed "s/=\(.*\)/='\1'/")

flac -cd "$file" | lame --preset fast extreme \
        --add-id3v2 --tt "$TITLE" --ta "$ARTIST" --tl "$ALBUM" \
        --ty "$DATE" --tn "$TRACKNUMBER" --tg "$GENRE" \
        - "$outfile"

答え2

mp3fsを使用してflacをmp3にバッチエンコードする方法

flacファイルをmp3に変換するプログラムを使用する代わりに、mp3fsを使用してファイルを仮想mp3にレンダリングし、コピー操作をキューに入れることができるプログラムを使用できます。それは私にとってとてもうまくいきます。

mp3fsとUltracopierをダウンロードしてインストールします。

sudo apt-get install mp3fs ultracopier

実行する各 mp3fs の flac ディレクトリと mp3 ディレクトリのペアを作成します。デュアルコアCPUがあるので、両方を実行します。 flacディレクトリをflacファイルと同じパーティションに保存すると、ファイルをすばやく移動できます。私のシステムでは、このパーティションを「ストレージ」と呼びます。

cd /media/Storage
mkdir mp3fs mp3fs/flac_1 mp3fs/mp3_1 mp3fs/flac_2 mp3fs/mp3_2

コマンドラインからディレクトリをマウントまたは追加できます/etc/fstab。インストール中に仮想mp3のビットレートとエンコードアルゴリズムを設定することもできます。私は320kbpsの一定のビットレートmp3を望んでいます。

コマンドラインから:

mp3fs -b 320 -oquality=0 /media/Storage/mp3fs/flac_1 /media/Storage/mp3fs/mp3_1 -o allow_other,ro
mp3fs -b 320 -oquality=0 /media/Storage/mp3fs/flac_2 /media/Storage/mp3fs/mp3_2 -o allow_other,ro

ヒューズが文句を言う場合、例えば。

フューザマウント:/etc/fuse.confを開けませんでした:権限が拒否されました
。フューザマウント: "user_allow_other"がetc / fuse.confに設定されている場合にのみ、許可_その他のオプションが許可されます。

その後、user_allow_otherそのオプションのコメントを削除/etc/fuse.confまたは読み取ることができます。

sudo chmod 644 /etc/fuse.conf

または以下から/etc/fstab

mp3fs#/media/Storage/mp3fs/flac_1 /media/Storage/mp3fs/mp3_1 fuse user,ro,allow_other,bitrate=320,quality=0 0 0
mp3fs#/media/Storage/mp3fs/flac_2 /media/Storage/mp3fs/mp3_2 fuse user,ro,allow_other,bitrate=320,quality=0 0 0

にディレクトリを追加したら、/etc/fstab次のコマンドを使用してマウントできます。

sudo mount -a

完璧!スーパーコピー機を起動します。 GNOMEパネルまたは使用するすべての項目にインジケータアイコンが配置されます。クリックしてコピーを追加を選択します。 2つのコアを使用するためにこれを2回行いました。ファイルブラウザを使用して一部のflacをflac_1に移動します。 mp3_1ディレクトリに移動し、mp3をSuper Copierウィンドウの1つにドラッグしてコピーキューを起動します。 Ultracopierはファイルの宛先を尋ねます。これで、1つのコアがflacバッチをmp3にエンコードするために使用されます。

別のコアを使用するには、flacファイルをflac_2に移動し、mp3_2からmp3を2番目のスーパーコピーウィンドウにドラッグします。

アップデート:私はUltracopierの代わりにMiniCopierを使用していますが、使いやすくなりました。以下のコメントをご覧ください。

答え3

id3cpFLACはID3を使用せず、代わりにVorbisタグを使用するため、機能しません。

ffmpegオプションで、変換によってラベルを保持できます。ちょっと気まぐれですね。値はコーデックの組み合わせによって異なります。しかし、あなたの場合は、次のように動作します(バージョン3.4.8)。

ffmpeg -i in.flac -map_metadata 0:g:0 out.mp3

フォルダ内のすべてのFLACファイルを(再帰的に)適用するのは簡単ですbash

for f in */**/*.flac; do
  ffmpeg -i "${f}" -map_metadata 0:g:0 "${f%.flac}.mp3";
done

lameはffmpeg自動的に使用され、品質などを制御するための追加オプションもあります。詳細を確認してくださいman ffmpeg

答え4

Raphaelの答えは私に多くの助けになりました。ただし、FLACファイルセットを機能させるには、タグが正しく保持され、オーディオがmp3ファイルの最初のストリームになるようにストリームを手動で調整する必要があります。私は次の行で終わりました。

$nohup bash -c 'for f in */**/*.flac; do ffmpeg -i "${f}" -map 0:a -map 0:v:0? -map 0:v:1? -c:v copy -codec:a libmp3lame -qscale:a 2 -y "${f%.flac}.mp3"; done' 2>&1 > log.txt &

疑問符を使用すると、関連するストリームが失われる可能性があります。 qscaleパラメーターは、ffmepgで使用されるLameエンコーダーライブラリのmp3エンコーディング品質を定義します。

関連情報