FFMPEG: Chuyển đổi tập tin m4a sang mp3 mà không làm giảm đáng kể thông tin / chất lượng. Tốc độ bit tự động


44

Tôi có tải các tệp âm thanh (khoảng 1000) mà tôi muốn chuyển đổi từ m4a sang mp3 để tôi có thể sử dụng phát chúng trên máy nghe nhạc CD có cổng USB.

Tôi đã thử làm một cái gì đó đơn giản như: ffmpeg -i FILE.m4a FILE.mp3nhưng điều này dường như làm giảm bitrate xuống giá trị rất thấp, đó không phải là điều tôi muốn.

Tương tự, tôi không muốn chuyển đổi bằng cách sử dụng bitrate không đổi, chẳng hạn như 320k, vì một số tệp tôi đang chuyển đổi là 320k m4a và một số có chất lượng thấp như 96k m4a.

Dường như không có ý nghĩa gì khi buộc 320k, vì một số tệp sẽ trở nên lớn hơn nhiều lần so với mức cần thiết. Tương tự như vậy, sẽ vô nghĩa khi phá hủy tất cả các tệp 320k của tôi bằng cách chuyển đổi chúng thành một cái gì đó thấp hơn nhiều so với 96k. (Hiện tại, các tệp đang được chuyển đổi thành khoảng 50k.)

Có ai biết làm thế nào tôi có thể làm điều này? Những gì tôi thực sự muốn làm là nói với ffmpeg để chuyển đổi tất cả các tệp m4a trong một thư mục thành mp3 trong khi vẫn giữ được chất lượng âm thanh hiện tại tốt nhất có thể. (Tất nhiên có khả năng sẽ có thêm một số tổn thất từ ​​việc chuyển đổi từ định dạng tệp bị mất sang định dạng tệp bị mất.)

Cảm ơn bạn đã giúp đỡ. Nếu điều này là không thể, có một số loại kịch bản có thể phát hiện chất lượng cần thiết khi nó chuyển đổi các tệp riêng lẻ không?

PS: Tôi đang làm việc trên máy Mac intel, nhưng cũng có hộp Ubuntu.

Câu trả lời:


51

VBR

Bạn có thể sử dụng -qscale:atùy chọn trong ffmpegđể tạo đầu ra MP3 bitrate (VBR). Từ FFmpeg Wiki: Mã hóa âm thanh mp3 VBR (Tốc độ bit biến) :

Kiểm soát chất lượng với -qscale:a(hoặc bí danh -q:a). Các giá trị là mã hóa cụ thể, vì vậy đối với libmp3, phạm vi là 0-9 trong đó giá trị thấp hơn là chất lượng cao hơn. Thông thường 0-3 sẽ tạo ra kết quả minh bạch, 4 (mặc định) phải gần với độ trong suốt nhận thức và 6 thường tạo ra chất lượng "chấp nhận được". Tùy chọn -qscale:anày được ánh xạ tới -Vtùy chọn trong công cụ giao diện dòng lệnh què độc lập.

Bạn sẽ phải thử nghiệm để xem giá trị nào được chấp nhận cho bạn. Đồng thời xem Âm thanh hydro: Cài đặt bộ mã hóa LAME được đề xuất .

Mã hóa nhiều tập tin

Bạn có thể sử dụng Bash "for loop" để mã hóa tất cả các tệp trong một thư mục:

$ mkdir newfiles
$ for f in *.m4a; do ffmpeg -i "$f" -codec:v copy -codec:a libmp3lame -q:a 2 newfiles/"${f%.m4a}.mp3"; done

Được ffmpeg

Bạn nên sử dụng bản dựng gần đây ffmpegnếu có thể. Xem trang Tải xuống FFmpeg để biết các liên kết đến bản dựng cho OS X, Linux và Windows. Bạn cũng có thể làm theo hướng dẫn để biên dịch FFmpeg .


1
Được rồi cảm ơn, các lệnh đã hoạt động nhưng tôi không nghĩ rằng nó đang làm những gì tôi muốn. Tôi đã đặt -q: 0, đang thực hiện những gì tôi mong đợi cho chất lượng cao hơn của m4a (tạo ra các tệp lớn với tốc độ vbr cao hơn) nhưng các tệp chất lượng thấp hơn tôi nghĩ vẫn đang được chuyển đổi thành các tệp lớn, với khoảng 250-260 kb / s. Tôi đã mong đợi các tệp có định dạng khoảng 96k ở định dạng m4a sẽ được chuyển đổi thành bitrate tương tự với bộ mã hóa khập khiễng ở chế độ vbr. Tôi giả sử tôi chưa hiểu rõ chế độ mã hóa vbr hoạt động như thế nào?
dùng3728501

19

sử dụng FFmpeg (cũng có nhiều phiên bản GUI)

  1. MP3 đã ngừng sản xuất (năm 2017), codec lỗi thời. Internet đã chuyển sang AAC (codec hiệu quả và chất lượng hơn):

    ffmpeg -i filenameee.m4a -acodec copy output.aac
    
  2. Tuy nhiên, nếu bạn vẫn muốn sử dụng MP3 (vì nó vẫn được hỗ trợ bởi nhiều thiết bị hơn):

    ffmpeg -i filenameee.m4a -acodec libmp3lame -ab 256k output.mp3
    

4
Vì câu hỏi là về chất lượng, có thể sẽ có ích nếu chuyển đổi thành 256k thay vì 128.
VessoVit


1

Sử dụng các câu trả lời hiện có làm cơ sở, tôi đã viết một tập lệnh bash để thực hiện chính xác những gì câu hỏi yêu cầu trên máy Ubuntu (được thử nghiệm vào ngày 16.04). Bạn sẽ cần phải cài đặt avprobetrong libav-toolsgói. Bạn có thể cài đặt avprobebằng lệnh sau

sudo apt-get install libav-tools

LƯU Ý: Sẽ là khôn ngoan khi tạo bản sao lưu của bất kỳ thư mục nào bạn chạy tập lệnh này cũng như nỗ lực hết sức để đọc và hiểu những gì nó đang làm trước khi chạy.

Tôi đã không kiểm tra rất nghiêm ngặt vì vậy YMMV.

#!/bin/bash

mkdir "mp3s"
for f in *.m4a;
do
    bitrate=$(avprobe "${f}" 2> >(grep bitrate) | sed 's/^.*bitrate://g' | sed 's/[^0-9]*//g')
    bitrate="${bitrate}K"
    new_filename=$(echo "${f}" | sed 's/.m4a$/.mp3/g')
    ffmpeg -y -i "${f}" -acodec libmp3lame -ab "${bitrate}" "mp3s/${new_filename}"
done

0

Nếu bạn làm việc ở 48 KhZ và ít nhất 24 bit trong tệp đầu vào (từ trình chỉnh sửa tệp i.ex.) -q:a 0sẽ tái tạo 20 kHz tại không có tệp quá lớn như flac ... Nhưng âm thanh chất lượng thấp trừ khi bạn giảm tiếng ồn từ tần số cao (tiếng rít) bằng cách phối màu hoặc chỉnh sửa âm thanh giảm mũi, được tạo trong chuyển đổi, sẽ được sao chép, sau đó sẽ sử dụng tệp dữ liệu dưới dạng HF không nghe được, nhưng tiếng ồn đắt tiền.

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.