Címke: FFMPEG

  • 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.

  • 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 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.