Perintah FFmpeg untuk mengkonversi MP3 ke AAC

21

Saya dapat mengeluarkan perintah ini:

ffmpeg -i input.mp3 -acodec alac -ab 128k -ar 48000 -ac 2 -y output.m4a 

untuk membuat file m4a.

Tetapi ketika saya mengeluarkan perintah ini

ffmpeg -i input.mp3 -acodec alac -ab 128k -ar 48000 -ac 2 -y output.aac

ffmpeg sedang melempar pesan kesalahan

Tidak dapat menulis header untuk file output # 0 (parameter codec yang salah?).

Juga, ukuran file m4a benar-benar hampir 5,8 kali lebih besar dari file asli, yang sama sekali bukan yang saya inginkan dan mengapa saya ingin mengkonversi ke AAC.

Soham Dasgupta
sumber

Jawaban:

38

Bagaimana saya bisa mengonversi ke AAC?

Ini adalah perintah FFmpeg paling dasar untuk mengonversi input ke audio AAC menggunakan kualitas tertinggi yang dimiliki FFMPeg AAC. libfdk_aacadalah Fraunhofer AAC encoder, dan tersedia ketika Anda mengkompilasi FFmpeg dengan dukungan untuknya.

ffmpeg -i input.mp3 -c:a libfdk_aac output.m4a

Untuk mengubah kualitas, Anda memiliki dua opsi:

  • Untuk bitrate variabel (VBR), gunakan -vbropsi. Sebagai contoh, -vbr 4adalah pilihan yang baik (kira-kira 128 kBit / s untuk audio stereo). Lebih tinggi berarti lebih baik. Nilai berkisar dari 1 hingga 5.

    ffmpeg -i input.mp3 -c:a libfdk_aac -vbr 4 output.m4a
    
  • Untuk fixed bitrate (CBR), gunakan -b:aopsi, misalnya -b:a 128k. 128 kBit / s harus cukup baik untuk sebagian besar situasi. Anda sering dapat memilih sesuatu yang lebih rendah juga.

    ffmpeg -i input.mp3 -c:a libfdk_aac -b:a 128k output.m4a
    

Anda juga dapat menggunakan HE-AAC (v1 / v2) alih-alih profil AAC-LC (kompleksitas rendah) default, yang paling cocok untuk bitrate rendah:

ffmpeg -i input.mp3 -c:a libfdk_aac -profile:a aac_he_v2 -b:a 32k output.m4a

Bagaimana jika saya tidak punya libfdk_aac?

Beberapa versi FFmpeg tidak memiliki libfdk_aac(karena alasan lisensi). Jika itu masalahnya, Anda dapat menggunakan enkode AAC bawaan:

ffmpeg -i input.mp3 -c:a aac -b:a 192k output.m4a

Encoder ini tidak mendukung VBR dengan benar, jadi jika Anda memerlukannya atau HE-AAC, baca terus.

Anda dapat mengkompilasi ffmpeg sendiri dan menambahkan libfdk_aacdukungan. Ada panduan di FFmpeg Wiki . Kompilasi mudah di Linux, cukup mudah di OS X, dan agak sulit di Windows. Saat Anda mengikuti panduan kompilasi dan menginstal pustaka yang sesuai sebelumnya, FFmpeg sekarang memberi Anda opsi untuk digunakan libfdk_aac.


Ada beberapa masalah dengan pendekatan awal Anda:

  • alacbukan AAC. ALAC adalah Codec Audio Lossless Apple , sedangkan AAC adalah Advanced Audio Coding .

  • Itu sebabnya output Anda lebih besar dari input, karena berbeda dengan MP3, ALAC masih dikompresi, tetapi harus lossless - itu sebabnya perlu menyimpan lebih banyak data.

  • .aacbukan wadah keluaran untuk audio ALAC. Jika Anda menggunakan AAC, itu akan berhasil. Saya akan menggunakan MP4 atau M4A.

slhck
sumber
Di Ubuntu 12.04 saya tidak dapat menggunakan opsi -c:a, apakah ini memiliki sinonim? Saya kira itu mungkin berarti -acodec:atetapi pada akhirnya saya hanya menjatuhkannya, dan ffmpegdapat menyimpulkan codec berdasarkan nama file output yang diinginkan. (Perlu -strict experimental; dan melemparkan -map_metadata 0:0untuk mengukur baik, untuk melestarikan tag ID3.)
tripleee
Juga patut dicatat: Saya ingin file M4B (buku audio), yang ffmpegtampaknya tidak mendukung, tetapi mengubahnya menjadi M4A dan kemudian mengganti nama tampaknya berfungsi.
tripleee
@ tripleee Itu berarti Anda menggunakan program usang yang disebut ffmpeg, tetapi sebenarnya bukan dari FFmpeg, tetapi garpu Libav. Ubuntu sayangnya membundelnya, bukan ffmpeg "nyata". Lihat: Siapa yang dapat memberi tahu saya perbedaan dan hubungan antara ffmpeg, libav, dan avconv
slhck
@ slhck: Terima kasih atas pembaruan cepat dan tautannya!
tripleee
1
@ tripleee Sebenarnya tidak, file .m4a identik dengan .mp4 (hanya penamaan konvensi untuk file mp4 dengan audio saja), tetapi memiliki format yang berbeda dari .aac (yang dikenal sebagai aliran ADTS). Anda juga dapat memaksa FFmpeg untuk menghasilkan format ADTS dengan menambahkan -f adts.
Bigue Nique
4

Konversi mudah ke AAC untuk Zeranoe Windows Builds

ffmpeg -i input.mp3 -c:a aac -b:a 128k output.m4a

Gunakan "aac", bukan libfaac atau libfdk_aac: https://trac.ffmpeg.org/wiki/Encode/AAC

"FFmpeg dapat mendukung tiga encoder AAC-LC (aac, libfaac, libfdk_aac) dan satu encoder HE-AAC (v1 / 2) (libfdk_aac). Lisensi libfaac dan libfdk_aac tidak kompatibel dengan GPL, sehingga GPL tidak mengizinkan dengan GPL, sehingga GPL tidak mengizinkan distribusi binari yang berisi kode yang dilisensikan di bawah lisensi ini ketika kode berlisensi GPL juga disertakan. "

SaltySub2
sumber
2
libfaacdukungan juga telah dihapus pada 3.2.
slhck