Konversikan .flac ke .mp3 dengan ffmpeg, simpan semua metadata

89

Bagaimana cara mengonversi .flac ke .mp3 dengan ffmpeg, menyimpan semua metadata (yang mengubah komentar Vorbis dalam file .flac menjadi metadata ID3v2 dari .mp3)?

Vito Gentile
sumber
5
Harap diperhatikan bahwa lain kali Anda harus mengajukan ffmpegpertanyaan tentang penggunaan cli di Pengguna Super . Stack Overflow hanya untuk pertanyaan yang melibatkan pemrograman. Juga, FLAC secara resmi mendukung komentar Vorbis saja, jadi saya berasumsi Anda ingin mengonversi ke ID3v2 daripada "tetap".
llogan
Oke, pertanyaan saya sudah diperbaiki. Saya bertanya di sini karena saya melihat pertanyaan seperti ini di StackOverflow (misalnya ini atau ini ), dan berasumsi akan menarik untuk berbagi pengetahuan saya. Selain itu, saya melihat bahwa ada tag ffmpeg , jadi mengapa tidak membagikan solusi saya di sini? ffmpeg digunakan di banyak aplikasi oleh banyak pengembang.
Vito Gentile
4
The ffmpeg tag mengatakan, "Pertanyaan tentang penggunaan interaktif dari alat baris perintah FFmpeg harus diminta pada Super User.". Ini bukan masalah besar, tapi saya hanya ingin menunjukkannya karena ada terlalu banyak pertanyaan di luar topik menurut pendapat saya.
llogan

Jawaban:

156

Perintah berikut mempertahankan kualitas tinggi pada .mp3 (320 kbps), dan metadata dari file .flac diubah ke format ID3v2, yang dapat disertakan dalam file .mp3:

ffmpeg -i input.flac -ab 320k -map_metadata 0 -id3v2_version 3 output.mp3
Vito Gentile
sumber
1
Perlu dicatat bahwa "ffmpeg" mungkin perlu diganti dengan "avconv".
shockburner
6
FWIW ffmpeg3.2 secara otomatis menyalin metadata ke ID3v2 dari FLAC tanpa perlu menentukan -map_metadata 0 -id3v2_version 3, meskipun tidak disalin ke tag ID3v1. Saya menggunakan alat terpisah untuk itu.
Dai
1
lirik masih tidak dapat disalin meskipun
user151496
1
Apakah ini membagi flac jika ada beberapa bagian?
Artyom
1
@Artyom Anda mungkin harus memiliki file isyarat bersama dengan flac Anda di mana titik pemisah ditandai. Jika demikian maka Anda dapat menggunakan shnsplit (konsol) atau flacon (GUI) untuk membagi file Anda dan mengubah bagian-bagiannya menjadi mp3. Jika Anda hanya memiliki satu flac Anda dapat menulis cui untuk itu atau menggunakan opsi -ss dan -t ffmpeg untuk memotong setiap lagu.
58

Jawaban sempurna di atas. Saya menggunakannya bersama dengan find untuk menambahkan semua file FLAC dalam subpohon ke iTunes dengan perintah ini

find . -name "*.flac" -exec ffmpeg -i {} -ab 160k -map_metadata 0 -id3v2_version 3 {}.mp3 \;

Untuk secara otomatis menambahkan file yang dihasilkan ke iTunes, dapatkan direktori impor iTunes dengan

find ~/Music/ -name "Automatically Add*"

hasil misalnya

/Users/sir/Music//iTunes/iTunes Media/Automatically Add to iTunes.localized

Kemudian jalankan mis

find . -name "*.mp3" -exec mv {} "/Users/sir/Music//iTunes/iTunes Media/Automatically Add to iTunes.localized/" \;

Untuk secara otomatis menambahkan semua trek yang dikonversi ke iTunes.

pengguna2707001
sumber
3
" / Pengguna / Pak ", lmao.
Harry Svensson
Anekdot: semua pengguna di perusahaan kami memiliki nama bintang, disingkat menjadi 3-5 karakter. Punyaku adalah "sirius", singkatnya pak;)
user2707001
'Nama' opsi tidak dikenal.
MonsterMMORPG
14

Jika Anda ingin menghemat sedikit ruang, coba rekomendasi hydrogenaud.io :

Kualitas yang sangat tinggi: HiFi, rumah, atau tenang mendengarkan, dengan ukuran file terbaik -V0 (~245 kbps), -V1 (~225 kbps), -V2 (~190 kbps)atau -V3 (~175 kbps)direkomendasikan. Pengaturan VBR ini biasanya akan memberikan hasil transparan. Perbedaan suara antara preset ini mungkin ada, tetapi jarang terjadi.

Sumber: http://wiki.hydrogenaud.io/index.php?title=LAME

Jika Anda ingin menggunakan opsi ini di ffmpeg, Anda harus menggunakan -q:a 0alias.

Kontrol kualitas dengan -qscale:a(atau alias -q:a). Nilai bersifat khusus pembuat enkode, jadi untuk libmp3lame kisarannya adalah 0-9 di mana nilai yang lebih rendah berarti kualitas yang lebih tinggi. 0-3 biasanya akan memberikan hasil transparan, 4 (default) harus mendekati transparansi persepsi, dan 6 menghasilkan kualitas yang "dapat diterima". Opsi -qscale:adipetakan ke -Vopsi dalam alat antarmuka baris perintah lumpuh mandiri.

Sumber: https://trac.ffmpeg.org/wiki/Encode/MP3

Jika Anda ingin metatag ID3v1 juga, Anda harus menambahkan -write_id3v1 1parameter.

Jadi perintah terakhir saya adalah:

ffmpeg.exe -y -i input.flac -codec:a libmp3lame -q:a 0 -map_metadata 0 -id3v2_version 3 -write_id3v1 1 output.mp3
wiktor
sumber
8

Saya menguji perintah berikut untuk mengonversi infile.flacfile menjadi outfile.mp3:

ffmpeg  -i infile.flac  -q:a 0  outfile.mp3

Pada Ubuntu 16.04, perintah di atas tampaknya menyalin (sebagian besar? Semua?) Metadata.

-q:a 0memberitahu ffmpeguntuk menggunakan VBR kualitas tertinggi.

Namun, melakukan ffmpegtranscoding seni album saya dari jpegmenjadi png, yang meningkatkan ukuran seni sampul.

Stream mapping:
  Stream #0:1 -> #0:0 (mjpeg (native) -> png (native))
  Stream #0:0 -> #0:1 (flac (native) -> mp3 (libmp3lame))

(Saya kira jenis konversi di atas masuk akal mengingat cara ffmpegkerjanya .)

Setelah beberapa penggalian, saya menemukan -c:v copyopsi, yang menentukan bahwa aliran video harus disalin, daripada ditranskode. Perintah lengkapnya adalah:

ffmpeg  -i infile.flac  -c:v copy  -q:a 0  outfile.mp3

Perintah di atas menghasilkan:

Stream mapping:
  Stream #0:1 -> #0:0 (copy)
  Stream #0:0 -> #0:1 (flac (native) -> mp3 (libmp3lame))
mpb
sumber
3

Untuk mengonversi secara rekursif dalam mp3 semua file flac di folder bersarang, saya menggunakan perintah ini:

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"' \;

Ini akan membuat folder bernama "mp3" di dalam folder dengan file flac dan, di dalam folder mp3, itu akan menyimpan file mp3 relatif dengan bitrate 320kbps, tanpa menggunakan ekstensi file lama di namanya.

Riccardo Volpe
sumber
3

Satu baris untuk mengonversi semua .flacfile ke .mp3dalam satu direktori, menyimpan sebagian besar metadata:

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

(Catatan: ${file:r}menghapus ekstensi dari jalur file yang diberikan)

ffmpeg: flac ke mp3

woudsma
sumber
Kutip saja variabel $fileseperti "$file".
Chazy Chaz
:rtampaknya merupakan zshpengubah, yang tidak berfungsi di bash. Di Bash Anda bisa mengganti "${file:r}.mp3"dengan "${file%.flac}.mp3".
mivk
untuk menampilkan hanya nama file dari file, dalam penggunaan bash${file%.*}
Evhz
2

Saya tahu bahwa ini tidak ditanyakan, tetapi mengingat salah satu alasan mengapa hal ini dilakukan (setidaknya itulah yang ingin saya lakukan) adalah agar musik dapat diimpor ke Apple iTunes yang tidak mendukung FLAC. Dalam kasus seperti itu, lebih masuk akal untuk mengubah FLAC ke format lossless milik Apple, m4a. Saya menggunakan perintah ini untuk mengonversi semua file di folder saat ini, sambil mempertahankan ukuran file yang serupa.

find . -name "*.flac" -exec ffmpeg -i {} -map_metadata 0 -acodec alac {}.m4a \;

Dhiraj Gupta
sumber
'Nama' opsi tidak dikenal. Kesalahan membagi daftar argumen: Opsi tidak ditemukan
MonsterMMORPG
@MonsterMMORPG Anda mungkin ketinggalan mengetik. setelah perintah find. Itu. memberitahu find untuk mencari di folder saat ini, dan -name memberitahu untuk mencari nama file yang cocok.
Dhiraj Gupta
2

Skrip flac2mp3.sh ini digunakan ffmpeguntuk mengubah pohon folder file FLAC menjadi pohon folder lain dari file MP3. Seni sampul disertakan, saat hadir. Anda dapat mengatur CORESvariabel untuk membuat pekerjaan latar belakang untuk mengonversi beberapa file sekaligus.

Rick O'Sullivan
sumber
memberikan kesalahan sed: -e ekspresi # 1, char 26: perintah `s 'tidak
ditentukan
Persis seperti yang saya cari, terima kasih! Saya menyesuaikan skrip sedikit untuk memasukkan VBR dan jawaban lainnya, diunggah di sini: inti
aksh1618