Làm cách nào để chuyển đổi .flac thành .mp3 bằng ffmpeg, giữ tất cả siêu dữ liệu (đó là chuyển đổi nhận xét Vorbis trong tệp .flac thành siêu dữ liệu ID3v2 của .mp3)?
Làm cách nào để chuyển đổi .flac thành .mp3 bằng ffmpeg, giữ tất cả siêu dữ liệu (đó là chuyển đổi nhận xét Vorbis trong tệp .flac thành siêu dữ liệu ID3v2 của .mp3)?
Câu trả lời:
Lệnh sau giữ chất lượng cao trên .mp3 (320 kbps) và siêu dữ liệu từ tệp .flac được chuyển đổi sang định dạng ID3v2, có thể được bao gồm trong tệp .mp3:
ffmpeg -i input.flac -ab 320k -map_metadata 0 -id3v2_version 3 output.mp3
ffmpeg
3.2 tự động sao chép siêu dữ liệu vào ID3v2 từ FLAC mà không cần chỉ định -map_metadata 0 -id3v2_version 3
, mặc dù nó không sao chép vào thẻ ID3v1. Tôi sử dụng một công cụ riêng cho việc đó.
Câu trả lời hoàn hảo ở trên. Tôi sử dụng nó cùng với tìm để thêm tất cả các tệp FLAC trong một cây con vào iTunes bằng lệnh này
find . -name "*.flac" -exec ffmpeg -i {} -ab 160k -map_metadata 0 -id3v2_version 3 {}.mp3 \;
Để tự động thêm các tệp kết quả vào iTunes, hãy lấy thư mục nhập iTunes với
find ~/Music/ -name "Automatically Add*"
kết quả ví dụ
/Users/sir/Music//iTunes/iTunes Media/Automatically Add to iTunes.localized
Sau đó chạy vd
find . -name "*.mp3" -exec mv {} "/Users/sir/Music//iTunes/iTunes Media/Automatically Add to iTunes.localized/" \;
Để tự động thêm tất cả các bản nhạc đã chuyển đổi vào iTunes.
Nếu bạn muốn tiết kiệm một chút dung lượng, hãy thử đề xuất của hydrogenaud.io :
Chất lượng rất cao: HiFi, nhà, hoặc nghe yên tĩnh, với kích thước tập tin tốt nhất
-V0 (~245 kbps)
,-V1 (~225 kbps)
,-V2 (~190 kbps)
hoặc-V3 (~175 kbps)
được khuyến khích. Các cài đặt VBR này thường sẽ tạo ra kết quả minh bạch. Sự khác biệt có thể nghe được giữa các giá trị đặt trước này có thể tồn tại, nhưng rất hiếm.
Nguồn: http://wiki.hydrogenaud.io/index.php?title=LAME
Nếu bạn muốn sử dụng tùy chọn này trong ffmpeg, bạn nên sử dụng -q:a 0
bí danh.
Kiểm soát chất lượng bằng
-qscale:a
(hoặc bí danh-q:a
). Giá trị dành riêng cho bộ mã hóa, vì vậy, đối với libmp3lame, phạm vi là 0-9 trong đó giá trị thấp hơn là chất lượng cao hơn. 0-3 thường sẽ tạo ra kết quả trong suốt, 4 (mặc định) phải gần với độ trong suốt theo cảm nhận và 6 tạo ra chất lượng "chấp nhận được". Tùy chọn-qscale:a
được ánh xạ đến-V
tùy chọn trong công cụ giao diện dòng lệnh què độc lập.
Nguồn: https://trac.ffmpeg.org/wiki/Encode/MP3
Nếu bạn cũng muốn thẻ meta ID3v1, bạn nên thêm -write_id3v1 1
tham số.
Vì vậy, lệnh cuối cùng của tôi là:
ffmpeg.exe -y -i input.flac -codec:a libmp3lame -q:a 0 -map_metadata 0 -id3v2_version 3 -write_id3v1 1 output.mp3
Tôi đang thử nghiệm lệnh sau để chuyển đổi infile.flac
tệp thành outfile.mp3
:
ffmpeg -i infile.flac -q:a 0 outfile.mp3
Kể từ Ubuntu 16.04, lệnh trên dường như sao chép (hầu hết? Tất cả?) Siêu dữ liệu.
-q:a 0
yêu ffmpeg
cầu sử dụng VBR chất lượng cao nhất.
Tuy nhiên, việc ffmpeg
chuyển mã ảnh bìa album của tôi từ jpeg
sang png
, điều này đã làm tăng kích thước của ảnh bìa.
Stream mapping:
Stream #0:1 -> #0:0 (mjpeg (native) -> png (native))
Stream #0:0 -> #0:1 (flac (native) -> mp3 (libmp3lame))
(Tôi đoán loại chuyển đổi ở trên có ý nghĩa với cách thức ffmpeg
hoạt động .)
Sau khi tìm hiểu kỹ, tôi đã tìm thấy -c:v copy
tùy chọn chỉ định rằng luồng video nên được sao chép, thay vì chuyển mã. Lệnh đầy đủ là:
ffmpeg -i infile.flac -c:v copy -q:a 0 outfile.mp3
Lệnh trên dẫn đến:
Stream mapping:
Stream #0:1 -> #0:0 (copy)
Stream #0:0 -> #0:1 (flac (native) -> mp3 (libmp3lame))
Để chuyển đổi đệ quy trong mp3 tất cả các tệp flac trong các thư mục lồng nhau, tôi đã sử dụng lệnh này:
find '~/Music/' -iname '*.flac' -exec bash -c 'D=$(dirname "{}"); B=$(basename "{}"); mkdir "$D/mp3/"; ffmpeg -i "{}" -ab 320k -map_metadata 0 -id3v2_version 3 -acodec libmp3lame "$D/mp3/${B%.*}.mp3"' \;
Nó sẽ tạo một thư mục có tên "mp3" bên trong thư mục chứa các tệp flac và bên trong thư mục mp3, nó sẽ lưu các tệp mp3 tương đối với bitrate 320kbps mà không giữ phần mở rộng tệp cũ trong tên.
$file
như thế nào "$file"
.
:r
dường như là một công cụ zsh
sửa đổi, không hoạt động bash
. Trong Bash bạn có thể thay thế "${file:r}.mp3"
bằng "${file%.flac}.mp3"
.
${file%.*}
Tôi biết rằng điều này đã không được yêu cầu, nhưng xem xét rằng một trong những lý do khiến điều này được thực hiện (ít nhất đó là điều tôi muốn làm) là để nhạc có thể được nhập vào Apple iTunes không hỗ trợ FLAC. Trong trường hợp này, việc chuyển đổi FLAC sang định dạng không mất dữ liệu của Apple, m4a sẽ hợp lý hơn. Tôi đã sử dụng lệnh này để chuyển đổi tất cả các tệp trong thư mục hiện tại, trong khi vẫn giữ lại các kích thước tệp tương tự.
find . -name "*.flac" -exec ffmpeg -i {} -map_metadata 0 -acodec alac {}.m4a \;
Tập lệnh flac2mp3.sh này sử dụng ffmpeg
để chuyển đổi một cây thư mục của các tệp FLAC thành một cây thư mục khác của các tệp MP3. Ảnh bìa được bao gồm, khi có mặt. Bạn có thể đặt một CORES
biến để tạo các công việc nền để chuyển đổi một số tệp cùng một lúc.
ffmpeg
câu hỏi sử dụng cli tại Super User . Stack Overflow chỉ dành cho các câu hỏi liên quan đến lập trình. Ngoài ra, FLAC chính thức chỉ hỗ trợ bình luận Vorbis , vì vậy tôi giả sử bạn muốn chuyển đổi sang ID3v2 thay vì "giữ".