Chuyển đổi .flac thành .mp3 bằng ffmpeg, giữ nguyên tất cả siêu dữ liệu


88

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)?


5
Xin lưu ý rằng lần sau, bạn nên đặt ffmpegcâ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ữ".
llogan

Ok, tôi đã sửa câu hỏi của mình. Tôi hỏi ở đây vì tôi đã thấy những câu hỏi như thế này trên StackOverflow (ví dụ: điều này hoặc điều này ) và cho rằng việc chia sẻ kiến ​​thức của tôi có thể thú vị. Ngoài ra, tôi thấy rằng có một thẻ ffmpeg , vậy tại sao không chia sẻ giải pháp của tôi ở đây? ffmpeg được rất nhiều nhà phát triển sử dụng trong rất nhiều ứng dụng.
Vito Gentile

3
Các ffmpeg thẻ nói, "Các câu hỏi về việc sử dụng tương tác của các công cụ dòng lệnh FFmpeg nên được hỏi về Super User.". Đó không phải là vấn đề lớn, nhưng tôi chỉ muốn chỉ ra vì có quá nhiều câu hỏi lạc đề ở đây theo ý kiến ​​của tôi.
llogan 30/09

Câu trả lời:


152

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

1
Cần lưu ý rằng "ffmpeg" có thể cần được thay thế bằng "avconv".
shockburner

5
FWIW ffmpeg3.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 đó.
Đài

1
lời bài hát vẫn không được sao chép mặc dù
user151496

1
Nó chia flac nếu có mấy phần?
Artyom

1
@Artyom Bạn có lẽ nên có gợi ý tập tin cùng với bạn flac nơi các điểm chia được đánh dấu. Nếu vậy, bạn có thể sử dụng shnsplit (console) hoặc flacon (GUI) để chia nhỏ tệp của mình và chuyển đổi các phần thành mp3. Nếu bạn chỉ có một flac duy nhất, bạn có thể viết một cui cho nó hoặc sử dụng các tùy chọn -ss-t của ffmpeg để cắt từng bài hát.

56

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.


3
" / Người dùng / thưa ông ", lmao.
Harry Svensson

Giai thoại: tất cả người dùng trong công ty chúng tôi đều có tên các ngôi sao, viết tắt từ 3-5 ký tự. Của tôi là "sirius", thưa ông;)
user2707001

Tùy chọn không được công nhận 'tên'.
MonsterMMORPG

14

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 0bí 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 -Vtù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 1tham 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

8

Tôi đang thử nghiệm lệnh sau để chuyển đổi infile.flactệ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 0yêu ffmpegcầu sử dụng VBR chất lượng cao nhất.

Tuy nhiên, việc ffmpegchuyển mã ảnh bìa album của tôi từ jpegsang 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 ffmpeghoạt động .)

Sau khi tìm hiểu kỹ, tôi đã tìm thấy -c:v copytù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))

3

Để 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.


3

Một lớp lót để chuyển đổi tất cả .flaccác tệp .mp3trong một thư mục duy nhất, giữ hầu hết các siêu dữ liệu:

for file in *.flac; do ffmpeg -i $file -q:a 0 ${file:r}.mp3; done

(Lưu ý: ${file:r}xóa phần mở rộng của đường dẫn tệp đã cho)

ffmpeg: flac sang mp3


Chỉ cần trích dẫn biến $filenhư thế nào "$file".
Chazy Chaz

:rdường như là một công cụ zshsửa đổi, không hoạt động bash. Trong Bash bạn có thể thay thế "${file:r}.mp3"bằng "${file%.flac}.mp3".
mivk

để chỉ hiển thị tên tệp từ tệp, trong sử dụng cơ bản${file%.*}
Evhz

2

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ùy chọn không được công nhận 'tên'. Lỗi khi chia danh sách đối số: Không tìm thấy tùy chọn
MonsterMMORPG

@MonsterMMORPG có thể bạn đã bỏ lỡ việc nhập. sau lệnh tìm. Các . yêu cầu tìm kiếm trong thư mục hiện tại và -name cho biết tìm kiếm các tên tệp phù hợp.
Dhiraj Gupta

2

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 CORESbiế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.


đưa ra lỗi sed: -e expression # 1, char 26: unterminated `s 'command
MonsterMMORPG

Chính xác những gì tôi đang tìm kiếm, cảm ơn! Tôi đã điều chỉnh tập lệnh một chút để kết hợp VBR và các câu trả lời khác, được tải lên tại đây: gist
aksh1618
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.