Jak mogę przekonwertować .flac na .mp3 za pomocą ffmpeg, zachowując wszystkie metadane (czyli konwersję komentarza Vorbis w plikach .flac na metadane ID3v2 z .mp3)?
Jak mogę przekonwertować .flac na .mp3 za pomocą ffmpeg, zachowując wszystkie metadane (czyli konwersję komentarza Vorbis w plikach .flac na metadane ID3v2 z .mp3)?
Odpowiedzi:
Następujące polecenie zachowuje wysoką jakość na .mp3 (320 kbps), a metadane z pliku .flac są konwertowane do formatu ID3v2, który można dołączyć do plików .mp3:
ffmpeg -i input.flac -ab 320k -map_metadata 0 -id3v2_version 3 output.mp3
ffmpeg
3.2 automatycznie kopiuje metadane do ID3v2 z FLAC bez konieczności określania -map_metadata 0 -id3v2_version 3
, chociaż nie kopiuje do tagów ID3v1. Używam do tego osobnego narzędzia.
Doskonała odpowiedź powyżej. Używam go razem z find, aby dodać wszystkie pliki FLAC w poddrzewie do iTunes za pomocą tego polecenia
find . -name "*.flac" -exec ffmpeg -i {} -ab 160k -map_metadata 0 -id3v2_version 3 {}.mp3 \;
Aby automatycznie dodać wynikowe pliki do iTunes, pobierz katalog importu iTunes z
find ~/Music/ -name "Automatically Add*"
wynik np
/Users/sir/Music//iTunes/iTunes Media/Automatically Add to iTunes.localized
Następnie uruchom np
find . -name "*.mp3" -exec mv {} "/Users/sir/Music//iTunes/iTunes Media/Automatically Add to iTunes.localized/" \;
Aby automatycznie dodać wszystkie przekonwertowane utwory do iTunes.
Jeśli chcesz zaoszczędzić trochę miejsca, wypróbuj zalecenia hydrogenaud.io :
Bardzo wysoka jakość: HiFi, domu, lub ciche słuchanie, z najlepszego rozmiaru pliku
-V0 (~245 kbps)
,-V1 (~225 kbps)
,-V2 (~190 kbps)
lub-V3 (~175 kbps)
są zalecane. Te ustawienia VBR zwykle dają przejrzyste wyniki. Mogą występować słyszalne różnice między tymi ustawieniami, ale są one rzadkie.
Źródło: http://wiki.hydrogenaud.io/index.php?title=LAME
Jeśli chcesz użyć tej opcji w ffmpeg, powinieneś użyć -q:a 0
aliasu.
Kontroluj jakość za pomocą
-qscale:a
(lub aliasu-q:a
). Wartości są specyficzne dla kodera, więc dla libmp3lame zakres wynosi 0-9, gdzie niższa wartość oznacza wyższą jakość. 0-3 zwykle daje przejrzyste wyniki, 4 (domyślnie) powinno być bliskie percepcyjnej przezroczystości, a 6 daje „akceptowalną” jakość. Opcja-qscale:a
jest odwzorowana na-V
opcję w samodzielnym narzędziu lame interfejsu wiersza poleceń.
Źródło: https://trac.ffmpeg.org/wiki/Encode/MP3
Jeśli chcesz również metatagi ID3v1, powinieneś dodać -write_id3v1 1
parametr.
Więc moje ostatnie polecenie to:
ffmpeg.exe -y -i input.flac -codec:a libmp3lame -q:a 0 -map_metadata 0 -id3v2_version 3 -write_id3v1 1 output.mp3
Testowałem następujące polecenie, aby przekonwertować infile.flac
plik na outfile.mp3
:
ffmpeg -i infile.flac -q:a 0 outfile.mp3
Począwszy od Ubuntu 16.04, powyższe polecenie wydaje się kopiować (głównie? Wszystkie?) Metadane.
-q:a 0
mówi, ffmpeg
aby używać najwyższej jakości VBR.
Jednak ffmpeg
transkodowałem okładkę albumu z jpeg
na png
, co zwiększyło rozmiar okładki.
Stream mapping:
Stream #0:1 -> #0:0 (mjpeg (native) -> png (native))
Stream #0:0 -> #0:1 (flac (native) -> mp3 (libmp3lame))
(Myślę, że powyższy rodzaj konwersji ma sens, biorąc pod uwagę, jak ffmpeg
działa ).
Po pewnym kopaniu znalazłem -c:v copy
opcję, która określa, że strumień wideo powinien być kopiowany, a nie transkodowany. Pełne polecenie to:
ffmpeg -i infile.flac -c:v copy -q:a 0 outfile.mp3
Powyższe polecenie powoduje:
Stream mapping:
Stream #0:1 -> #0:0 (copy)
Stream #0:0 -> #0:1 (flac (native) -> mp3 (libmp3lame))
Aby rekurencyjnie przekonwertować w mp3 wszystkie pliki flac w zagnieżdżonych folderach, użyłem tego polecenia:
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"' \;
Utworzy folder o nazwie „mp3” w folderze z plikami flac, a wewnątrz folderu mp3 zapisze względne pliki mp3 z szybkością transmisji 320 kb / s, bez zachowywania w nazwie starego rozszerzenia pliku.
$file
podobnego "$file"
.
:r
wydaje się być zsh
modyfikatorem, który nie działa bash
. W Bash można zastąpić "${file:r}.mp3"
z "${file%.flac}.mp3"
.
${file%.*}
Wiem, że o to nie pytano, ale biorąc pod uwagę, że jednym z powodów, dla których tak się stało (przynajmniej tego chciałem), jest to, że muzykę można importować do Apple iTunes, który nie obsługuje formatu FLAC. W takim przypadku bardziej sensowne jest przekonwertowanie FLAC na własny bezstratny format Apple, m4a. Użyłem tego polecenia, aby przekonwertować wszystkie pliki w bieżącym folderze, zachowując podobne rozmiary plików.
find . -name "*.flac" -exec ffmpeg -i {} -map_metadata 0 -acodec alac {}.m4a \;
Ten skrypt flac2mp3.sh używa ffmpeg
do konwersji drzewa folderów plików FLAC na inne drzewo folderów plików MP3. Okładka jest dołączona, jeśli jest obecna. Możesz ustawić CORES
zmienną, aby tworzyć zadania w tle i konwertować kilka plików jednocześnie.
ffmpeg
pytania dotyczące użycia CLI w Super User . Stack Overflow służy tylko do pytań dotyczących programowania. Ponadto FLAC oficjalnie obsługuje tylko komentarze Vorbis , więc zakładam, że chcesz przekonwertować na ID3v2 zamiast „zachować”.