Mass .flac-> .mp3トランスコーディング:ID3タグ情報を保持するシェルスクリプトを作成する方法


9

ここ数週間、.flac-> .mp3トランスコーディングへのかなり「実践的な」アプローチから、はるかに「設定して忘れる」ものに移行しました。

最初のステップは、GUIフロントエンド(LAMEプラグインを備えたAudacity)の使用を停止し、代わりに、ここで概説した方法を使用することでした。

2番目の手順は、そのコマンドループが再帰的に動作するように指示し、.flacファイルを含む多くのサブディレクトリを持つディレクトリを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"

やって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タグ」と呼びます。これは問題ですか?


使ってみましたffmpegか?
Hello71、2011年

いいえ、していません。正直に言うと、CLIでこれを実際に使用したことはありません。誰かがこの Perlスクリプトについて教えてくれました。明日それを試して、今遅いのでまた報告するつもりです。
boehj 2011年

回答:


7
#!/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"

カンバスありがとう!それはほとんどトリックを行います。タイトル、アルバム、アーティスト、年、トラック番号など、私が欲しいタグの大部分はトランスコード後です。CDフィールド(1 / 1、1 / 2など)は横になっておらず、「Track Number Of」のフィールドもありません。しかし、これは本当に気になりません。興味深いことに、私はこのスクリプトを「Trip Hop」の音楽を含むディレクトリで試しました。タグは変更されませんでしたが、スクリプトによってジャンルが「トリップホップ」から「トリップホップ」に変更されました。だから、それはそこにある既知のジャンルのデータベースに依存していると思います。ご意見ありがとうございました!
boehj 2011年

@pedrogent:お役に立ててうれしいです!「metaflac --export-tags-to-file」を使用して他のタグを手動で確認し、$ TITLEや他のタグと同じように使用できますが、問題はid3 AFAIKに対応するフィールドがないことです。多分あなたはそれらをコメントタグに入れることができます。はい、ジャンルの事前定義されたリストがあります:リンク
カンバス

こんにちは、カンバス。はい、ここでの問題の一部は、ID3タグデータの明確な「標準」がないことだと思います。Commentタグの解釈は、プレーヤーごとに異なります(またはまったく異なります)。あなたのスクリプトは素晴らしいです。再度、感謝します。
boehj

1

mp3fsを使用してflacをmp3に一括エンコードする方法

プログラムを使用してflacファイルをmp3に変換する代わりに、mp3fsを使用してそれらを仮想mp3として提示し、コピージョブをキューに入れることができるプログラムを使用できます。それは私にとってはうまく機能します。

mp3fsとウルトラコピー機をダウンロードしてインストールします。

sudo apt-get install mp3fs ultracopier

実行する各mp3fsに対して、flacおよびmp3ディレクトリのペアを作成します。私はデュアルコアCPUを持っているので、2つ実行します。flacファイルが存在するパーティションにflacディレクトリを保持すると、それらをすばやく移動できます。私のシステムでは、そのパーティションは「ストレージ」と呼ばれています。

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

コマンドラインから、またはにディレクトリを追加して、ディレクトリをマウントでき/etc/fstabます。マウント時に仮想mp3のビットレートとエンコードアルゴリズムを構成することもできます。320 kbpsの一定のビットレートのmp3が必要です。ラメは、可能な限り最高の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

ヒューズが不満を言うなら

fusermount:/etc/fuse.confのオープンに失敗しました:アクセス許可が拒否されました
fusermount:オプションallow_otherは、etc / fuse.confに「user_allow_other」が設定されている場合にのみ許可されます

次に、の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をいずれかのウルトラコピーウィンドウにドラッグして、コピーキューを開始します。Ultracopierはファイルの宛先を要求します。これで、flacのバッチをmp3にエンコードするビジーコアが1つあります。

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

更新:ウルトラコピー機の代わりに、MiniCopierを使用していますが、少し使いやすくなっています。以下のコメントを参照してください。


:mp3fsとヒューズの最近のバージョンでディレクトリリストのバグがあるようですsourceforge.net/tracker/...
オフィディアン

@オフィディアン:興味深い。異なるディストリビューションを使用しているマシンで、いくつかのテストを実行しました。エラーなしで、それぞれを1分以内に実行しました。私が使用しているmp3fsバージョンは同じ0.30です。カーネル2.3.38、2.3.39、および3.0.0、libfuseバージョン2.8.4および2.8.6を使用しました。バグレポートで言及されているLibfuseは2.8.5です。これは、fuseが原因であると結論付けるのに十分ではありませんが、2.8.5の使用中に問題が発生した場合は、別のバージョンを試す価値があるかもしれません。mp3fsを試してみましたか?どのカーネルとどのlibfuseで?問題が発生しましたか?
Arjan Drieman、2011年

ウルトラコピー機の代わりに、私は現在ミニコピー機を使用していますが、それは少し使いやすくなっています。これはJavaアプリです。インストールは必要ありませんが、JREは必要です。バスケットアイコンとボックスアイコンがあります。1つ以上のソースをファイルマネージャーからバスケットアイコンにドラッグし、宛先ディレクトリをボックスアイコンにドラッグするだけで、コピージョブをキューに追加できます。MiniCopierには、失敗したアイテム用の個別のタブがあります。MiniCopierは、超コピー機よりも少ないCPUサイクルを使用します(私のシステムでは1%対3%)。10時間のキューで12分節約できるかもしれません;-)
Arjan Drieman

シェルベースのコピーキューが必要な場合は、スーパーユーザーで解決策を見つけました。調整なしでは、2つのキューを実行することはできません。エラーでどうなるかはわかりません。
Arjan Drieman、2011年

0

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

avconv変換を通じてタグを維持するオプションがあります。それは一種の気まぐれで、その値はコーデックの組み合わせに依存しますが、あなたの場合(バージョン9.16-6)では次のように機能します:

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

フォルダー内のすべてのFLACファイルを(再帰的に)適用するのは、次のように簡単です:(を使用bash

for f in */**/*.flac; do
  avconv -i "${f}" -map_metadata 0:g:0 "`echo "${f}" | sed -e s/flac$/mp3/`";
done

avconvlameは自動的に使用されることに注意してください。品質を制御するためのオプションが他にもあります。詳細man avconvを確認してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.