Mass .flac -> .mp3 kod dönüştürme: ID3 etiket bilgilerini koruyan bir kabuk betiği nasıl yazılır?


9

Son haftalarda .flac -> .mp3 kod dönüştürmesine oldukça 'uygulamalı' bir yaklaşımdan çok daha 'ayarlanıp' unutulmaya başladım.

İlk adım, bir GUI ön ucu (LAME eklentisine sahip Audacity) kullanmayı durdurmak ve bunun yerine burada özetlediğim yöntemi kullanmaktı .

İkinci adım, komut döngüsünün özyinelemeli çalışmasını söyleyen bir bash kabuk betiği bulmaktı. Bu cevap askubuntu.com'da bir kullanıcı tarafından sağlandı.

Şimdi ID3 etiket bilgilerinin korunmasını sağlamak için işleri daha da hassaslaştırmayı öğrenmek istiyorum. Yukarıdaki şerit ID3 etiketi verilerine bağlı yöntemler çıplak minimum bırakılır (yani yalnızca başlık alanı kalır).

Biri bana böyle bir kabuk betiği yazmayı öğretebilir mi?


Kabuk betiği bu şekilde güncellendi:

#!/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 '{}' \;~ / Desktop / stack yapmak aşağıdaki çıktıyı verir:

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 orijinal .flac ve sonuçtaki .mp3 sırasıyla:

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

(yani hiçbir şey);

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

.Flac kesinlikle etiket bilgisine sahiptir. Bunu EasyTAG'ı açarak doğrulayabilirim. EasyTAG bunu .mp3 için 'FLAC Vorbis Etiketi', ancak 'ID3 Etiketi' olarak ifade eder. Sorun bu mu?


Kullanmayı denedin ffmpegmi?
Merhaba71

Hayır. Dürüst olmak gerekirse daha önce hiç CLI üzerinde kullanmadım. Birisi bana bu Perl senaryosundan bahsetti . Bunu yarın deneyeceğim ve şimdi geç olduğu için rapor vereceğim.
boehj

Yanıtlar:


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"

Teşekkürler Kambus! Bu hemen hemen hile yapar. İstediğim etiketlerin çoğunluğu şimdi orada, kod dönüştürme sonrası: Başlık, Albüm, Sanatçı, Yıl, Parça Numarası. CD alanı (1/1, 1/2, vb) bunu genelinde yapılan ve ne 'Parça Numarası alanı vardır henüz Of '. Ama bu beni gerçekten rahatsız etmiyor. İlginç bir şekilde bu komut dosyasını 'Trip Hop' müziği içeren bir dizinde denedim. Etiketler dokunaklı tutuldu, ancak senaryo Tür'ü 'Trip Hop' yerine 'Trip-Hop' olarak değiştirdi. Bu yüzden orada bilinen türlerin bir veritabanına dayanıyor sanırım. Girişiniz için tekrar çok teşekkürler!
Ocak

@pedrogent: Yardımcı olabileceğime sevindim! "Metaflac --export-tags-to-file" ile diğer etiketlerin ne olduğunu manuel olarak kontrol edebilir ve bunları $ TITLE ve diğerleriyle aynı şekilde kullanabilirsiniz, ancak sorun id3 AFAIK'te onlar için eşdeğer alan olmamasıdır. Belki onları yorum etiketine koyabilirsiniz. Evet, önceden tanımlanmış bir tür listesi var: bağlantı
Kambus

Merhaba Kambus. Evet, buradaki sorunun bir kısmı, ID3 etiketi verileri için net bir 'standart' olmadığıdır. Yorum etiketi, oynatıcıdan oyuncuya çok farklı yorumlanır (veya hiç yorumlanmaz). Senaryonuz harika. Tekrar teşekkürler.
11'da boehj

1

Mp3 flac kitle kodlamak için mp3fs nasıl kullanılır

Flac dosyalarını mp3'e dönüştürmek için bir program kullanmak yerine, mp3fs'yi sanal mp3'ler olarak sunmak için ve kopyalama işlerini sıralayabilen bir program kullanabilirsiniz. Benim için harika çalışıyor.

Mp3fs ve ultracopier'ı indirin ve yükleyin:

sudo apt-get install mp3fs ultracopier

Çalıştırmak istediğiniz her mp3fs için bir çift flac ve mp3 dizini oluşturun. Çift çekirdekli bir işlemcim var, bu yüzden iki tane çalıştırıyorum. Flac dizinlerini flac dosyalarınızın bulunduğu bölümde tutarsanız, bunları hızlı bir şekilde taşıyabilirsiniz. Bu bölüme sistemimde "Depolama" denir.

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

Dizinleri komut satırından veya dizinine ekleyerek bağlayabilirsiniz /etc/fstab. Sanal mp3'lerin bit hızını ve kodlama algoritmasını bağlama zamanında da yapılandırabilirsiniz. Sabit bit hızı 320kbps olan mp3'leri istiyorum ve topal, mümkün olan en iyi mp3'ü üretmek için her zaman alabilir.

Komut satırında:

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

Sigorta şikayet ederse,

fusermount: /etc/fuse.conf açılamadı: İzin reddedildi
fusermount: seçenek allow_other, yalnızca etc / fuse.conf içinde 'user_allow_other' ayarlanmışsa izin verilir

ardından user_allow_otherseçeneğin açıklamasını kaldırın /etc/fuse.confve / veya

sudo chmod 644 /etc/fuse.conf

Veya /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

Dizinleri ekledikten sonra /etc/fstab,

sudo mount -a

Bitti! Ultra kopyayı başlatın. GNOME panelinize veya kullandığınız her neyse bir gösterge simgesi yerleştirir. Tıklayın, kopya ekle'yi seçin. Bunu iki çekirdek kullanmak için iki kez yaptım. Bazı klavyeleri flac_1 klasörüne taşımak için dosya tarayıcınızı kullanın. Mp3_1 dizinine gidin ve bir kopyalama kuyruğu başlatmak için mp3'lerinizi ultra kopyalayıcı pencerelerden birine sürükleyin. Ultracopier dosyaların hedefini soracaktır. Artık bir çekirdeği mp3'e dönüştüren bir çekirdek var.

Diğer çekirdeği kullanmak için flac dosyalarını flac_2'ye taşıyın ve mp3'leri mp3_2'den ikinci ultra kopya penceresine sürükleyin.

Güncelleme: Ultracopier yerine şimdi MiniCopier kullanıyorum, kullanımı biraz daha kolay. Aşağıdaki yorumlara bakın.


Mp3fs ve fuse'in son sürümleri ile dizin listelemesinde bir hata var gibi görünüyor: sourceforge.net/tracker/…
Ophidian

@Ophidian: İlginç. Farklı dağıtımlar kullanan bazı makinelerde bazı testler yaptım. Onları bir dakika içinde, hatasız olarak çalıştırdım. Kullandığım mp3fs sürümü aynı, 0.30. 2.3.38, 2.3.39 ve 3.0.0 çekirdeklerini, libfuse 2.8.4 ve 2.8.6 sürümlerini kullandım. Hata raporlarında belirtilen libfuse 2.8.5'tir. Bu, sigortanın suçlu olduğu sonucuna varmak için yeterli değildir, ancak 2.8.5 kullanırken sorun yaşarsanız farklı bir sürümü denemeye değer olabilir. Belki mp3fs denediniz mi? Hangi çekirdek üzerinde ve hangi libfuse ile? Herhangi bir sorunla karşılaştın mı?
Arjan Drieman

Ultracopier yerine şimdi MiniCopier kullanıyorum , kullanımı biraz daha kolay. Bu bir java uygulaması, kurulum gerektirmez, ancak bir JRE'ye ihtiyaç duyar. Bir sepet simgesi ve bir kutu simgesi vardır. Bir veya daha fazla kaynağı bir dosya yöneticisinden sepet simgesine, bir hedef dizini kutu simgesine sürükleyebilirsiniz ve sıraya bir kopyalama işi eklemek için yapmanız gereken tek şey budur. MiniCopier, başarısız öğeler için ayrı bir sekmeye sahiptir. MiniCopier, ultraopierden daha az cpu çevrimi kullanıyor, sistemimde% 1 ve% 3. Bu, 10 saatlik bir kuyrukta 12 dakika
kazanabilir

Kabuk tabanlı bir kopya kuyruğu istiyorsanız, süper kullanıcıda bir çözüm buldum . Ayarlamalar olmadan, onunla 2 kuyruk çalıştıramazsınız ve hatalarla ne yapacağından emin değilim.
Arjan Drieman

0

id3cpFLAC ID3 kullanmadığından çalışamaz; bunun yerine Vorbis etiketlerini kullanır.

avconvdönüşüm yoluyla etiketleri koruma seçeneğine sahiptir. Bu bir tür kararsızlık, değeri kodeklerin kombinasyonuna bağlı , ancak sizin durumunuzda böyle çalışır (sürüm 9.16-6):

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

Tüm FLAC dosyalarını bir klasöre (yinelemeli olarak) uygulamak şu kadar kolaydır: (kullanarak bash)

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

avconvTopalın otomatik olarak kullanıldığını unutmayın ; kaliteyi kontrol etmek için başka seçenekler de mevcuttur. man avconvAyrıntıları kontrol edin .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.