Kategória: Szoftver

  • FFMPEG – IceCast2 környezet elindítása

    Ez a leírás újraindítja a PulseAudio hangrendszert a felhasználói környezetben. Hasznos akkor, ha a PulseAudio hibásan működik, nem lehet hozzá kapcsolódni, vagy új modult (pl. virtual sink) szeretnénk betölteni.

    Script: /home/mtm/pulseaudio-reboot.sh

    A szkript:

    1. Leállítja a PulseAudio-t.

    2. Törli a cache és konfigurációs fájlokat (~/.config/pulse és ~/.pulse).

    3. Beállítja az XDG_RUNTIME_DIR környezeti változót.

    4. Elindítja a PulseAudio-t újra.

    5. Betölti a module-null-sink modult VirtualSink néven.

    6. Beállítja a VirtualSink-et alapértelmezetként.

    7. Ha kéred, elindítja az FFMPEG – IceCast2 kapcsolatot

    A szkript megtalálható itt is: /home/mtm/html/mtm.project/systems/vlcbroadcast/sh

    Tesztelés, hibaelhárítás

    Közvetlenül PulseAudio teszt VirtualSink kimenetre

    paplay –device=VirtualSink /usr/share/sounds/alsa/Front_Center.wav

    Ha megszólal, ellőrizni kell, hogy PulseAudio Controll beállításai között a Default Sink értékét, melynek VirtualSink beállítást kell, hogy tartalmazza.

    pactl info

    Ha nem megfelelő a beállítás:

    pactl set-default-sink VirtualSink

    Ellenőrizzük, hogy megtörtént-e a beállítás.

    pactl info

    Ha megfelelő a beállítás, próbáld meg a Controll VLC-vel elindítani egy lejátszást!

    cvlc /home/mtm/html/mtm.project/ramdrive/temp/024.wav

    Ha megjelent a hang az IceCast2 szerveren, akkor lehet tesztelni az REST API – SOCKET párost.

  • JACK Audio Connection Kit

    A JACK Audio Connection Kit egy rendkívül erőteljes és rugalmas eszköz, amely lehetővé teszi a professzionális audiofeldolgozás végzését Linux környezetben. A telepítési és konfigurálási útmutató, valamint a példák és megoldások segítenek a felhasználóknak abban, hogy a JACK-ot sikeresen használhassák saját projektjeikben.

    Telepítés

    A JACK telepítése az Ubuntu Server rendszerre a következő lépéseken keresztül történik:

    Nyisd meg a terminált a szerveren.

    Frissítsd a csomaglistát az alábbi parancs végrehajtásával:

    sudo apt update

    Töltsd le és telepítsd a JACK csomagot:

    sudo apt install jackd2

    A telepítés végén ellenőrizd, hogy a JACK sikeresen telepítve lett:

    jackd --version

    Megjegyzés: A JACK telepítése előtt ajánlott telepíteni a következő csomagokat is, amelyek támogatják a JACK működését:

    • libjack-jackd2-0
    • qjackctl (grafikus kezelőfelület a JACK számára)
    • pulseaudio-module-jack (ha PulseAudio-t használsz)

    Konfiguráció

    A JACK konfigurálásához szükség van néhány alapvető beállításra, amelyek az audio rendszered és az eszközeid specifikációitól függenek. Az alábbiakban bemutatjuk a legfontosabb konfigurációs lehetőségeket:

    1. JACK hangkártya beállítások

    A JACK indítása előtt meg kell határoznod, hogy melyik hangkártyát szeretnéd használni. Ezt a következő parancs segítségével teheted meg:

    jackd -d alsa -d hw:0

    Itt a „-d alsa” jelzi, hogy az ALSA (Advanced Linux Sound Architecture) drivert használod, míg a „-d hw:0” a 0. számú hangkártyádat jelöli.

    2. Késleltetés beállítása

    A JACK késleltetésének beállítása kulcsfontosságú a valós idejű audio feldolgozáshoz. A következő parancs segítségével állíthatod be:

    jackd -d alsa -p 128 -n 2

    Itt a „-p 128” a mintát (buffer) méretét, míg a „-n 2” a minták számát jelöli. A megfelelő érték kiválasztása az alkalmazásaid teljesítményétől és a rendszered terhelésétől függ.

    Használati példák

    Példa 1: Live Zeneprodukcó JACK-kal

    Tegyük fel, hogy élő zenei produkciót szeretnél létrehozni a JACK segítségével. Ehhez csatlakoztathatsz különböző audio forrásokat, mint például mikrofonokat és hangszereket, majd kezelheted azokat egy DAW (Digital Audio Workstation) szoftver segítségével, mint az Ardour vagy a Reaper.

    Példa 2: JACK használata virtuális hangkártyával

    A JACK képes virtuális hangkártyák létrehozására is. Például, ha a JACK-et PulseAudio eszközként használod, a következő parancsot futtathatod:

    qjackctl

    Ez megnyitja a grafikus felületet, ahol kezelheted a különböző csatlakozásokat és beállításokat.

    Példa 3: Audioprocessing és MIDI

    A JACK lehetőséget biztosít MIDI eszközök használatára is. Felállíthatsz egy egyszerű rendszert, ahol például egy MIDI billentyűzetet használsz virtuális hangszerekkel. A MIDI csatornák beállításához a következő parancsot futtathatod:

    aconnect -i

    Ez lehetővé teszi, hogy látd az összes elérhető MIDI bemenetet.

    Troubleshooting

    A következő szakaszban a JACK-el kapcsolatos leggyakoribb 10 hibajelenséget és azok megoldásait találod.

    1. A JACK nem indítható el: Ellenőrizd, hogy egy másik alkalmazás nem használja-e a hangkártyát.
    2. Folyamatos pops és kattogó hang: Növeld a késleltetést a jackd indításakor.
    3. Alacsony hangszint: Ellenőrizd a JACK keverőt, és állítsd be a hangerőt vagy a fő keverőt.
    4. Nem hallható a bemeneti jel: Győződj meg arról, hogy a bemeneti eszköz helyesen van csatlakoztatva és aktív.
    5. Fluctuáló késleltetés: Próbáld csökkenteni más alkalmazások által használt CPU-teljesítményt.
    6. JACK és PulseAudio konfliktus: A PulseAudio-t le kell állítani, mielőtt a JACK-et indítanád.
    7. Raymond D. Johansen hiba: Frissítsd a JACK és a PulseAudio verzióját.
    8. Az eszközök nem láthatók a JACK felületén: Ellenőrizd a JACK beállításait, és győződj meg arról, hogy a források aktiválva vannak.
    9. A JACK nem reagál a MIDI parancsokra: Használj egy megfelelő MIDI-routing szoftvert, mint pl. a a2jmidid.
    10. Szabványos hibaüzenetek: Nézd át a rendszer naplófájljait, és próbáld meg kitalálni a problémát a log alapján.

    JACK telepítése és konfigurálása hangkártya nélküli környezetben

    Az Ubuntu Server környezetben a JACK Audio Connection Kit (JACK) egy professzionális hangkiszolgáló API, amely valós idejű, alacsony késleltetésű kapcsolatokat biztosít az audio- és MIDI-adatok között különböző alkalmazások számára. Ez különösen hasznos professzionális online rádiók létrehozásához, még olyan hardverkörnyezetben is, ahol nincs dedikált hangkártya.

    JACK telepítése és konfigurálása hangkártya nélküli környezetben

    Telepítés: Az Ubuntu Serveren a JACK telepítése az alábbi parancsokkal történik:

    sudo apt-get update sudo apt-get install jackd2

    Virtuális hangkártya beállítása:

    Hangkártya hiányában az alsa_loopback modult használhatjuk virtuális hangkártyaként:

    sudo modprobe snd-aloop 

    A modul automatikus betöltéséhez a rendszer indításakor adjuk hozzá a /etc/modules fájlhoz:

    echo "snd-aloop" | sudo tee -a /etc/modules

    JACK konfigurálása: A JACK indításához és a virtuális eszköz használatához az alábbi parancsot használhatjuk:

    jackd -d alsa -d hw:Loopback,0 

    Ez a parancs az ALSA Loopback eszközt használja bemenetként és kimenetként.

    DarkIce integráció

    A DarkIce egy élő audio streamer, amely képes hangot rögzíteni egy audio interfészről, kódolni azt, és továbbítani egy streaming szerverre, például IceCast vagy ShoutCast.

    Hozzunk létre egy konfigurációs fájlt, például /etc/darkice.cfg, az alábbi tartalommal:

    duration = 0 # Felvétel időtartama másodpercben, 0 a végtelenhez bufferSecs = 5 # Puffer mérete másodpercben reconnect = yes # Újracsatlakozás megszakadás esetén [input] 
    device = jack # Bemeneti eszköz sampleRate = 44100 # Mintavételezési frekvencia bitsPerSample = 16 # Bitek száma mintánként channel = 2 # Csatornák száma (sztereó) 
    [icecast2-0] 
    bitrateMode = cbr # Bitráta mód (állandó) format = mp3 # Kimeneti formátum bitrate = 128 # Bitráta kbps-ben server = localhost port = 8000 password = jelszo mountPoint = stream name = My Radio Station

    A DarkIce indítása a konfigurációs fájl használatával:

    darkice -c /etc/darkice.cfg

    SoundCollider integráció

    A SoundCollider egy Python alapú eszköz, amely lehetővé teszi az audiofolyamok valós idejű feldolgozását és manipulálását.

    Telepítés: Győződjünk meg arról, hogy a Python és a szükséges csomagok telepítve vannak:

    sudo apt-get install python3 python3-pip pip3 install soundcollider

    Használat: Az alábbi Python példa bemutatja, hogyan lehet egy egyszerű audiofolyamot létrehozni és feldolgozni a SoundCollider segítségével:

    from soundcollider import * 
    # JACK kliens létrehozásaclient = JackClient(name="MyRadio") 
    
    # Audio forrás létrehozása source = AudioSource(client, "input") 
    # Effekt lánc létrehozása effect = EffectChain(source)effect.add(Reverb()) effect.add(EQ()) 
    # Kimenet létrehozása output = AudioOutput(effect, "output") 
    # Futtatás client.run() 

    Ez a kód egy JACK klienst hoz létre, amely egy bemeneti forrást olvas, alkalmaz egy effektláncot (például visszhang és EQ), majd a feldolgozott hangot egy kimenetre küldi.

    Összefoglalás

    A JACK, a DarkIce és a SoundCollider együttes használata lehetővé teszi egy professzionális online rádióállomás létrehozását Ubuntu Server környezetben, még hangkártya nélküli hardveren is. A JACK biztosítja a valós idejű audio útvonalakat, a DarkIce kezeli a streaminget, míg a SoundCollider lehetővé teszi az audiofolyamok valós idejű feldolgozását és manipulálását Pythonban.

    A JACK API főbb funkciói és lehetőségei:

    1. Kliens létrehozása és kezelése: Az alkalmazások JACK kliensként regisztrálhatnak a jack_client_open() függvény segítségével, amely kapcsolatot létesít a JACK szerverrel. A kliens regisztrálása után az alkalmazás képes lesz audioadatokat küldeni és fogadni.
    2. Portok létrehozása és kezelése: A kliensek portokat hozhatnak létre az audioadatok küldésére és fogadására. A portok lehetnek bemeneti vagy kimeneti típusúak, és az alkalmazások ezeken keresztül kommunikálhatnak más JACK kliensekkel vagy hardvereszközökkel.
    3. Folyamat visszahívás (process callback) beállítása: A kliensek regisztrálhatnak egy folyamat visszahívási függvényt, amelyet a JACK szerver hív meg minden feldolgozási ciklusban. Ez a függvény felelős az audioadatok feldolgozásáért valós időben.
    4. Időkezelés: A JACK API időkezelési funkciókat is biztosít, amelyek lehetővé teszik az alkalmazások számára az időbélyegek és a mintavételezési frekvenciák kezelését, biztosítva a pontos időzítést a hangfeldolgozás során.
    5. Szállítási és időbázis vezérlés: A JACK támogatja a szállítási vezérlést, amely lehetővé teszi az alkalmazások számára a lejátszás, megállítás és pozicionálás vezérlését egy közös idővonalon, megkönnyítve az együttműködést több kliens között.
    6. MIDI adatkezelés: A JACK API támogatja a MIDI adatkezelést is, lehetővé téve az alkalmazások számára a MIDI üzenetek küldését és fogadását valós időben.

    Python és JACK együttműködés

    Python és JACK együttműködésére több lehetőség is rendelkezésre áll, főként a jackclient-python és a PyAudio csomagok segítségével. Ezek lehetővé teszik Python alkalmazások számára, hogy valós időben csatlakozzanak a JACK audio szerverhez, kezeljék az audiofolyamokat, és akár valós idejű hangfeldolgozást is végezzenek.


    1. jackclient-python használata

    A jackclient-python csomag egy Python wrapper a JACK API-hoz, amely lehetővé teszi Python alkalmazások számára a JACK szerver kezelését, az audioadatok átvitelét és a MIDI kommunikációt.

    Telepítés

    A jackclient-python csomagot a következő paranccsal telepítheted:

    pip3 install jack-client

    Egyszerű JACK kliens Pythonban

    A következő példa bemutat egy alapvető Python JACK klienst, amely a bemeneti audiojelet továbbítja a kimenetre:

    import jack
    # JACK kliens létrehozása
    client = jack.Client("MyPythonClient")
    # Bemeneti és kimeneti portok létrehozása
    client.inports.register("input")
    client.outports.register("output")
    # Feldolgozási visszahívás beállítása
    @client.set_process_callback
    def process(frames):
        in_buffer = client.inports[0].get_array()
        out_buffer = client.outports[0].get_array()
        out_buffer[:] = in_buffer  # Másolás bemenetből a kimenetbe
    
    # JACK kapcsolat aktiválása
    with client:
        client.connect("system:capture_1", client.inports[0].name)
        client.connect(client.outports[0].name, "system:playback_1")
        input("Nyomj Entert a kilépéshez...\n")
    

    📌 Mit csinál a fenti kód?

    • Létrehoz egy JACK klienst „MyPythonClient” néven.
    • Létrehoz egy bemeneti (input) és egy kimeneti (output) portot.
    • A process() függvény minden JACK feldolgozási ciklusban lemásolja a bemeneti adatokat a kimeneti portba.
    • A rendszer bemenetét (system:capture_1) összeköti a kliens bemenetével.
    • A kliens kimeneti portját összeköti a rendszer lejátszó csatornájával (system:playback_1).

    2. JACK és Python MIDI feldolgozása

    A JACK MIDI képességeit is használhatjuk Pythonban:

    @client.set_midi_process_callback
    def process_midi(frames):
        for port in client.midi_inports:
            for message in port.incoming_midi_events():
                print(f"MIDI üzenet érkezett: {message.bytes}")

    📌 Mit csinál ez a kód?

    • A JACK MIDI portokon beérkező üzeneteket figyeli és kiírja a konzolra.

    3. JACK és PyAudio kombinálása

    A PyAudio csomag is használható JACK interfésszel. Az alábbi kód egy JACK-alapú hangrögzítést és visszajátszást valósít meg PyAudio segítségével:

    import pyaudio
    
    p = pyaudio.PyAudio()
    
    # JACK kompatibilis bemenet és kimenet létrehozása
    stream = p.open(format=pyaudio.paInt16,
                    channels=2,
                    rate=44100,
                    input=True,
                    output=True,
                    input_device_index=0,
                    output_device_index=0)
    
    print("Felvétel és lejátszás indítása...")
    while True:
        data = stream.read(1024)
        stream.write(data)
    

    📌 Mit csinál ez a kód?

    • Felveszi az audio adatokat és azonnal visszajátssza őket.
    • A JACK audió interfészként való használatához a JACK kompatibilis hangkártyát kell kiválasztani PyAudio konfigurációban.

    4. JACK + Python egy online rádióhoz (DarkIce és IceCast)

    Egy Python program, amely egy JACK-alapú hangstreamet továbbít IceCast szerverre:

    import subprocess
    
    darkice_conf = """
    [general]
    duration = 0
    bufferSecs = 5
    reconnect = yes
    
    [input]
    device = jack
    sampleRate = 44100
    bitsPerSample = 16
    channel = 2
    
    [icecast2-0]
    bitrateMode = cbr
    format = mp3
    bitrate = 128
    server = localhost
    port = 8000
    password = hackme
    mountPoint = myradio
    name = MyPythonRadio
    """
    
    with open("/tmp/darkice.cfg", "w") as f:
        f.write(darkice_conf)
    
    # DarkIce indítása Pythonból
    subprocess.run(["darkice", "-c", "/tmp/darkice.cfg"])

    📌 Mit csinál ez a kód?

    • Dinamikusan létrehoz egy darkice.cfg fájlt.
    • A DarkIce-t elindítja a fájl alapján, ami a JACK hangfolyamot továbbítja egy IceCast szerverre.

    Összegzés

    Python és JACK együttműködése számos lehetőséget kínál:

    Valós idejű audio adatfeldolgozás
    MIDI eszközök kezelése
    Online rádió streaming (DarkIce, IceCast)
    Hangszintézis és effektfeldolgozás (SuperCollider, SoundCollider)
    Alacsony késleltetésű hangkeverés

    JACK és Python kombinációjával könnyen létrehozhatsz egyéni hangfeldolgozó alkalmazásokat, rádióállomásokat, vagy akár valós idejű MIDI vezérelt rendszereket.

  • FFMPEG: audio stream normalizálása

    Az ffmpeg tartalmaz egy loudnorm nevű filtert, amely kiegyensúlyozza a hangerőt az EBU R128 szabvány szerint. Egy másik lehetőség a dynaudnorm (Dynamic Audio Normalizer), amely valós időben végzi a hangerőkiegyenlítést.

    Az alábbi parancs egy Icecast streamet fogad forrásként, normalizálja a hangerőt, majd továbbítja egy másik Icecast szerverre:

    ffmpeg -i http://forras-stream-url/orosfm.mp3 \
    -filter_complex "dynaudnorm=f=150:g=5" \
    -c:a libmp3lame -b:a 128k -content_type audio/mpeg \
    -f mp3 icecast://user:password@cel-szerver:8000/stream.mp3

    Magyarázat a parancshoz

    • -i http://forras-stream-url/orosfm.mp3 → Forrásstream megadása.
    • -filter_complex "dynaudnorm=f=150:g=5"Dynamic Audio Normalizer:
      • f=150: Frekvenciatartomány (minél magasabb, annál simább).
      • g=5: Maximális hangerő növekedés (dB-ben).
    • -c:a libmp3lame -b:a 128k → MP3 kódolás, 128 kbps bitráta.
    • -content_type audio/mpeg → Megfelelő MIME-típus beállítása Icecast számára.
    • -f mp3 → MP3 formátum beállítása.
    • icecast://user:password@cel-szerver:8000/stream.mp3 → Cél Icecast szerver címe, felhasználónévvel és jelszóval.

    Alternatíva: loudnorm használata (precízebb, de késleltethet)

    Ha pontosabb normalizálást akarsz az EBU R128 szabvány szerint, használhatod a loudnorm filtert:

    ffmpeg -i http://forras-stream-url/orosfm.mp3 \ -filter_complex "loudnorm=I=-16:TP=-1:LRA=11" \ -c:a libmp3lame -b:a 128k -content_type audio/mpeg \ -f mp3 icecast://user:password@cel-szerver:8000/stream.mp3

    Paraméterek magyarázata:

    I=-16 → Integrated loudness (integrált hangerő) -16 LUFS

    Ez az átlagos hangerősség a teljes audio időtartama alatt.

    Ajánlott értékek:

    • Streaming (Spotify, YouTube, Apple Music, stb.): általában -14 vagy -16 LUFS.
    • TV és rádióadások (EBU R128 szabvány): általában -23 LUFS.

    TP=-1 → True Peak (csúcshangerő) -1 dBFS

    A digitális hangban a maximális csúcshangszint (Peak Level) korlátozása.

    Ajánlott értékek:

    • CD-mastering: -0.3 dBFS
    • Streaming szolgáltatások: -1 dBFS (biztonsági tartaléknak)

    LRA=11 → Loudness Range (hangerő dinamika tartomány) 11 LU

    A halk és hangos részek közötti dinamikai különbség. Minél kisebb az érték, annál kiegyenlítettebb a hangerő.

    Ajánlott értékek:

    • Podcastok, beszédhangok: 3-6 LU (kevés dinamika)
    • Film, zene, rádió: 8-15 LU (nagyobb dinamika)

    Melyiket válaszd?

    • dynaudnorm: Javasolt valós idejű stream esetén, mert gyors és dinamikusan alkalmazkodik.
    • loudnorm: Ha pontosabb és szabványosított normalizálást szeretnél, de kicsit késleltethet.

    A measure és apply módok használata

    Ha további finomhangolásra van szükséged, akkor az FFmpeg ezt a szűrőt képes kétlépcsős normalizálásra is használni (measure és apply módokkal).

    Az FFmpeg loudnorm szűrőjét kétlépcsős módban is használhatod, ami precízebb hangerő-normalizálást biztosít. Ez különösen hasznos lehet, ha az audioanyagok nagyon eltérő hangerőszintekkel rendelkeznek.

    🔹 1. lépés: Elemzés (measure mód)

    Elsőként lefuttatjuk az FFmpeg-et úgy, hogy csak analizálja a hangerőt, de nem módosítja az audiot.

    ffmpeg -i input.mp3 -af loudnorm=I=-16:TP=-1:LRA=11:print_format=json -f null -

    Mit csinál ez?

    • Nem módosítja az audiot, csak elemzi.
    • A parancs végén JSON formátumban kiírja a szükséges hangerőértékeket, például:
    {
    "input_i": "-20.3",
    "input_tp": "-2.5",
    "input_lra": "6.2",
    "input_thresh": "-30.0",
    "output_i": "-16.0",
    "output_tp": "-1.0",
    "output_lra": "11.0",
    "output_thresh": "-26.0",
    "target_offset": "0.0"
    }

    Ezek az értékek kellenek majd a következő lépésben. Jegyezd fel őket!

    🔹 2. lépés: Alkalmazás (apply mód)

    Most használjuk a kapott értékeket, hogy normalizáljuk az audiot.

    ffmpeg -i input.mp3 -af loudnorm=I=-16:TP=-1:LRA=11:measured_I=-20.3:measured_TP=-2.5:measured_LRA=6.2:measured_thresh=-30.0:offset=0.0 -c:a libmp3lame -b:a 192k output.mp3

    Mit csinál ez?

    • Az elemzett értékeket használja fel a hangerő precíz beállításához.
    • Megőrzi a dinamikát, de minden egyes részlet a kívánt -16 LUFS hangerőszinten lesz.
    • Megakadályozza a torzítást, mivel a csúcshangerő (-1 dBFS) limitálva van.

    Összegzés

    1. Elemzés (measure) → Megkapod a hangerőadatokat.
    2. Alkalmazás (apply) → A kapott adatokkal normalizálod az audiot.

    Ez a kétlépcsős megoldás sokkal pontosabb, mint az egyetlen loudnorm futtatása, mert az FFmpeg így nem csak találomra állítja be a hangerőt, hanem konkrét mérési adatok alapján dolgozik.

    Tipp: Ha Icecast streamre alkalmaznád ezt, akkor a második lépésben output.mp3 helyett közvetlenül streamelheted az eredményt:

    ffmpeg -i http://forras-stream-url/orosfm.mp3 -af loudnorm=I=-16:TP=-1:LRA=11:measured_I=-20.3:measured_TP=-2.5:measured_LRA=6.2:measured_thresh=-30.0:offset=0.0 -c:a libmp3lame -b:a 128k -f mp3 icecast://user:password@cel-szerver:8000/stream.mp3

  • YouTube-DLP

    A YouTube-DLP (röviden yt-dlp) egy fejlettebb, aktívan karbantartott, nyílt forráskódú eszköz, amelyet videók és audió fájlok letöltésére használnak különböző weboldalakról, köztük a YouTube-ról, Twitch-ről, Facebookról és sok más platformról.

    Az yt-dlp a youtube-dl egy továbbfejlesztett verziója, amely számos új funkcióval és fejlesztéssel bővült.

    Mire használható?

    1️⃣ Videók letöltése

    Bármilyen publikus vagy nem listázott YouTube-videó letöltése:

    yt-dlp "https://www.youtube.com/watch?v=VIDEO_ID"

    A letöltött fájl alapértelmezetten a legjobb elérhető minőségben kerül mentésre.

    2️⃣ Csak az audió letöltése (például MP3 formátumban)

    Ha csak a hangfájlt szeretnéd letölteni, például zenehallgatás céljából:

    yt-dlp -x --audio-format mp3 "https://www.youtube.com/watch?v=VIDEO_ID"

    Magyarázat:

    • -x: Az audió kivonása a videóból.
    • --audio-format mp3: Az audió MP3 formátumba konvertálása.

    3️⃣ Lejátszási listák letöltése

    Egy teljes YouTube lejátszási lista letöltése:

    yt-dlp -f best "https://www.youtube.com/playlist?list=PLAYLIST_ID"

    Ez az összes videót letölti a lejátszási listából.

    4️⃣ Élő közvetítések rögzítése

    YouTube Live vagy más streaming szolgáltatások élő adásának mentése:

    yt-dlp -f best "https://www.youtube.com/live/STREAM_ID" -o "live_recording.mp4"

    🔹 Tipp: Ha folyamatosan rögzíteni szeretnéd az élő adást:

    yt-dlp -f best -o "live_%Y-%m-%d_%H-%M-%S.mp4" "https://www.youtube.com/live/STREAM_ID"

    Ez időbélyegzővel ellátott fájlokat hoz létre.

    5️⃣ Csak a letöltési URL lekérése (HLS/M3U8 stream elérése)

    Ha egy adott videó közvetlen stream URL-jére van szükséged (például FFMPEG-hez), futtasd:

    yt-dlp -g "https://www.youtube.com/watch?v=VIDEO_ID"

    Ez visszaadja az MP4 vagy HLS stream elérési útját.

    6️⃣ Letöltési formátum megadása

    A kívánt formátum kiválasztása (pl. 1080p MP4 letöltése):

    yt-dlp -f "bestvideo[height<=1080]+bestaudio" "https://www.youtube.com/watch?v=VIDEO_ID"

    Magyarázat:

    • bestvideo[height<=1080]: A legjobb 1080p vagy alacsonyabb felbontású videó letöltése.
    • +bestaudio: A legjobb hang letöltése és automatikus egyesítése a videóval.

    7️⃣ Feliratok letöltése

    Ha egy YouTube-videóhoz felirat is elérhető, letöltheted az alábbi paranccsal:

    yt-dlp --write-subs --sub-lang en "https://www.youtube.com/watch?v=VIDEO_ID"

    🔹 Tipp: Az összes elérhető nyelvű felirat letöltése:

    yt-dlp --write-auto-sub --all-subs "https://www.youtube.com/watch?v=VIDEO_ID"

    8️⃣ YouTube Premium tartalmak letöltése

    Ha van YouTube Premium előfizetésed, bejelentkezhetsz az yt-dlp-be, hogy privát videókat vagy prémium tartalmakat tölts le:

    yt-dlp --cookies cookies.txt "https://www.youtube.com/watch?v=VIDEO_ID"

    Ehhez előbb exportálnod kell a YouTube sütiadataidat a böngésződből.

  • YouTube Live stream rögzítése FFMPEG segítségével

    URL-ben lévő élő videót FFMPEG-gel rögzíteni Ubuntu szerveren úgy, hogy 20 perces darabokban hoz létre fájlokat. A YouTube Live stream rögzítése FFMPEG segítségével megoldható, de mivel a YouTube nem támogatja közvetlenül az FFMPEG URL alapú stream-rögzítését, a folyamatnak két lépése van, Python könyvtár használatával.

    1. A stream URL beszerzése:
      Erre például a yt-dlp (Python – YouTube-DLP) használható, amely képes a YouTube élő adásának közvetlen HLS (HTTP Live Streaming) URL-jét lekérni.
    2. A stream rögzítése FFMPEG-gel
      A HLS URL-t FFMPEG-gel rögzítheted, miközben 20 perces szegmensekre osztod a fájlokat.

    Az újabb Python verziók védik a rendszerszintű Python-környezetet a pip-el történő módosításoktól. Ezért a rendszer nem engedélyezi a pip-en keresztüli csomagtelepítést a rendszerszintű Pythonba.

    Virtuális környezet létrehozásáról bővebben itt.

    A YouTube-DLP önállóan is futtatható Windows és Linux környezetben is. A YouTube-DLP (röviden yt-dlp) egy fejlettebb, aktívan karbantartott, nyílt forráskódú eszköz, amelyet videók és audió fájlok letöltésére használnak különböző weboldalakról, köztük a YouTube-ról, Twitch-ről, Facebookról és sok más platformról. Az yt-dlp a youtube-dl egy továbbfejlesztett verziója, amely számos új funkcióval és fejlesztéssel bővült.

    A YouTube-DLP (yt-dlp) leírása bővebben itt.

    1. Használj virtuális környezetet, valamint pipxet a csomag telepítéséhez (Ajánlott)

    Ez a legbiztonságosabb módszer, mivel elkülönített Python-környezetet hoz létre:

    # Virtuális környezet létrehozása 
    python3 -m venv yt-dlp-env 
    
    # Aktiváld a virtuális környezetet 
    source yt-dlp-env/bin/activate 
    
    # Telepítsd a yt-dlp-t
    pipx install yt-dlp
    
    # A `yt-dlp` használata
    yt-dlp --version

    A virtuális környezet (venv) vagy a pipx használata jobb megoldás, mivel ezek nem módosítják a rendszerszintű Python-környezetet, és könnyebben kezelhetők

    2. Szerezd meg a HLS URL-t

    Használd a következő parancsot a YouTube élő adás stream URL-jének lekéréséhez:

    yt-dlp -g "https://www.youtube.com/live/SpTcIBfDvg4?si=kc1YfCGIg5Zq4hZ7"

    A parancs a stream közvetlen HLS URL-jét adja vissza, például:

    https://manifest.googlevideo.com/api/manifest/hls_playlist/... (hosszú URL)

    HLS URL használata bash scriptben:

    #!/bin/bash
    
    # HLS URL lekérése 
    HLS_URL=$(yt-dlp -g "https://www.youtube.com/live/SpTcIBfDvg4?si=kc1YfCGIg5Zq4hZ7")
    
    # Csak az audio stream  rögzítése - 20 perces darabokban
    ffmpeg -i "$HLS_URL" - -vn -acodec libmp3lame -b:a 192k -f segment -segment_time 1200 -reset_timestamps 1 output_%03d.mp3

    Megjegyzés: az FFMPEG megszakadhat, ha a hálózati kapcsolat instabil, ezért érdemes a folyamatot monitorozni vagy újraindítási logikát hozzáadni.

  • Reverse Proxy beállítások

    Az mtmdoc.startradio.hu oldal internetes elérhetőségét biztosító kiszolgálás: Apache2 (reverse proxy) – Nginx (webserver).

    Subdomain: mtmdoc.startradio.hu

    SSL tanúsítvány: Let’s Encrypt – Certbot

    Kiszolgálás útvonala: [MikroTik Roter (213.157.112.63 – NAT on port 443)] – [Router Server – Apache2 (192.168.66.146 – HTTPS Reverse Proxy )] – [Dell-R330 – Nginx (192.168.66.12:8081 – HTTP config: mtm.doc)]

    Feladat

    A rendszer egyetlen nyilvános IP-címen keresztül több weboldalt szolgál ki. Az egyes weboldalak forráskönyvtárai a helyi hálózat (LAN) különböző szerverein is elhelyezkedhetnek. Az interneten is elérhető router NAT szolgáltatást nyújt, amely a 80-as (HTTP) és 443-as (HTTPS) portokra érkező kéréseket egy Apache2 szerverhez irányítja. Ez a szerver Reverse Proxy szerepet lát el, és a domain alapú kéréseket továbbítja a megfelelő tartalmat biztosító helyi szerverhez.

    Az oldalak HTTPS protokollal érhetők el az internet felől, de a webszerverek HTTP kapcsolattal működnek a belső hálózaton. Ha egy szerver több oldalt is kiszolgál, azok más-más porton érhetőek el.

    Probléma

    A Reverse Proxy beállítása viszonylag egyszerű, de a WordPress esetében nem simaügy a permalinkek kezelése miatt. Ebben az esetben Nginx a webes tartalom kiszolgálója WordPress motorral. A permalinkek feldolgozása az Apache2 esetében a .htaccess fájlban leírt szabályok szerint történik, de az Nginx nem használja ezt a fájlt. Így az egyszerű reverse proxy beállítások nem működtek, de az itt leírt beállítások szerint az mtmdoc.startradio.hu oldal elérhetővé vált a WordPress motorral is.