Mass .flac -> .mp3 transcoding: Bagaimana cara menulis skrip shell yang mempertahankan informasi tag ID3?

9

Dalam beberapa minggu terakhir saya telah beralih dari pendekatan 'hands-on' ke .flac -> .mp3 transcoding, menjadi pendekatan yang jauh lebih 'diatur & dilupakan'.

Langkah pertama adalah berhenti menggunakan ujung depan GUI (Audacity dengan plug-in LAME) dan alih-alih menggunakan metode yang saya uraikan di sini .

Langkah kedua adalah menemukan skrip bash shell yang akan memberi tahu perintah loop untuk bekerja secara rekursif, memungkinkan direktori dengan banyak subdirektori yang berisi file .flac untuk ditranskode dalam satu langkah sederhana. Itu jawaban diberikan oleh pengguna di askubuntu.com.

Sekarang saya ingin belajar bagaimana memperbaiki lebih lanjut sehingga informasi tag ID3 dipertahankan. Metode yang ditautkan ke data tag ID3 strip di atas, meninggalkan minimum (yaitu hanya bidang judul tetap).

Adakah yang bisa mengajari saya cara menulis skrip shell seperti itu?


Script shell telah diperbarui demikian:

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

Melakukan find . -name '*.flac' -exec ~/bin/flac2mp3 '{}' \;di ~ / Desktop / stack memberikan output sebagai berikut:

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 untuk .flac dan resultan .mp3 asli, masing-masing memberikan:

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

(yaitu tidak ada);

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

.Flac pasti memiliki informasi tag. Saya dapat memverifikasi ini dengan membuka EasyTAG. EasyTAG menyebut ini sebagai 'FLAC Vorbis Tag' tetapi 'ID3 Tag' untuk .mp3. Apakah ini masalahnya?

boehj
sumber
Sudahkah Anda mencoba menggunakan ffmpeg?
Hello71
Tidak, belum. Tidak pernah benar-benar menggunakannya sebelumnya pada CLI untuk jujur. Seseorang memberi tahu saya tentang skrip Perl ini . Saya akan mencobanya besok dan melaporkan kembali karena sudah terlambat sekarang.
boehj

Jawaban:

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"
Kambus
sumber
Kambus terima kasih! Cukup banyak caranya. Mayoritas tag yang saya inginkan sekarang ada di sana, post-transcode: Judul, Album, Artis, Tahun, Nomor Track. Bidang CD (1/1, 1/2, dll.) Belum sampai, dan tidak ada bidang untuk 'Track Number Of '. Tapi ini tidak terlalu mengganggu saya. Menariknya saya mencoba skrip ini pada direktori yang berisi musik 'Trip Hop'. Tag-tag itu disimpan dalam kebijaksanaan tetapi skrip mengubah Genre dari 'Trip Hop' menjadi 'Trip-Hop'. Jadi saya kira itu bergantung pada database genre yang dikenal di sana. Sekali lagi terima kasih banyak atas masukan Anda!
boehj
@pedrogent: Saya senang saya bisa membantu! Anda dapat memeriksa secara manual apa saja tag lain dengan "metaflac --export-tag-to-file" dan menggunakannya dengan cara yang sama seperti $ TITLE dan yang lainnya, tetapi masalahnya adalah tidak ada bidang yang setara untuk mereka dalam id3 AFAIK. Mungkin Anda bisa meletakkannya di tag komentar. Ya, ada daftar genre yang telah ditentukan: link
Kambus
Hai Kambus. Ya saya pikir bagian dari masalah di sini adalah bahwa tidak ada 'standar' yang jelas untuk data tag ID3. Tag Komentar ditafsirkan sangat berbeda dari pemain ke pemain (atau tidak sama sekali). Script Anda luar biasa. Terima kasih lagi.
boehj
1

Cara menggunakan mp3fs ke mass encode flac ke mp3

Alih-alih menggunakan program untuk mengonversi file flac ke mp3, Anda dapat menggunakan mp3fs untuk menyajikannya sebagai mp3 virtual, dan sebuah program yang dapat mengantre pekerjaan menyalin. Ini bekerja sangat baik untuk saya.

Unduh dan instal mp3fs dan ultracopier:

sudo apt-get install mp3fs ultracopier

Buat sepasang direktori flac dan mp3 untuk setiap mp3fs yang ingin Anda jalankan. Saya memiliki dual core cpu jadi saya jalankan dua. Jika Anda menyimpan direktori flac di partisi tempat file flac berada, Anda dapat dengan cepat memindahkannya. Partisi itu disebut "Storage" di sistem saya.

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

Anda dapat memasang direktori dari baris perintah atau dengan menambahkannya ke /etc/fstab. Anda juga dapat mengkonfigurasi bitrate dan algoritma enkode dari mp3 virtual saat mount. Saya ingin mp3 dengan bitrate konstan 320kbps, dan lumpuh dapat mengambil semua waktu yang diperlukan untuk menghasilkan mp3 terbaik yang mungkin bisa.

Di baris perintah:

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

Jika sekering mengeluh, seperti

fusermount: gagal membuka /etc/fuse.conf: Izin ditolak
fusermount: opsi allow_other hanya diperbolehkan jika 'user_allow_other' diset di etc / fuse.conf

kemudian batalkan komentar pada user_allow_otheropsi /etc/fuse.conf, dan / atau buat opsi itu dapat dibaca

sudo chmod 644 /etc/fuse.conf

Atau dari /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

Setelah menambahkan direktori /etc/fstab, Anda dapat memasangnya dengan menggunakan

sudo mount -a

Selesai! Mulai ultracopier. Ini akan menempatkan ikon indikator di panel gnome Anda atau apa pun yang Anda gunakan. Klik itu, pilih add copy. Saya melakukan itu dua kali untuk menggunakan dua core. Gunakan browser file Anda untuk memindahkan beberapa flac ke flac_1. Arahkan ke direktori mp3_1, dan seret mp3 Anda ke salah satu jendela ultracopier untuk memulai antrian salin. Ultracopier akan menanyakan tujuan file. Anda sekarang memiliki satu inti sibuk meng-encode sekumpulan flacs ke mp3.

Untuk menggunakan inti lainnya, pindahkan file flac ke flac_2, dan seret mp3 dari mp3_2 ke jendela ultracopier kedua.

Pembaruan: Alih-alih ultracopier, saya sekarang menggunakan MiniCopier, ini sedikit lebih mudah digunakan. Lihat komentar di bawah.

Arjan Drieman
sumber
Tampaknya ada bug dengan daftar direktori dengan versi terbaru dari mp3fs dan fuse: sourceforge.net/tracker/…
Ophidian
@Ophidian: Menarik. Saya menjalankan beberapa tes pada beberapa mesin menggunakan distribusi yang berbeda. Saya membuat mereka berjalan, masing-masing dalam satu menit, tanpa kesalahan. Versi mp3fs yang saya gunakan sama, 0.30. Saya telah menggunakan kernel 2.3.38, 2.3.39, dan 3.0.0, versi libfuse 2.8.4 dan 2.8.6. Libfuse yang disebutkan dalam laporan bug adalah 2.8.5. Itu hampir tidak cukup untuk menyimpulkan sekering adalah pelakunya, namun, mungkin ada baiknya mencoba versi yang berbeda jika Anda mengalami masalah saat menggunakan 2.8.5. Apakah Anda mungkin mencoba mp3fs? Di kernel mana dan dengan libfuse yang mana? Apakah Anda menemui masalah?
Arjan Drieman
Alih-alih ultracopier saya sekarang menggunakan MiniCopier , ini sedikit lebih mudah digunakan. Ini adalah aplikasi java, tidak memerlukan instalasi tetapi membutuhkan JRE. Ini memiliki ikon keranjang dan ikon kotak. Anda dapat menyeret satu atau beberapa sumber dari manajer file ke ikon keranjang, direktori tujuan ke ikon kotak, dan hanya itu yang perlu Anda lakukan untuk menambahkan pekerjaan salin ke antrian. MiniCopier memiliki tab terpisah untuk item yang gagal. MiniCopier menggunakan siklus cpu lebih sedikit daripada ultracopier, 1% vs 3% pada sistem saya. Itu mungkin hanya menghemat 12 menit dalam antrian 10 jam ;-)
Arjan Drieman
Jika Anda ingin antrian salin berbasis shell, saya menemukan solusi di superuser . Tanpa penyesuaian, Anda tidak akan dapat menjalankan 2 antrian dengannya, dan saya tidak yakin apa yang akan dilakukannya dengan kesalahan.
Arjan Drieman
0

id3cptidak dapat bekerja karena FLAC tidak menggunakan ID3; ia menggunakan tag Vorbis sebagai gantinya.

avconvmemiliki opsi untuk memelihara tag melalui konversi. Agak berubah-ubah, nilainya tergantung pada kombinasi codec , tetapi berfungsi seperti ini dalam kasus Anda (versi 9.16-6):

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

Menerapkan ini semua file FLAC dalam folder (secara rekursif) semudah ini: (menggunakan bash)

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

Catatan yang avconvmenggunakan lumpuh secara otomatis; opsi lebih lanjut ada untuk mengontrol kualitas dan yang lainnya. Periksa man avconvdetailnya.

Raphael
sumber