Kategória: Python

  • 🎧 Audio Playback API – FastAPI + Socket alapú vezérlés

    Ez a projekt egy Python alapú REST API, amely lehetővé teszi hangfájlok lejátszását, vezérlését és állapotának lekérdezését egy socket-alapú lejátszómagon keresztül. A rendszer FastAPI-ra épül, és a háttérben egy socket szerveren keresztül kommunikál a lejátszó modulokkal.

    🧠 Működés röviden

    • A REST API parancsokat fogad HTTP-n keresztül (pl. /play, /stop, /volume).
    • Ezeket a parancsokat JSON formátumban továbbítja egy helyi socket szervernek (alapértelmezetten 127.0.0.1:9999).
    • A socket válaszként visszaküld egy JSON választ, amelyet az API továbbít a kliensnek.

    🚀 Telepítés

    1. Követelmények:
    pip install fastapi uvicorn
    1. API indítása:
    uvicorn api_server:app --host 127.0.0.1 --port 8010 --reload

    Feltételezi, hogy a fájl neve api_server.py.


    📡 API végpontok és használatuk

    🔊 POST /play

    Hangfájl lejátszása.

    Bemeneti JSON:

    {
      "file_path": "/path/to/audio.wav",
      "start_ms": 0,
      "volume": 100,
      "start_at": 1721981243.0
    }
    
    KulcsTípusAlapértelmezettLeírás
    file_pathstringA lejátszandó WAV fájl elérési útja
    start_msint0Hanyadik milliszekundumtól induljon a lejátsás
    volumeint100Kezdő hangerő 0–100 között
    start_atfloatNoneOpcionális abszolút Unix timestamp, mikor induljon

    Példa válasz:

    {
      "id": "thread_001",
      "status": "started"
    }

    ⏹️ POST /stop

    Lejátszás leállítása adott azonosító alapján.

    Bemeneti JSON:

    {
      "id": "thread_001"
    }
    KulcsTípusLeírás
    idstringA lejátszási szál azonosítója

    Példa válasz:

    {
      "status": "stopped",
      "id": "thread_001"
    }

    🔉 POST /volume

    Hangerő módosítása egy aktív lejátszási szálhoz.

    Bemeneti JSON:

    {
      "id": "thread_001",
      "volume": 80
    }
    KulcsTípusLeírás
    idstringA lejátszási szál azonosítója
    volumeintÚj hangerő érték 0–100 között

    Példa válasz:

    {
      "status": "volume_changed",
      "id": "thread_001",
      "volume": 80
    }

    📊 GET /status

    Jelenlegi rendszerállapot lekérdezése.

    Nincs bemenet.

    Példa válasz:

    {
      "active_threads": [
        {
          "id": "thread_001",
          "file_path": "/path/to/audio.wav",
          "position_ms": 23456,
          "volume": 80
        }
      ]
    }

    🧩 Modulok leírása

    • PlayRequest: lejátszási paramétereket tartalmaz (útvonal, időzítés, hangerő).
    • ControlRequest: szálazonosító alapján vezérlő parancsokat küld.
    • VolumeRequest: hangerő szabályozásához használt modell.
    • send_socket_command(): TCP socket kapcsolaton küldi a parancsokat a háttér lejátszó processznek.

    ⚠️ Hibakezelés

    Ha a socket kapcsolat sikertelen, az API 500 Internal Server Error válasszal tér vissza, a kivétel szöveges részletével a detail mezőben.


    📌 Megjegyzés

    A rendszer feltételezi, hogy egy külön háttérben futó socket szerver (lejátszó) elérhető a 127.0.0.1:9999 címen, amely értelmezi a "action" mezővel ellátott JSON parancsokat.


    🛠️ Fejlesztési lehetőségek

    • További vezérlők: PAUSE, RESUME, SEEK
    • Felhasználói autentikáció
    • Webes felület a REST API-hoz

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

  • Python virtuális környezet létrehozása

    A Python virtuális környezet egy elkülönített Python-futtatási környezet, amely lehetővé teszi, hogy egy adott projekt saját függőségeit kezelje anélkül, hogy a rendszerszintű Python-környezetet módosítaná.

    Ez különösen hasznos, mert:

    • Elkerülheted a verzióütközéseket, ha különböző projektek más-más csomagverziókat igényelnek.
    • Izolált környezetet biztosít, így nem kell rendszerszinten telepítened minden Python csomagot.
    • Könnyen kezelhető és eltávolítható, ha már nincs rá szükség.

    Hogyan hozz létre és használj Python virtuális környezetet?

    1️⃣ Virtuális környezet létrehozása
    A következő parancs létrehoz egy új virtuális környezetet az env nevű mappába:

    python3 -m venv env

    Az env lehet bármilyen név, amit választasz.

    2️⃣ Virtuális környezet aktiválása

    Linux/macOS:

    source env/bin/activate

    Windows (Command Prompt):

    env\Scripts\activate

    Windows (PowerShell):

    .\env\Scripts\Activate

    Amikor a virtuális környezet aktív, a parancssor elején megjelenik az (env) jelzés.

    3️⃣ Csomagok telepítése a virtuális környezetbe

    Megjegyzés: pip helyett pip3 alkalmazása lehet szükséges Python 3 verziókban. De még jobb a pipx alkalmazása, mely automatikusan kezeli a virtuális környezeteket Python alkalmazásokhoz.

    pipx telepítése:

    # Telepítsd a pipx-et 
    sudo apt install pipx 
    
    # Add hozzá a pipx bin könyvtárát a PATH-hoz 
    pipx ensurepath

    pipx install requests

    4️⃣ Telepített csomagok listázása

    pipx list

    5️⃣ Virtuális környezet kikapcsolása

    A virtuális környezet elhagyásához:

    deactivate

    6️⃣ Virtuális környezet törlése

    Egyszerűen töröld az env mappát:

    rm -rf env # Linux/macOS
    rd /s /q env # Windows (Command Prompt)

    Ha sok különböző projekthez szeretnél virtuális környezeteket használni, akkor érdemes a pipx eszközt is megnézni, ami automatizáltan kezeli a különálló Python alkalmazásokat.

    Példa: YouTube Live stream rögzítése FFMPEG segítségével