FFMPEG: Konwertuj pliki m4a na mp3 bez znaczącej utraty informacji / jakości. Zautomatyzowana przepływność


44

Mam mnóstwo plików audio (około 1000), które chcę przekonwertować z m4a na mp3, dzięki czemu mogę odtwarzać je na odtwarzaczu CD z portem USB.

Próbowałem zrobić coś prostego: ffmpeg -i FILE.m4a FILE.mp3ale wydaje się, że zmniejsza to szybkość transmisji do bardzo niskiej wartości, co nie jest tym, czego chcę.

Podobnie nie chcę konwertować przy użyciu stałej szybkości transmisji, takiej jak 320k, ponieważ niektóre pliki, które konwertuję, to 320k m4a, a niektóre są tak niskiej jakości jak 96k m4a.

Wymuszanie 320k wydaje się bez sensu, ponieważ niektóre pliki będą wielokrotnie większe niż powinny. Podobnie nie ma sensu niszczyć wszystkich moich plików 320k, konwertując je na coś znacznie niższego niż 96k. (W tej chwili pliki są konwertowane do około 50 KB).

Czy ktoś wie, jak to zrobić? To, co naprawdę chcę zrobić, to powiedzieć ffmpeg, aby przekonwertowało wszystkie pliki m4a z katalogu na pliki mp3, zachowując przy tym najlepszą jakość dźwięku. (Oczywiście mogą wystąpić dodatkowe straty związane z konwersją formatów plików stratnych na stratne).

Dzięki za pomoc. Jeśli nie jest to możliwe, czy istnieje jakiś skrypt, który może wykryć wymaganą jakość, ponieważ konwertuje pliki indywidualnie?

PS: Pracuję na komputerze Macintosh, ale mam też system Ubuntu.

Odpowiedzi:


51

VBR

-qscale:aOpcji in można użyć ffmpegdo utworzenia wyjścia MP3 o zmiennej przepływności (VBR). Z FFmpeg Wiki: Kodowanie VBR (Variable Bit Rate) mp3 audio :

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 przezroczyste wyniki, 4 (domyślnie) powinno być zbliżone do przejrzystości percepcyjnej, a 6 zwykle daje „akceptowalną” jakość. Opcja -qscale:ajest odwzorowana na -Vopcję w samodzielnym narzędziu interfejsu wiersza poleceń lame.

Musisz eksperymentować, aby zobaczyć, jaka wartość jest dla Ciebie akceptowalna. Zobacz także Hydrogen Audio: Zalecane ustawienia kodera LAME .

Kodowanie wielu plików

Możesz użyć Bash „for loop”, aby zakodować wszystkie pliki w katalogu:

$ mkdir newfiles
$ for f in *.m4a; do ffmpeg -i "$f" -codec:v copy -codec:a libmp3lame -q:a 2 newfiles/"${f%.m4a}.mp3"; done

Dostać ffmpeg

Zalecane jest użycie najnowszej wersji, ffmpegjeśli to możliwe. Zobacz stronę pobierania FFmpeg, aby znaleźć łącza do kompilacji dla systemów OS X, Linux i Windows. Możesz także postępować zgodnie z instrukcjami, aby skompilować FFmpeg .


1
Ok, dzięki, komendy działały, ale nie sądzę, że robi to, co chciałem. Ustawiłem -q: 0, która robi to, czego oczekiwałem dla wyższej jakości m4a (tworzenie dużych plików z wyższymi prędkościami VBR), ale myślę, że pliki o niższej jakości są nadal konwertowane na duże pliki, z VBR około 250-260 kb / s. Spodziewałbym się, że pliki o rozmiarze około 96 KB w formacie m4a zostaną przekonwertowane na podobny bitrate za pomocą kodera lame w trybie vbr. Zakładam, że nie do końca zrozumiałem, jak działa tryb kodowania VBR?
user3728501

20

użyj FFmpeg (istnieje również wiele wersji GUI)

  1. MP3 jest już wycofany (w 2017 r.), Przestarzały kodek. Internet przeszedł już na AAC (bardziej wydajny i wysokiej jakości kodek):

    ffmpeg -i filenameee.m4a -acodec copy output.aac
    
  2. Jeśli jednak nadal chcesz korzystać z MP3 (ponieważ jest on obsługiwany przez więcej urządzeń):

    ffmpeg -i filenameee.m4a -acodec libmp3lame -ab 256k output.mp3
    

4
Ponieważ pytanie dotyczy jakości, być może korzystne będzie przekonwertowanie na 256k zamiast 128.
VessoVit


1

Opierając się na istniejących odpowiedziach, napisałem skrypt bash, który powinien zrobić dokładnie to, o co pyta pytanie na komputerze Ubuntu (przetestowanym 16.04). Musisz zainstalować, avprobektóry jest w libav-toolspakiecie. Możesz zainstalować avprobeza pomocą następującego polecenia

sudo apt-get install libav-tools

UWAGA: Mądrze byłoby wykonać kopię zapasową dowolnego folderu, w którym uruchamiasz ten skrypt, a także dołożyć wszelkich starań, aby przeczytać i zrozumieć, co robi przed uruchomieniem.

Nie testowałem bardzo rygorystycznie, więc YMMV.

#!/bin/bash

mkdir "mp3s"
for f in *.m4a;
do
    bitrate=$(avprobe "${f}" 2> >(grep bitrate) | sed 's/^.*bitrate://g' | sed 's/[^0-9]*//g')
    bitrate="${bitrate}K"
    new_filename=$(echo "${f}" | sed 's/.m4a$/.mp3/g')
    ffmpeg -y -i "${f}" -acodec libmp3lame -ab "${bitrate}" "mp3s/${new_filename}"
done

0

Jeśli pracujesz w 48 KhZ i co najmniej 24-bit w pliku wejściowym (z edytora plików i.ex.) -q:a 0odtworzy 20 kHz w tak dużym pliku jak flac ... Ale dźwięk niskiej jakości, chyba że zmniejszysz szum z wysokich częstotliwości (syk) przez dithering lub reduktor dźwięku edytory audio, utworzone w konwersjach, które zostaną odtworzone, a następnie wykorzystają plik danych jako niesłyszalny dźwięk wysokiej częstotliwości, ale kosztowny hałas.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.