Tüm meta verileri koruyarak .flac'ı ffmpeg ile .mp3'e dönüştürün


89

Tüm meta verileri koruyarak (yani .flac dosyalarındaki Vorbis açıklamasını .mp3'ün ID3v2 meta verilerine dönüştürerek) .flac'ı ffmpeg ile .mp3'e nasıl dönüştürebilirim ?


5
Bir dahaki sefere Süper Kullanıcı'daffmpeg cli kullanım sorularını sormanız gerektiğini lütfen unutmayın . Stack Overflow yalnızca programlama içeren sorular içindir. Ayrıca, FLAC resmi olarak yalnızca Vorbis açıklamasını destekler , bu nedenle "tutmak" yerine ID3v2'ye dönüştürmek istediğinizi varsayıyorum.
llogan

Tamam, sorumu düzelttim. Burada sordum çünkü StackOverflow'da buna benzer sorular (örneğin bu veya bu ) gördüm ve bilgilerimi paylaşmanın ilginç olabileceğini varsaydım. Ayrıca, bir ffmpeg etiketi olduğunu görüyorum , öyleyse neden çözümümü burada paylaşmıyorsunuz? ffmpeg, birçok geliştirici tarafından birçok uygulamada kullanılmaktadır.
Vito Gentile

4
Ffmpeg etiket "FFmpeg komut satırı aracı interaktif kullanımı ile ilgili sorular Süper Kullanıcı üzerinde sorulmalıdır." Diyor. Bu büyük bir sorun değil, ama bence burada çok fazla konu dışı soru olduğu için bunu belirtmek istedim.
llogan

Yanıtlar:


156

Aşağıdaki komut .mp3'te (320 kbps) yüksek kaliteyi korur ve .flac dosyasındaki meta veriler, .mp3 dosyalarına dahil edilebilecek olan ID3v2 biçimine dönüştürülür:

ffmpeg -i input.flac -ab 320k -map_metadata 0 -id3v2_version 3 output.mp3

1
"Ffmpeg" in "avconv" ile değiştirilmesi gerekebileceğini belirtmek gerekir.
shockburner

6
FWIW ffmpeg3.2 -map_metadata 0 -id3v2_version 3, ID3v1 etiketlerine kopyalanmasa da , belirlemeye gerek kalmadan meta verileri otomatik olarak FLAC'tan ID3v2'ye kopyalar . Bunun için ayrı bir araç kullanıyorum.
Dai

1
sözler hala kopyalanmıyor
user151496

1
Birkaç parça varsa flac'ı böler mi?
Artyom

1
@Artyom Muhtemelen olmalıdır işaret sizin ile birlikte dosyayı flac bölünmüş noktaları işaretlenmiştir. Öyleyse , dosyanızı bölmek ve parçaları mp3'e dönüştürmek için shnsplit (konsol) veya flacon (GUI) kullanabilirsiniz. Yalnızca tek bir flacınız varsa, bunun için bir cui yazabilir veya her şarkıyı kesmek için ffmpeg'in -ss ve -t seçeneklerini kullanabilirsiniz.

58

Yukarıda mükemmel cevap. Bir alt ağaçtaki tüm FLAC dosyalarını bu komutla iTunes'a eklemek için find ile birlikte kullanıyorum

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

Elde edilen dosyaları iTunes'a otomatik olarak eklemek için iTunes içe aktarma dizinini şu şekilde alın:

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

sonuç örneğin

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

Sonra örneğin çalıştırın

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

Dönüştürülen tüm parçaları otomatik olarak iTunes'a eklemek için.


3
" / Kullanıcılar / efendim ", lmao.
Harry Svensson

Anekdot: Şirketimizdeki tüm kullanıcıların 3-5 karakterle kısaltılmış yıldız adları vardır. Benimki "sirius", kısa efendim;)
user2707001

Tanınmayan seçenek 'adı'.
MonsterMMORPG

14

Biraz yer kazanmak istiyorsanız, hydrogenaud.io'nun önerisini deneyin :

Çok yüksek kalite: iyi dosya boyutu ile HiFi, ev veya sessiz dinleme, -V0 (~245 kbps), -V1 (~225 kbps), -V2 (~190 kbps)veya -V3 (~175 kbps)tavsiye edilir. Bu VBR ayarları normalde şeffaf sonuçlar üretecektir. Bu ön ayarlar arasında duyulabilir farklılıklar olabilir, ancak nadirdir.

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

Bu seçeneği ffmpeg'de kullanmak istiyorsanız, -q:a 0diğer adı kullanmalısınız .

-qscale:a(Veya takma ad -q:a) ile kaliteyi kontrol edin . Değerler kodlayıcıya özeldir, bu nedenle libmp3lame için aralık 0-9'dur, burada daha düşük bir değer daha yüksek kalitedir. 0-3 normalde saydam sonuçlar üretir, 4 (varsayılan) algısal şeffaflığa yakın olmalıdır ve 6 "kabul edilebilir" bir kalite üretir. Seçenek -qscale:a, -Vbağımsız lame komut satırı arabirim aracındaki seçenekle eşleştirilmiştir .

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

ID3v1 meta etiketlerini de istiyorsanız, -write_id3v1 1parametreyi eklemelisiniz .

Bu yüzden son emrim:

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

8

infile.flacDosyayı dönüştürmek için aşağıdaki komutu test ediyordum outfile.mp3:

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

Ubuntu 16.04'ten itibaren, yukarıdaki komut meta verileri kopyalıyor (çoğu? Tümü?) Görünüyor.

-q:a 0ffmpegen yüksek kalitede VBR kullanılmasını söyler .

Bununla birlikte, ffmpegalbüm resmimi 'den' jpege dönüştürüyordu png, bu da kapak resminin boyutunu artırdı.

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

(Sanırım yukarıdaki dönüşüm, nasıl ffmpegçalıştığı göz önüne alındığında mantıklı geliyor .)

Biraz araştırma yaptıktan sonra -c:v copy, video akışının kod dönüşümü yerine kopyalanması gerektiğini belirten seçeneği buldum . Tam komut şudur:

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

Yukarıdaki komut şu sonuçları verir:

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

3

İç içe klasörlerdeki tüm flac dosyalarını mp3'e yinelemeli olarak dönüştürmek için şu komutu kullandım:

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

Flac dosyaları içeren klasörün içinde "mp3" adlı bir klasör oluşturacak ve mp3 klasörünün içinde, eski dosya uzantısını adında tutmadan, göreceli mp3 dosyalarını 320kbps bit hızında kaydedecektir.


3

Tüm .flacdosyaları .mp3tek bir dizine dönüştürmek ve çoğu meta veriyi saklamak için tek satırlık:

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

(Not: ${file:r}verilen dosya yolunun uzantısını kaldırır)

ffmpeg: flac'tan mp3'e


Sadece değişken alıntı $filegibi "$file".
Chazy Chaz

:rzshçalışmayan bir değiştirici gibi görünüyor bash. Bash'de "${file:r}.mp3"ile değiştirebilirsiniz "${file%.flac}.mp3".
mivk

bash kullanımında dosyadan yalnızca dosya ${file%.*}
adını

2

Bunun sorulmadığını biliyorum, ancak bunun yapılmasının nedenlerinden biri (en azından yapmak istediğim şey bu), müziğin FLAC'ı desteklemeyen Apple iTunes'a aktarılabilmesidir. Böyle bir durumda FLAC'ı Apple'ın kendi kayıpsız formatı olan m4a'ya dönüştürmek daha mantıklıdır. Bu komutu, benzer dosya boyutlarını korurken, geçerli klasördeki tüm dosyaları dönüştürmek için kullandım.

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


Tanınmayan seçenek 'adı'. Bağımsız değişken listesi
bölünürken

@MonsterMMORPG muhtemelen. bul komutundan sonra. . find geçerli klasöre bakmasını ve -name ona eşleşen dosya adlarını aramasını söyler.
Dhiraj Gupta

2

Bu flac2mp3.sh komut dosyası ffmpeg, FLAC dosyalarının bir klasör ağacını MP3 dosyalarının başka bir klasör ağacına dönüştürmek için kullanır . Varsa kapak resmi dahildir. Aynı CORESanda birkaç dosyayı dönüştürmek üzere arka plan işleri oluşturmak için bir değişken ayarlayabilirsiniz .


hata veriyor sed: -e ifade # 1, karakter 26: sonlandırılmamış `s 'komutu
MonsterMMORPG

Tam olarak aradığım şey, teşekkürler! : Ben VBR ve diğer cevaplar birleştiren için biraz buraya yüklenecektir senaryoyu düzeltilmiş özü
aksh1618
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.