FFMPEG: Mengonversi file m4a ke mp3 tanpa kehilangan informasi / kualitas yang signifikan. Bitrate otomatis

45

Saya memiliki banyak file audio (sekitar 1000) yang ingin saya konversi dari m4a ke mp3 sehingga saya dapat menggunakan memainkannya di CD player yang memiliki port USB.

Saya mencoba melakukan sesuatu yang sederhana seperti: ffmpeg -i FILE.m4a FILE.mp3tetapi ini tampaknya mengurangi bitrate ke nilai yang sangat rendah, yang bukan yang saya inginkan.

Demikian pula saya tidak ingin mengkonversi menggunakan bitrate konstan, seperti 320k, karena beberapa file yang saya konversi adalah 320k m4a dan beberapa kualitas serendah 96k m4a.

Tampaknya tidak masuk akal untuk memaksa 320k, karena beberapa file akan menjadi berkali-kali lebih besar dari yang seharusnya. Demikian pula tidak masuk akal untuk menghancurkan semua file 320k saya dengan mengonversinya menjadi sesuatu yang jauh lebih rendah dari 96k. (Saat ini, file sedang dikonversi ke sekitar 50 ribu.)

Adakah yang tahu bagaimana saya bisa melakukan ini? Yang benar-benar ingin saya lakukan adalah memberi tahu ffmpeg untuk mengkonversi semua file m4a dalam sebuah direktori menjadi mp3 sambil tetap mempertahankan kualitas audio saat ini sebaik mungkin. (Tentu saja mungkin ada beberapa kerugian tambahan dari konversi dari format file lossy ke lossy.)

Terima kasih atas bantuan Anda. Jika ini tidak memungkinkan, apakah ada semacam skrip yang mungkin mendeteksi kualitas yang diperlukan saat mengonversi file satu per satu?

PS: Saya sedang mengerjakan intel Mac, tetapi juga punya kotak Ubuntu.

pengguna3728501
sumber

Jawaban:

51

VBR

Anda dapat menggunakan -qscale:aopsi ini ffmpeguntuk membuat output MP3 bitrate variabel (VBR). Dari FFmpeg Wiki: Pengkodean VBR (Variable Bit Rate) mp3 audio :

Kontrol kualitas dengan -qscale:a(atau alias -q:a). Nilai spesifik untuk enkoder, jadi untuk libmp3lame kisarannya adalah 0-9 di mana nilai yang lebih rendah adalah kualitas yang lebih tinggi. 0-3 biasanya akan menghasilkan hasil yang transparan, 4 (standar) harus dekat dengan transparansi persepsi, dan 6 biasanya menghasilkan kualitas yang "dapat diterima". Opsi -qscale:aini dipetakan ke -Vopsi di alat antarmuka baris perintah lumpuh mandiri.

Anda harus bereksperimen untuk melihat nilai apa yang dapat diterima untuk Anda. Lihat juga Audio Hidrogen: Pengaturan LAME Encoder yang Disarankan .

Pengkodean banyak file

Anda dapat menggunakan Bash "for loop" untuk menyandikan semua file di direktori:

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

Mendapatkan ffmpeg

Disarankan untuk menggunakan build terbaru ffmpegjika memungkinkan. Lihat halaman Unduhan FFmpeg untuk tautan ke build untuk OS X, Linux, dan Windows. Anda juga dapat mengikuti panduan untuk mengkompilasi FFmpeg .

llogan
sumber
1
Oke terima kasih, perintahnya bekerja tetapi saya tidak berpikir itu melakukan apa yang saya inginkan. Saya telah menetapkan -q: a 0, yang melakukan apa yang saya harapkan untuk m4a kualitas tinggi (menghasilkan file besar dengan tingkat vbr lebih tinggi) tetapi file dengan kualitas lebih rendah saya pikir masih sedang dikonversi menjadi file besar, dengan vbr tentang sekitar 250-260 kb / s. Saya berharap file-file yang sekitar 96k dalam format m4a akan dikonversi ke bitrate yang sama dengan lame encoder dalam mode vbr. Saya berasumsi saya belum mengerti bagaimana mode encoding vbr bekerja?
user3728501
21

Gunakan FFmpeg (ada juga versi GUI yang tersedia, tetapi jawaban saya hanya merujuk pada baris perintah)

  1. MP3 secara resmi dihentikan ( dari 2017 ), usang dan codec mati. Internet telah beralih ke AAC (codec lebih efisien & berkualitas) dan semua orang sangat dianjurkan untuk menggunakan codec itu:

    ffmpeg -i filenameee.m4a -acodec copy output.aac
    
  2. Namun, jika karena alasan tertentu Anda masih membutuhkan MP3 (karena masih didukung oleh lebih banyak perangkat):

    ffmpeg -i filenameee.m4a -acodec libmp3lame -ab 256k output.mp3
    
T.Todua
sumber
4
Karena pertanyaannya adalah tentang kualitas, mungkin itu akan bermanfaat jika dikonversi ke 256k bukannya 128.
VessoVit
3

Ini bekerja untuk saya:

ffmpeg -i testing.m4v -b:a 192K -vn testing.mp3
pengguna205987
sumber
1

Dengan menggunakan jawaban yang ada sebagai dasar saya menulis skrip bash yang seharusnya melakukan persis apa yang ditanyakan pada mesin Ubuntu (diuji pada 16.04). Anda harus menginstal avprobeyang ada dalam libav-toolspaket. Anda dapat menginstal avprobedengan perintah berikut

sudo apt-get install libav-tools

CATATAN: Sebaiknya buat cadangan dari folder apa pun tempat Anda menjalankan skrip ini dan juga berusaha sebaik mungkin untuk membaca dan memahami apa yang dilakukan sebelum menjalankan.

Saya belum diuji dengan sangat ketat sehingga 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
Jbowman
sumber
0

Jika Anda bekerja pada 48 KhZ dan setidaknya 24-bit dalam file input (dari editor file i.ex.) -q:a 0akan mereproduksi 20 kHz tanpa file yang begitu besar seperti flac ... Tapi audio berkualitas rendah kecuali Anda mengurangi kebisingan dari frekuensi tinggi (desisan) oleh dithering atau editor audio reduksi hidung, dibuat dalam konversi, yang akan direproduksi, kemudian akan menggunakan file data sebagai HF yang tidak terdengar, tetapi noise mahal.

Kaiser Lima
sumber