Jak przekonwertować plik dźwiękowy na Opus

22

Do testów chcę przekonwertować plik MP3 i WAV na Opus, jakie są kroki, aby to zrobić?

Luis Alvarado
źródło
1
@EvanCarroll Stąd część zatytułowana „Do testowania”;)
Luis Alvarado
2
@EvanCarroll To zależy od tego, co chcesz osiągnąć i jakości materiału wejściowego. Jeśli szukasz absolutnego audiofilskiego rozwiązania, prawdopodobnie nigdy nie chcesz brać pod uwagę Opus. Mówienie, że to okropny pomysł, jest po prostu okropnym stwierdzeniem, gdy nie ma wyjaśnienia.
LiveWireBT
1
@LiveWireBT Mówi, że kodowanie mp3 w opusie nie jest okropnym pomysłem, chyba że szukasz absolutnego audiofilskiego rozwiązania, to tylko okropne stwierdzenie, gdy nie ma wyjaśnienia.
Evan Carroll
2
@EvanCarroll Opus specjalizuje się w obsłudze mowy, MP3 nie. Oznacza to, że można zmniejszyć swoje podcasty i audiobooki znacząco pod względem wielkości bez zauważalnej utraty jakości. Nie rozumiem, jak to jest okropny pomysł.
Christian
3
@EvanCarroll „automatyczne wykrywanie mowy lub muzyki, aby zdecydować, którego trybu kodowania użyć” z opus-codec.org . I oczywiście poniesiesz stratę jakości. Dlatego jest to stratny kodek. Powiedziałeś, że to nigdy nie jest uzasadnione i dałem ci dobry przykład, w którym rozmiar jest ogromnym problemem, jakość drugorzędnego znaczenia i niedostępne źródło bezstratne.
Christian

Odpowiedzi:

23

Domyślnie konwerter audio dostarczany z opus-tools może konwertować audio w formacie raw, wave lub AIFF. Minimalna składnia wykorzystuje ustawienia domyślne:

opusenc input.wav output.opus

Możemy chcieć dodać lepszą przepływność jako domyślną 96 kb / s z opcją --bitrate N.nnn(wszystkie opcje znajdziesz na stronie man dla opusenc).

Aby przekonwertować mp3 „w locie”. tzn. bez tworzenia pliku tymczasowego możemy przesłać dane wyjściowe z avconv do opusenc w następujący sposób:

avconv -i input.mp3 -f wav - | opusenc --bitrate 256 - output.opus
Takkat
źródło
Gdzie uzyskać „opusenc”?
shevy
1
@shevy: pochodzi z opus-tools .
Takkat
@shevy: $ sudo apt install opus-tools
Jose Barakat
1
Aby to zrobić na wielu plikach flac: for f in *.flac; do ffmpeg -i "$f" -f wav - | opusenc --bitrate 140 - "${f%.flac}.opus"; done(Wybrałem 140 jako bitrate, ponieważ zgodnie z tym wystarcza na pliki stereo.
Joschua
11

Ubuntu 14.04 i Debian 8 są dostarczane z wersją 9 libav-toolsw swoich repozytoriach i ma wbudowaną obsługę Opus poprzez pakiet libopus0.

Przykład 1: Ponownie zakoduj plik audio jako opus

W wersji 9 libav-toolsi libopus0zainstalowanej możesz po prostu na przykład:

avconv -i file.mp3 -map 0:a -codec:a opus -b:a 100k -vbr on file.opus

Co robią opcje

  • -i file.mp3 ustawia plik wejściowy.
  • -map 0:awybierze wszystkie strumienie audio ( a) z pliku wejściowego 0. Przeczytaj więcej -mapna https://libav.org/avconv.html#Advanced-options
  • -codec:a opuswybiera koder opus dla strumieni audio ( a). Dowiedz się więcej -codecna https://libav.org/avconv.html#Main-options .
  • -b:a 100kustawia bitrate audio na 100 kilobitów / s. Dowiedz się więcej -bna https://libav.org/avconv.html#Codec-AVOptions
  • -vbr onwłącza zmienną szybkość transmisji. Jest to opcja specyficzna dla libopus. Oto wszystkie opcje dla libopus:

    $ avconv -h full | grep opus -A 11
    avconv version 9.11-6:9.11-3+b2, Copyright (c) 2000-2013 the Libav developers
      built on Apr  6 2014 17:45:45 with gcc 4.8 (Debian 4.8.2-16)
    libopus AVOptions:
    -application       <int>   E..A. Intended application type
       voip                    E..A. Favor improved speech intelligibility
       audio                   E..A. Favor faithfulness to the input
       lowdelay                E..A. Restrict to only the lowest delay modes
    -frame_duration    <float> E..A. Duration of a frame in milliseconds
    -packet_loss       <int>   E..A. Expected packet loss percentage
    -vbr               <int>   E..A. Variable bit rate mode
       off                     E..A. Use constant bit rate
       on                      E..A. Use variable bit rate
       constrained             E..A. Use constrained VBR
    
  • file.opus ustawia plik wyjściowy.

Przykład 2: Pobierz plik audio z pliku wideo i zakoduj go jako opus

Weź drugi strumień pierwszego wejścia ( -map 0:1), który jest strumieniem audio. Zakoduj go przy użyciu libopus przy prędkości 100 kbit / s ze zmienną przepływnością na:

$ avconv -stats -i linuxactionshowep309-432p.mp4 -map 0:1 -c libopus -b 100k linuxactionshowep309-432p-audio-only.opus
avconv version 9.11-6:9.11-3+b2, Copyright (c) 2000-2013 the Libav developers
  built on Apr  6 2014 17:45:45 with gcc 4.8 (Debian 4.8.2-16)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'linuxactionshowep309-432p.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf55.33.100
  Duration: 01:14:48.45, start: 0.042667, bitrate: 466 kb/s
    Stream #0.0(und): Video: h264 (High), yuv420p, 768x432 [PAR 1:1 DAR 16:9], 330 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc
    Stream #0.1(und): Audio: aac, 48000 Hz, stereo, fltp, 128 kb/s
Output #0, ogg, to 'linuxactionshowep309-432p-audio-only.opus':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf54.20.3
    Stream #0.0(und): Audio: libopus, 48000 Hz, stereo, flt, 100 kb/s
Stream mapping:
  Stream #0:1 -> #0:0 (aac -> libopus)
Press ctrl-c to stop encoding
size=   54360kB time=4488.47 bitrate=  99.2kbits/s    
video:0kB audio:53875kB global headers:0kB muxing overhead 0.900602%

Po mediainfozainstalowaniu pakietu :

$ mediainfo linuxactionshowep309-432p-audio-only.opus
General
Complete name                            : linuxactionshowep309-432p-audio-only.opus
Format                                   : OGG
File size                                : 53.1 MiB
Duration                                 : 1h 14mn
Overall bit rate                         : 99.2 Kbps
Writing application                      : Lavf54.20.3
major_brand                              : isom
minor_version                            : 512
compatible_brands                        : isomiso2avc1mp41

Audio
ID                                       : 2104437746 (0x7D6F2BF2)
Format                                   : Opus
Duration                                 : 1h 14mn
Channel(s)                               : 2 channels
Channel positions                        : Front: L R
Sampling rate                            : 48.0 KHz
Compression mode                         : Lossy
Writing library                          : Lavf54.20.3
Daniel Jonsson
źródło
1
Doskonale działa na Ubuntu 14.04! Czy możesz wyjaśnić, co -map 0:arobi? (A może uszczegółowić całą linię?)
425nesp
@ piña Zaktualizowałem odpowiedź z wyjaśnieniem argumentów i dodatkowym przykładem.
Daniel Jonsson
5

Opus 12.04

Jednak w dniu 12.04 (Precyzyjne) występują problemy z zależnością podczas instalowania kodeków i narzędzi opus, więc znalazłem zdecydowanie najlepsze rozwiązanie, które stało się dostępne bardzo niedawno: skompiluj koder i dekoder audio opus, jak wspomniano tutaj , i buduj ffmpegz obsługą opus, dodając --enable-opusdo opcji konfiguracji ffmpeg(wymienionych w przewodniku kompilacji ).

Wiem, że ffmpegjest to przestarzałe w Ubuntu na korzyść Libav, ale kompilacja jest dobrym sposobem na zintegrowanie w pełni działającego kodera / dekodera opus ffmpeg. Następnie możesz go użyć do konwersji plików (najpierw do wav), a następnie do .opus. Dokumentacja zainstalowana z libopus i ffmpeg ujawni wszystkie opcje, których można użyć do konwersji plików.

Podczas konwertowania plików ffmpegpo kompilacji musisz określić -acodec libopuslub ffmpegnie używać kodeka opus:

ffmpeg -i pc.wav -ar 48000 -ac 2 -acodec libopus -ab 256k man.opus

Następnie możesz przetestować plik utworzony za pomocą

ffplay man.opus

Wskazówki dotyczące kompilacji

Nie ma potrzeby reprodukowania tego przewodnika w całości, ale warto zauważyć jedną lub dwie rzeczy:

  • Najpierw powinieneś zainstalować zależności zgodnie z listą (pomijam yasmz listy: patrz mój drugi punkt):

     sudo apt-get -y install autoconf build-essential checkinstall git libass-dev libfaac-dev libgpac-dev libjack-jackd2-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev librtmp-dev libsdl1.2-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libx11-dev libxext-dev libxfixes-dev pkg-config texi2html zlib1g-dev
    
  • Jest jedna kwestia, na którą należy zwrócić uwagę: kompilacja git wydaje się być potrzebna yasm-1.2i nie jest dostępna, więc musisz skompilować źródło z oficjalnej strony , ale jest to proste. Wystarczy usunąć wszystkie zainstalowane wersje yasm, a następnie rozpakować pobrane archiwum cddo folderu, uruchomić, ./configure && makea następnie sudo checkinstall. Jeśli jakiekolwiek inne kompilacje wymagają wcześniejszej wersji, możesz po prostu usunąć tę wersję i zainstalować wersję repozytorium.

  • Jest to konieczne, aby usunąć wszelkie istniejące libav, ffmpeg, x264, libvpx, lub fdk-aacpakiety przed rozpoczęciem kompilacji.

  • Jest krytyczny , że skompilować i zainstalować x264, fdk-aac, libvpxa opusprzed budować ffmpeg, jak te biblioteki zostaną wykorzystane w budowie.

  • Nie zapomnij dodać --enable-opusdo opcji konfiguracji po uruchomieniu ffmpegkompilacji.

  • Skompilowana wersja opus to 1.1alpha, więc może być konieczne ponowne skompilowanie biblioteki opus i ffmpeg w przyszłości, kiedy zostanie wydana nowa wersja.

  • Możesz użyć ffplaydo odtworzenia utworzonych plików opus.


źródło
ffmpeg jest złym rozwiązaniem dla wszystkiego, co jest zamiennikiem.
Evan Carroll
2
@EvanCarroll Co przez to rozumiesz? To tylko czyjaś decyzja, żeby go przestać używać: ffmpeg jest nadal tak dobry jak libav, co jest tylko jego rozwidleniem.
1
Świetna odpowiedź i dzięki za przypomnienie o wymaganiu Yasm. x264 zwiększył minimalną wersję do 1.2.0 po ostatnim pchnięciu. Przewodnik zaktualizowany o instrukcje Yasm.
llogan
@Mik Myślę, że chciał powiedzieć, że samodzielny enkoder da lepsze wyniki.
LiveWireBT
Widziałem niektóre osoby wspominające o błędzie „nie znaleziono opusa” podczas wykonywania instrukcji kompilacji ffmpeg. Miałem ten sam problem w Ubuntu 12.04, a później dowiedziałem się, że PKG_CONFIG_PATH = "$ HOME / ffmpeg_build / lib / pkgconfig" wymaga na końcu ukośnika.
3

Tak to robię:

  • Najpierw otwórz terminal w tym samym katalogu, w którym znajdują się twoje pliki audio.
  • Następnie wpisz to polecenie:
$ opusenc --bitrate 320 - max-delay 10 "18 - Soul Asylum - Runaway Train (Wersja albumu) .flac" "18 - Soul Asylum - Runaway Train (Wersja albumu) .opus"

EDYTOWAĆ:

Dla audiofilów:

$ opusenc --bitrate 510 - max-delay 10 "18 - Soul Asylum - Runaway Train (Wersja albumu) .flac" "18 - Soul Asylum - Runaway Train (Wersja albumu) .opus"

Nie musisz określać --maxdelay 10opcji, ponieważ opusencdomyślnie to rób.

Dane wyjściowe konsoli dla tej konwersji pliku ( --bitrate 320):

    Encoding using libopus 1.1.2 (audio)
    -----------------------------------------------------
       Input: 44.1kHz 2 channels
      Output: 2 channels (2 coupled)
          20ms packets, 320kbit/sec VBR
     Preskip: 356

    Encoding complete   
    -----------------------------------------------------
           Encoded: 4 minutes and 22.4 seconds
           Runtime: 8 seconds
                    (32.8x realtime)
             Wrote: 10955530 bytes, 13120 packets, 13124 pages
           Bitrate: 317.691kbit/s (without overhead)
     Instant rates: 1.2kbit/s to 510.4kbit/s
                    (3 to 1276 bytes per packet)
          Overhead: 4.89% (container+metadata)

Jest super szybki! Mniej niż 8 sekund ze złożonością 10 (Kodowanie złożoności obliczeniowej (0-10, domyślnie: 10). Zero daje najszybsze kodowanie, ale niższej jakości, podczas gdy 10 daje najwyższą jakość, ale wolniejsze kodowanie) i maksymalny czas opóźnienia 10ms ( Maksymalne opóźnienie kontenera w milisekundach (0-1000, domyślnie: 1000)), więc jeśli pominiesz czas w utworze, efekt przycinania będzie trwał 10 ms, więc będzie niewidoczny (spróbuj z 1000 i usłysz różnicę czasu pomijania z twoim mysz). Domyślnie bitrate to VBR. 320kbps działało dla mnie, więc jest opcjonalne, zagraj z tym numerem:
--bitrate N.nnn=> Docelowa przepływność w kbit / s (6-256 na kanał)

Nawiasem mówiąc, kodowanie z MP3 do OPUS nie jest dobrym pomysłem, nie będzie brzmiało lepiej, ich algorytmy kompresji są zbyt różne. Ale z FLAC, WAV lub dowolnego innego formatu Lossless Audio to inna historia.

Uwaga: Aby zakodować inny plik, wystarczy nacisnąć strzałkę w górę w tym samym terminalu, aby wywołać ostatnie polecenie i zmienić nazwę plików wejściowych i wyjściowych.
Jeśli szukasz GUI ffmpeg / avconv, być może TraGtor jest tym, czego potrzebujesz.

Możesz także sprawdzić różnice w spektrogramach między formatami bezstratnymi i bezstratnymi przy wysokich przepływnościach za pomocą Spek lub Audacity .

Jose Barakat
źródło
Nie działało to dla mnie. Rozumiem Error parsing input file: Hardvapour remix-.mp3, że używam 16.04
Sarah Szabo
Pytanie dotyczy mp3, a nie flaca.
Przywróć Monikę - M. Schröder
0
  1. Znajdź płytę CD (lub flac z CDEMU) z taką samą zawartością jak mp3.
  2. Instal opus-toolsi Audex.
  3. Otwórz Audex i dodaj nowy profil o nazwie Opus, dodaj wzór poleceń;

    opusenc $i --comment="TRACKNUMBER="$trackno"" --artist "$artist" --album "$title" --title "$ttitle" --date "$date" --picture "$cover" $o

i przyrostek opus

  1. pozwól mu zgrać!
Joel Garcia
źródło