Chuyển mã hàng loạt .flac -> .mp3: Làm thế nào để viết tập lệnh shell bảo tồn thông tin thẻ ID3?


9

Trong những tuần gần đây, tôi đã đi từ một cách tiếp cận khá 'thực hành' sang chuyển đổi .flac -> .mp3, sang một cách khác là 'thiết lập và quên đi'.

Bước đầu tiên là ngừng sử dụng giao diện người dùng GUI (Audacity với trình cắm LAME) và thay vào đó sử dụng phương pháp tôi đã nêu ở đây .

Bước thứ hai là tìm một tập lệnh bash shell để cho biết vòng lặp lệnh đó hoạt động đệ quy, cho phép các thư mục có nhiều thư mục con chứa các tệp .flac được chuyển mã trong một bước đơn giản. Câu trả lời đó đã được cung cấp bởi một người dùng tại Askubfox.com.

Bây giờ tôi muốn tìm hiểu làm thế nào để tinh chỉnh thêm mọi thứ để thông tin thẻ ID3 được lưu giữ. Các phương thức được liên kết với dữ liệu thẻ ID3 ở trên, để lại mức tối thiểu (nghĩa là chỉ còn lại trường tiêu đề).

Bất cứ ai có thể dạy tôi làm thế nào để viết một kịch bản shell như vậy?


Kịch bản shell đã được cập nhật, do đó:

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

Làm find . -name '*.flac' -exec ~/bin/flac2mp3 '{}' \;trong ~ / Desktop / stack cho đầu ra sau:

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 cho .flac ban đầu và kết quả .mp3 tương ứng:

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

(tức là không có gì);

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

.Lacac chắc chắn có thông tin thẻ. Tôi có thể xác minh điều này bằng cách mở EasyTAG. EasyTAG gọi đây là 'Thẻ FLAC Vorbis' nhưng 'Thẻ ID3' cho .mp3. Đây có phải là vấn đề?


Bạn đã thử sử dụng ffmpeg?
Xin chào71

Không, tôi không có. Không bao giờ thực sự sử dụng nó trước đây trên CLI để trung thực. Ai đó nói với tôi về kịch bản Perl này . Tôi sẽ thử vào ngày mai và báo cáo lại vì bây giờ đã muộn.
boehj

Câu trả lời:


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"

Cảm ơn Kambus! Đó là khá nhiều lừa. Phần lớn các thẻ tôi muốn hiện đang ở đó, mã hóa sau: Tiêu đề, Album, Nghệ sĩ, Năm, Số lượng theo dõi. Trường CD (1/1, 1/2, vv) đã không làm cho nó qua, và không có lĩnh vực này cho 'Theo dõi Số Trong '. Nhưng điều này không thực sự làm phiền tôi. Thật thú vị, tôi đã thử tập lệnh này trên một thư mục chứa nhạc 'Trip Hop'. Các thẻ được giữ trong chiến thuật nhưng kịch bản đã thay đổi Thể loại từ 'Trip Hop' thành 'Trip-Hop'. Vì vậy, tôi đoán nó dựa vào cơ sở dữ liệu của các thể loại đã biết ở đó. Cảm ơn rất nhiều một lần nữa cho đầu vào của bạn!
boehj

@pedrogent: Tôi rất vui vì tôi có thể giúp! Bạn có thể kiểm tra thủ công các thẻ khác với "metaflac --export-tags-to - file" và sử dụng chúng giống như $ TITLE và các thẻ khác, nhưng vấn đề là không có trường tương đương cho chúng trong id3 AFAIK. Có lẽ bạn có thể đặt chúng trong thẻ bình luận. Có, có một danh sách các thể loại được xác định trước: link
Kambus

Chào Kambus. Có, tôi nghĩ một phần của vấn đề ở đây là không có 'tiêu chuẩn' rõ ràng cho dữ liệu thẻ ID3. Thẻ Nhận xét được diễn giải rất khác nhau từ người chơi này sang người chơi khác (hoặc hoàn toàn không). Kịch bản của bạn là tuyệt vời. Cảm ơn một lần nữa.
boehj

1

Cách sử dụng mp3fs để mã hóa hàng loạt flac sang mp3

Thay vì sử dụng một chương trình để chuyển đổi các tập tin flac thành mp3, bạn có thể sử dụng mp3fs để trình bày chúng dưới dạng mp3 ảo và một chương trình có thể xếp hàng các công việc sao chép. Nó hoạt động tuyệt vời tốt cho tôi.

Tải xuống và cài đặt mp3fs và ultracopier:

sudo apt-get install mp3fs ultracopier

Tạo một cặp thư mục flac và mp3 cho mỗi mp3fs bạn muốn chạy. Tôi có một cpu lõi kép vì vậy tôi chạy hai. Nếu bạn giữ các thư mục flac trên phân vùng chứa các tệp flac của bạn, bạn có thể nhanh chóng di chuyển các thư mục đó. Phân vùng đó được gọi là "Storage" trên hệ thống của tôi.

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

Bạn có thể gắn các thư mục từ dòng lệnh hoặc bằng cách thêm chúng vào /etc/fstab. Bạn cũng có thể định cấu hình thuật toán bitrate và mã hóa của mp3 ảo tại thời điểm gắn kết. Tôi muốn mp3 có tốc độ bit không đổi 320kb / giây và khập khiễng có thể mất toàn bộ thời gian cần thiết để tạo ra bản mp3 tốt nhất có thể.

Trên dòng lệnh:

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

Nếu cầu chì phàn nàn, như

fusermount: không thể mở /etc/fuse.conf: Quyền bị từ chối
fusermount: tùy chọn allow_other chỉ được phép nếu 'user_allow_other' được đặt trong etc / fuse.conf

sau đó bỏ ghi chú user_allow_othertùy chọn trong /etc/fuse.confvà / hoặc làm cho nó dễ đọc với

sudo chmod 644 /etc/fuse.conf

Hoặc từ /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

Sau khi thêm các thư mục vào /etc/fstab, bạn có thể gắn kết chúng bằng cách sử dụng

sudo mount -a

Làm xong! Bắt đầu ultracopier. Nó sẽ đặt một biểu tượng chỉ báo trong bảng gnome của bạn hoặc bất cứ thứ gì bạn sử dụng. Nhấn vào đó, chọn thêm bản sao. Tôi đã làm điều đó hai lần để sử dụng hai lõi. Sử dụng trình duyệt tệp của bạn để di chuyển một số flac vào flac_1. Điều hướng đến thư mục mp3_1 và kéo mp3 của bạn đến một trong các cửa sổ ultracopier để bắt đầu hàng đợi sao chép. Ultracopier sẽ yêu cầu đích của các tập tin. Bây giờ bạn có một lõi bận mã hóa một loạt flacs sang mp3.

Để sử dụng lõi khác, di chuyển các tệp flac sang flac_2 và kéo mp3 từ mp3_2 sang cửa sổ ultracopier thứ hai.

Cập nhật: Thay vì ultracopier Bây giờ tôi đang sử dụng MiniCopier, nó dễ sử dụng hơn một chút. Xem bình luận bên dưới.


Dường như có một lỗi với danh sách thư mục với các phiên bản gần đây của mp3fs và fuse: sourceforge.net/tracker/
Ophidian

@Ophidian: Thú vị. Tôi đã chạy một số thử nghiệm trên một số máy sử dụng các bản phân phối khác nhau. Tôi đã cho họ chạy, trong vòng một phút, không có lỗi. Phiên bản mp3fs tôi đang sử dụng là như nhau, 0,30. Tôi đã sử dụng hạt nhân 2.3.38, 2.3.39 và 3.0.0, phiên bản libfuse 2.8.4 và 2.8.6. Libfuse được đề cập trong các báo cáo lỗi là 2.8.5. Điều đó gần như không đủ để kết luận cầu chì là thủ phạm, tuy nhiên, có thể đáng để thử một phiên bản khác nếu bạn gặp sự cố trong khi sử dụng 2.8.5. Có lẽ bạn đã thử mp3fs? Trên kernel nào và với libfuse nào? Bạn có gặp phải vấn đề gì không?
Arjan Drieman

Thay vì ultracopier Bây giờ tôi đang sử dụng MiniCopier , nó dễ sử dụng hơn một chút. Đây là một ứng dụng java, nó không yêu cầu cài đặt nhưng không cần JRE. Nó có một biểu tượng giỏ và một biểu tượng hộp. Bạn có thể kéo một hoặc nhiều nguồn từ trình quản lý tệp vào biểu tượng giỏ, thư mục đích vào biểu tượng hộp và đó là tất cả những gì bạn cần làm để thêm công việc sao chép vào hàng đợi. MiniCopier có một tab riêng cho các mục không thành công. MiniCopier sử dụng chu kỳ cpu ít hơn ultracopier, 1% so với 3% trên hệ thống của tôi. Điều đó có thể chỉ tiết kiệm 12 phút trên hàng đợi 10 giờ ;-)
Arjan Drieman

Nếu bạn muốn một hàng đợi sao chép dựa trên shell, tôi đã tìm thấy một giải pháp tại superuser . Nếu không có sự điều chỉnh, bạn sẽ không thể chạy 2 hàng đợi với nó và tôi không chắc nó sẽ làm gì với lỗi.
Arjan Drieman

0

id3cpkhông thể hoạt động vì FLAC không sử dụng ID3; thay vào đó, nó sử dụng các thẻ Vorbis.

avconvcó một tùy chọn để duy trì các thẻ thông qua chuyển đổi. Đó là loại hay thay đổi, giá trị của nó tùy thuộc vào sự kết hợp của codec , nhưng nó hoạt động như thế này trong trường hợp của bạn (phiên bản 9.16-6):

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

Áp dụng tất cả các tệp FLAC này trong một thư mục (đệ quy) dễ dàng như sau: (sử dụng bash)

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

Lưu ý rằng avconvsử dụng què tự động; tùy chọn khác tồn tại để kiểm soát chất lượng và không có điều gì. Kiểm tra man avconvchi tiết.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.