Mass .flac -> .mp3 การแปลงรหัส: จะเขียนเชลล์สคริปต์ที่เก็บรักษาข้อมูลแท็ก ID3 ได้อย่างไร


9

ในช่วงไม่กี่สัปดาห์ที่ผ่านมาฉันได้เปลี่ยนวิธีการแปลงไฟล์ .flac -> .mp3 ไปเป็นชุดที่ 'ตั้งค่าและลืม' ได้มากพอสมควร

ขั้นตอนแรกคือการหยุดการใช้ส่วนหน้า GUI (Audacity กับปลั๊กอิน LAME) และใช้วิธีที่ฉันอธิบายไว้ที่นี่แทน

ขั้นตอนที่สองคือการค้นหา bash shell script ที่จะบอกให้วนรอบคำสั่งทำงานซ้ำโดยอนุญาตให้ไดเรกทอรีที่มีไดเรกทอรีย่อยมากมายที่มีไฟล์. flac ทำการแปลงรหัสในขั้นตอนเดียว ว่าคำตอบที่ได้รับจากผู้ใช้ใน 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 '{}' \;ใน ~ / Desktop / stack ให้ผลลัพธ์ต่อไปนี้:

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' แต่ 'แท็ก ID3' สำหรับไฟล์. mp3 นี่เป็นปัญหาหรือไม่


คุณเคยลองใช้ffmpeg?
Hello71

ไม่ฉันยังไม่ได้ ไม่เคยใช้มันมาก่อนบน CLI เพื่อความซื่อสัตย์ มีคนบอกฉันเกี่ยวกับเรื่องนี้สคริปต์ Perl ฉันจะลองในวันพรุ่งนี้และรายงานกลับมาตอนนี้
boehj

คำตอบ:


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! นั่นเป็นกลอุบายที่ค่อนข้างสวย แท็กส่วนใหญ่ที่ฉันต้องการอยู่ในขณะนี้มีรหัสหลัง: ชื่อ, อัลบั้ม, ศิลปิน, ปี, หมายเลขการติดตาม สนามซีดี (1/1, 1/2, ฯลฯ ) ไม่ได้ทำมันข้ามและไม่ได้มีสนามสำหรับ 'Track จำนวนของ ' แต่นี่ไม่ได้รบกวนฉันจริงๆ น่าสนใจฉันลองใช้สคริปต์นี้ในไดเรกทอรีที่มีเพลง 'Trip Hop' แท็กถูกเก็บไว้อย่างดี แต่สคริปต์เปลี่ยนประเภทจาก 'Trip Hop' เป็น 'Trip-Hop' ดังนั้นฉันคิดว่ามันขึ้นอยู่กับฐานข้อมูลของประเภทที่รู้จักกันที่นั่น ขอบคุณมากสำหรับการป้อนข้อมูลของคุณอีกครั้ง!
boehj

@pedrogent: ฉันดีใจที่ฉันช่วยได้! คุณสามารถตรวจสอบแท็กอื่นด้วยตนเองด้วย "metaflac --export-tags-to-file" และใช้ด้วยวิธีเดียวกันกับ $ TITLE และแท็กอื่น ๆ แต่ปัญหาคือไม่มีฟิลด์ที่เทียบเท่าสำหรับ id3 AFAIK บางทีคุณสามารถใส่ไว้ในแท็กความคิดเห็น ใช่มีรายการประเภทที่กำหนดไว้ล่วงหน้า: ลิงก์
Kambus

สวัสดีคัมบัส ใช่ฉันคิดว่าส่วนหนึ่งของปัญหาที่นี่คือว่าไม่มี 'มาตรฐาน' สำหรับข้อมูลแท็ก ID3 แท็กความคิดเห็นถูกตีความแตกต่างกันมากจากผู้เล่นไปยังผู้เล่น (หรือไม่เลย) สคริปต์ของคุณยอดเยี่ยม ขอบคุณอีกครั้ง.
boehj

1

วิธีใช้ mp3fs เพื่อเข้ารหัส encode flac เป็น mp3

แทนที่จะใช้โปรแกรมแปลงไฟล์ flac เป็น mp3 คุณสามารถใช้ mp3fs เพื่อแสดงไฟล์เหล่านั้นในรูปของ mp3 เสมือนและโปรแกรมที่สามารถคัดลอกงานได้ มันใช้งานได้ดีเยี่ยมสำหรับฉัน

ดาวน์โหลดและติดตั้ง mp3fs และ ultracopier:

sudo apt-get install mp3fs ultracopier

สร้างไดเรกทอรี flac และ mp3 คู่หนึ่งสำหรับแต่ละ mp3fs ที่คุณต้องการเรียกใช้ ฉันมีซีพียูดูอัลคอร์ดังนั้นฉันจึงรันสอง หากคุณเก็บไดเรกทอรี flac ไว้ในพาร์ติชั่นที่ไฟล์ flac ของคุณอยู่คุณสามารถย้ายไฟล์เหล่านั้นได้อย่างรวดเร็ว พาร์ติชันนั้นเรียกว่า "ที่เก็บข้อมูล" บนระบบของฉัน

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

/etc/fstabคุณสามารถติดไดเรกทอรีจากบรรทัดคำสั่งหรือโดยการเพิ่มให้พวกเขา คุณสามารถกำหนดค่าบิตเรตและอัลกอริธึมการเข้ารหัสของ mp3 เสมือนในเวลาเมานต์ ฉันต้องการ mp3 ที่มีอัตราบิตคงที่ 320kbps และง่อยอาจต้องใช้เวลาตลอดเวลาในการสร้าง mp3 ที่ดีที่สุดเท่าที่จะทำได้

บน commandline:

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 อนุญาตเฉพาะเมื่อตั้งค่า '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

ทำ! เริ่ม ultracopier มันจะวางไอคอนตัวบ่งชี้ในแผงคำพังเพยของคุณหรืออะไรก็ตามที่คุณใช้ คลิกที่มันเลือกเพิ่มสำเนา ฉันทำอย่างนั้นสองครั้งเพื่อใช้สองแกน ใช้ไฟล์เบราว์เซอร์ของคุณเพื่อย้าย flacs ไปยัง flac_1 นำทางไปยังไดเรกทอรี mp3_1 และลาก mp3 ของคุณไปที่หน้าต่าง ultracopier อันใดอันหนึ่งเพื่อเริ่มคิวการคัดลอก Ultracopier จะถามถึงปลายทางของไฟล์ ตอนนี้คุณมีหนึ่งคอร์ไม่ว่างเข้ารหัสชุดของ flacs เป็น mp3

หากต้องการใช้แกนอื่น ๆ ให้ย้ายไฟล์ flac ไปที่ flac_2 และลาก mp3 จาก mp3_2 ไปที่หน้าต่าง ultracopier ที่สอง

อัปเดต: แทนที่จะเป็น Ultracopier ตอนนี้ฉันใช้ MiniCopier มันใช้ง่ายกว่านิดหน่อย ดูความคิดเห็นด้านล่าง


ดูเหมือนว่าจะมีข้อผิดพลาดในรายการไดเรกทอรีที่มี mp3fs และฟิวส์รุ่นล่าสุด: sourceforge.net/tracker/ …
Ophidian

@Ophidian: น่าสนใจ ฉันวิ่งทดสอบบนเครื่องบางเครื่องโดยใช้การแจกแจงที่ต่างกัน ฉันให้พวกเขาทำงานภายในหนึ่งนาทีโดยไม่มีข้อผิดพลาดใด ๆ เวอร์ชัน mp3fs ที่ฉันใช้เหมือนกันคือ 0.30 ฉันใช้เคอร์เนล 2.3.38, 2.3.39 และ 3.0.0, libfuse เวอร์ชัน 2.8.4 และ 2.8.6 Libfuse ที่กล่าวถึงในรายงานข้อผิดพลาดคือ 2.8.5 ยังไม่พอที่จะสรุปว่าฟิวส์คือตัวการ แต่อาจจะคุ้มค่าที่จะลองใช้เวอร์ชั่นอื่นหากคุณพบปัญหาขณะใช้งาน 2.8.5 คุณอาจลอง mp3fs หรือเปล่า? เคอร์เนลตัวไหนและ libfuse ตัวไหน? คุณพบปัญหาหรือไม่?
Arjan Drieman

แทนที่จะเป็น ultracopier ตอนนี้ฉันใช้MiniCopierมันใช้ง่ายกว่านิดหน่อย มันเป็นแอป java มันไม่ต้องติดตั้ง แต่ต้องการ JRE มันมีไอคอนตะกร้าและไอคอนกล่อง คุณสามารถลากแหล่งข้อมูลอย่างน้อยหนึ่งแหล่งจากตัวจัดการไฟล์ไปยังไอคอนตะกร้าไดเรกทอรีปลายทางลงบนไอคอนกล่องและนั่นคือทั้งหมดที่คุณต้องทำเพื่อเพิ่มงานคัดลอกลงในคิว MiniCopier มีแท็บแยกสำหรับรายการที่ล้มเหลว MiniCopier ใช้ cpu cycles น้อยกว่า ultracopier, 1% เทียบกับ 3% ในระบบของฉัน นั่นอาจช่วยให้ประหยัดเวลา 12 นาทีในคิว 10 ชั่วโมง ;-)
Arjan Drieman

หากคุณต้องการเปลือกตามคิวสำเนาผมพบว่าวิธีการแก้ปัญหาที่superuser หากไม่มีการปรับเปลี่ยนคุณจะไม่สามารถเรียกใช้ 2 คิวได้และฉันไม่แน่ใจว่าจะทำอย่างไรกับข้อผิดพลาด
Arjan Drieman

0

id3cpไม่สามารถทำงานได้เนื่องจาก FLAC ไม่ได้ใช้ 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

โปรดทราบว่าavconvใช้ง่อยโดยอัตโนมัติ มีตัวเลือกเพิ่มเติมเพื่อควบคุมคุณภาพและอะไรก็ตาม ตรวจสอบman avconvรายละเอียด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.