私は長期にわたるラジオ番組でmp3ファイルを収集して整理するプロジェクトを持っています。命名規則とID2/3タグは、さまざまなソースとソースからどこにでも存在します。
正規化されたファイルセットを作成したいと思います。この目的のために、私はディレクトリ構造とファイル名を維持し、標準化されたディレクトリ構造とファイル名にシンボリックリンクを関連付け始めました。これにより、私が持っているものと不足しているものが何であるかを簡単に知ることができるだけでなく、私がすでに持っている「野生の」ショーにいつ接するのかがわかります。
しかし、まだID2 / 3タグの問題があります。また、正規化したいのですが、ソースmp3を変更しないとそうすることはできません。
理想的な世界では、mp3ファイルのコピーを更新し、元のファイルのバイナリパッチを作成し、どういうわけか元のファイルとそのパッチへのシンボリックリンクを作成してペアになる新しい正規化された仮想ファイルを作成すると思います。ファイルシステムは透明です。
この問題に対する同様の解決策はありますか?
ベストアンサー1
いくつかのサーキットブレーカーファイルシステムを見てきましたが、最も簡単な作業方法は次のとおりです。ファイルシステム接続著者:ピーターシュライヤー他に何もない場合は、Cコードの実装が小さく、自己完結しているので、これは良い出発点になります。
デフォルトでは、すべてのファイルについてㅏ任意のソースディレクトリに「symlink」したいSあなたはファイルを作成します第二これには、必要なid3タグ情報(バージョン2)とマジックファイルのみが含まれています。氏ファイル名のどこかに「-concat-」文字が含まれています。このファイル氏名前が順番に含まれています。第二そしてㅏ。
concatfs プログラムの実行時にソースディレクトリを指定します。S2番目のランダムマウントポイントディレクトリ中サイズ。存在する中サイズと同じファイルがすべて表示されます。Sしかし、ファイルを読むとき氏あなたは接続を得るでしょう第二そしてㅏつまり、新しいタグの後に実際のmp3データが続きます。明らかに、マジックファイルだけが実際に存在するはずです。Sこれは、マジックファイルで絶対パスまたは相対パスを使用できるためです。
これは完璧ではありません。ㅏファイルにはid3v2タグ(ファイルの先頭)が含まれており、ファイルに追加されます。第二文書。さらに、id3v1タグ(ファイルの末尾)がまだ存在します。ただし、一部のCコーディングでは、これを抑制できます。ㅏ。また、マジック文字列「-concat-」を変更するのも簡単です。
以下は、concatfsをテストするために使用したコマンドです。fuse-devel
コードをコンパイルできるようにパッケージをインストールします。残りはルートを必要としません。
ダウンロードそしてソースを解凍してコンパイルします。
cd concatfs
gcc -Wall src/concatfs.c $(pkg-config fuse --cflags --libs) -o concatfs
2つのディレクトリを作成してコマンドを起動し、再生したいmp3ファイルをコピーしてすべてのタグを削除します。
mkdir -p ~/myfuse/src ~/myfuse/mnt
./concatfs ~/myfuse/src ~/myfuse/mnt # runs in background
cd ~/myfuse/src
cp ....sometestfile.mp3 try.mp3
id3v2 --delete-v1 try.mp3
id3v2 --delete-v2 try.mp3
id3info try.mp3
ダミーファイルであるマジックファイルを作成し、ダミーファイルにいくつかのid3v2タグを追加します。
echo -e 'dummy.mp3\ntry.mp3' > try.mp3-concat-.mp3
> dummy.mp3
id3v2 -2 -c 'my description:my comment' -a 'my artist' -A 'my album' -y '2010' -T 1/2 dummy.mp3
hexdump -C dummy.mp3
ls -l
2番目のディレクトリで同じファイルを見つけます。しかし、マジックファイルのサイズと内容は2つのファイルをリンクしたものです。
ls ../mnt/ -l
cat ../mnt/try.mp3-concat-.mp3 | wc -c
id3info ../mnt/try.mp3-concat-.mp3
mediainfo ../mnt/try.mp3-concat-.mp3
プログラムを終了すると、インストールをクリーンアップする必要があります。
fusermount -u ~/myfuse