Od dłuższego czasu stosuję względnie niezdarną technikę, która obejmuje Audacity z wtyczką LAME. Myślę, że to w porządku, ale atrakcyjność podejścia terminalowego polega na tym, że mogę być trochę bardziej precyzyjny [options]
i być może używać bardziej aktualnych plików binarnych.
Co więcej, mój MacBook trochę się starzeje i jeśli mogę pozbyć się niepotrzebnego GUI, tym lepiej.
Z góry dziękuję.
Odpowiedzi:
Konwertowanie pojedynczego pliku bez zachowania znaczników
--decode --stdout
=-dc
lame - $outfile
= dane wejściowe z STDIN--preset extreme
= ~ 245 kbit / s VBRSkrypt powłoki, który zachowuje niektóre tagi ID3
Aby użyć skryptu, po prostu zapisz go gdzieś tak,
~/bin/flac2mp3
aby był wykonywalnychmod +x ~/bin/flac2mp3
.Spowodowałoby to konwersję wszystkich plików flac w folderze Muzyka:
Lub nieco szybciej, ponieważ wywołuje flac2mp3 tylko raz:
źródło
${file%.flac}.mp3
jest niesamowite! Wcześniej${x:: ${#x}-3}m4a
używałem do zmiany nazwy pliku z .wav na .m4a. Wspaniale jest zobaczyć sposób, który wygląda o wiele łatwiej.!/bin/sh file="$1" outfile=${file%.flac}.mp3 eval $(metaflac --export-tags-to - "$file" | sed "s/=\(.*\)/='\1'/") flac -cd "$file" | lame --preset standard \ --add-id3v2 --tt "$TITLE" --ta "$ARTIST" --tl "$ALBUM" \ --ty "$DATE" --tn "$TRACKNUMBER" --tg "$GENRE" \ - "$outfile"
ffmpeg domyślnie zachowuje tagi (ale nie obejmuje grafiki).
-aq 1
odpowiada-V 1
lame.-acodec libfaac
przekonwertuje pliki do AAC:źródło
wziąłem to, co mieliście, ale potem sprawiłem, że działało to jeszcze szybciej, wykorzystując
xargs
równoległe zadania.To jest skrypt z góry / usr / local / bin / flac2mp3
i oto niektóre statystyki przyspieszenia wydajności przy użyciu równoległości.
widać, że bardziej efektywnie wykorzystuje moje procesory, mam Intel i7, więc 8 to prawdopodobnie odpowiednia liczba procesów.
źródło
Znalazłem ten wątek podczas próby bezpośredniego kodowania plików MP3 z plików źródłowych FLAC. Odpowiedź Boehja zapewnia przyzwoitą opcję skryptową, ale ja osobiście wolę używać FFmpeg, więc jest to skrypt Bash, który wymyśliłem, aby poradzić sobie z tym zadaniem. Testowane i działa świetnie w macOS Sierra (10.12.2).
Wymagania: Powinieneś mieć
ffmpeg
ilame
już zainstalować na komputerze Mac. Najłatwiej to zrobić za pomocą Homebrew. Najpierw upewnij się, że masz zainstalowany Homebrew w ten sposób:Następnie uruchom to polecenie, aby zainstalować
ffmpeg
ilame
:Po zakończeniu możesz uruchomić ten skrypt. Ten skrypt będzie szukał plików FLAC w katalogu,
path/to/FLAC/files
ale można to zmienić tak, aby.
pliki FLAC znajdowały się w tym samym katalogu, w którym uruchamiany jest ten skrypt. Po uruchomieniu utworzymp3/
podkatalog, w którym wszystkie pliki MP3 będą umieszczony.Kilka notatek o rzeczach, których nauczyłem się „The Hard Way ™”, aby inni mogli czerpać korzyści z tego, co zrobiłem inaczej w tym skrypcie w porównaniu do innych w Internecie.
grep
komendy dla tagu parsowania (używając FFprobe którym jest zainstalowany z FFmpeg) są wrażliwe na wielkość liter przy użyciu-i
opcji, aby gogrep -i
.cut
polecenie jest teraz ograniczone do dzielenia danych wyjściowych tylko na podstawie pierwszego=
w nazwie znacznika z-f 2-
opcją, która tworzy poleceniecut -d '=' -f 2-
. Na przykład, Pavement ma utwór zatytułowany „5-4 = Unity”, a gdyby tylko drugi fragment został wybrany przez cięcie, tytuł zostałby skrócony do „5-4”.sed
, która pozbywa zer wiodących:sed 's/^0*//'
.-f wav
i faktycznie kompresuje wyjście FFmpeg, co nie ma sensu w konfiguracji potoku, w której LAME zamierza go ponownie zakodować. Zamiast tego ustawia się tutaj wyjście,-f s16le -acodec pcm_s16le
które jest zasadniczo wyjściem RAW; idealny do przesyłania dźwięku do innego procesu takiego jak ten.-r
opcję.--tt
,--ta
,--tl
,--tn
i--tg
ID3v2 opcji znacznik do LAME. Gdy dźwięk jest przesyłany strumieniowo / przesyłany strumieniowo z jednego procesu do LAME, metadane z pliku źródłowego są tracone. Jednym z sugerowanych opcji jest uzyskanie FFmpeg zapisać metadane w pliku tekstowym poprzez ustawienie opcji z-f ffmetadata "[metadata filename here]"
czym działa FFmpeg znowu z czymś takim:-i "[metadata filename here]" -map_metadata 1 -c:a copy [destination mp3 file] id3v2_version 3 -write_id3v1 1
. To działa, ale zwróć uwagę na wymaganie dotyczące pliku docelowego. Wydaje się, że FFmpeg importuje metadane tylko wtedy, gdy może skopiować plik, co wydaje się bardzo marnotrawstwem. Korzystanie FFprobe uzyskać wartości, a następnie ustawiając je w LAME z--tt
,--ta
,--tl
,--tn
i--tg
opcje działa lepiej; wszystkie metadane są zapisane w miejscu, dlatego należy wygenerować duplikat pliku.źródło