Newest 'ffmpeg' Questions - Stack Overflow

http://stackoverflow.com/questions/tagged/ffmpeg

Les articles publiés sur le site

  • How do you get FFMPEG to encode with vaapi ? [closed]

    24 mai, par dicroce

    I've seen various examples of using libavcodec with vaapi to accelerated decoding, but how do you use it to accelerate encoding?

  • What Is the Difference Between asetpts and atempo in FFmpeg Audio Filters ? [closed]

    23 mai, par Eric Stdlib

    I have been using FFmpeg to slow down or speed up video files (with audio). It seems that to speed up a video, setpts=0.5*PTS should be used. However, when speeding up an audio, asetpts=0.5*PTS and atempo=2.0 are both available. What is the difference between these two options? Which is the better option?

  • Multicast video stream from Dahua IP surveillance camera - ffmpeg etc [closed]

    23 mai, par Jaroslav Mazurak

    I have a Dahua IP surveillance camera and want to get the video via a multicast stream.

    In the camera settings, I enabled Multicast streaming, IP 239.240.1.2, and port 40000 (the default). The RTSP port is 554 (the default).

    Neither VLC 3.0.21 nor ffmpeg 7.1.1 work when I try to use multicast. Both of them work when I use a unicast. OS is Windows 11 x64. Both applications are allowed in the Windows firewall (any protocol, all networks; same result if the firewall is disabled completely). I have Wireshark installed, and I see that when a client requests the stream via RTSP, the multicast traffic from the camera is present; ffmpeg determines the stream but doesn't capture any video, and the output file is empty (it contains only the header and no video). When I use unicast, the correct output video file is saved.

    I have no idea what I'm doing wrong, and why ffmpeg (and VLC) doesn't capture anything in the multicast mode.

    Here are the ffmpeg logs for multicast and unicast modes.

    Multicast:

    ffmpeg -fflags nobuffer -flags low_delay -timeout 10M -stats -rtsp_transport udp_multicast -i "rtsp://user:password@10.10.10.10:554/cam/realmonitor?channel=1&subtype=0&unicast=false" -acodec copy -vcodec copy -y output.mkv
    
    ffmpeg version 7.1.1-full_build-www.gyan.dev Copyright (c) 2000-2025 the FFmpeg developers
      built with gcc 14.2.0 (Rev1, Built by MSYS2 projffmpeg -fflags nobuffer -flags low_delay -timeout 10M -stats -i "rtsp://user:password@10.10.10.10:554/cam/realmonitor?channel=1&subtype=0" -acodec copy -vcodec copy -y output.mkv
    
    ffmpeg version 7.1.1-full_build-www.gyan.dev Copyright (c) 2000-2025 the FFmpeg developers
      built with gcc 14.2.0 (Rev1, Built by MSYS2 project)
      configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-lcms2 --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-libsnappy --enable-zlib --enable-librist --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray --enable-libcaca --enable-libdvdnav --enable-libdvdread --enable-sdl2 --enable-libaribb24 --enable-libaribcaption --enable-libdav1d --enable-libdavs2 --enable-libopenjpeg --enable-libquirc --enable-libuavs3d --enable-libxevd --enable-libzvbi --enable-libqrencode --enable-librav1e --enable-libsvtav1 --enable-libvvenc --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxeve --enable-libxvid --enable-libaom --enable-libjxl --enable-libvpx --enable-mediafoundation --enable-libass --enable-frei0r --enable-libfreetype --enable-libfribidi --enable-libharfbuzz --enable-liblensfun --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-dxva2 --enable-d3d11va --enable-d3d12va --enable-ffnvcodec --enable-libvpl --enable-nvdec --enable-nvenc --enable-vaapi --enable-libshaderc --enable-vulkan --enable-libplacebo --enable-opencl --enable-libcdio --enable-libgme --enable-libmodplug --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libshine --enable-libtheora --enable-libtwolame --enable-libvo-amrwbenc --enable-libcodec2 --enable-libilbc --enable-libgsm --enable-liblc3 --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-ladspa --enable-libbs2b --enable-libflite --enable-libmysofa --enable-librubberband --enable-libsoxr --enable-chromaprint
      libavutil      59. 39.100 / 59. 39.100
      libavcodec     61. 19.101 / 61. 19.101
      libavformat    61.  7.100 / 61.  7.100
      libavdevice    61.  3.100 / 61.  3.100
      libavfilter    10.  4.100 / 10.  4.100
      libswscale      8.  3.100 /  8.  3.100
      libswresample   5.  3.100 /  5.  3.100
      libpostproc    58.  3.100 / 58.  3.100
    Input #0, rtsp, from 'rtsp://user:password@10.10.10.10:554/cam/realmonitor?channel=1&subtype=0':
      Metadata:
        title           : Media Server
      Duration: N/A, start: 0.000000, bitrate: N/A
      Stream #0:0: Video: hevc (Main), yuv420p(tv), 2560x1440, 25 fps, 25 tbr, 90k tbn
    Stream mapping:
      Stream #0:0 -> #0:0 (copy)
    Output #0, matroska, to 'output.mkv':
      Metadata:
        title           : Media Server
        encoder         : Lavf61.7.100
      Stream #0:0: Video: hevc (Main), yuv420p(tv), 2560x1440, q=2-31, 25 fps, 25 tbr, 1k tbn
    Press [q] to stop, [?] for help
    frame=    0 fps=0.0 q=-1.0 size=       0KiB time=00:00:01.32 bitrate=   0.0kbits/s speed= 2.6x    
    frame=    0 fps=0.0 q=-1.0 size=       0KiB time=00:00:01.84 bitrate=   0.0kbits/s speed=1.81x    
    frame=   10 fps=6.5 q=-1.0 size=       1KiB time=00:00:02.36 bitrate=   2.2kbits/s speed=1.53x    
    frame=   23 fps= 11 q=-1.0 size=       1KiB time=00:00:02.88 bitrate=   1.8kbits/s speed= 1.4x    
    frame=   36 fps= 14 q=-1.0 size=       1KiB time=00:00:03.40 bitrate=   1.5kbits/s speed=1.33x    
    frame=   49 fps= 16 q=-1.0 size=       1KiB time=00:00:03.92 bitrate=   1.3kbits/s speed=1.27x    
    frame=   62 fps= 17 q=-1.0 size=     256KiB time=00:00:04.44 bitrate= 472.3kbits/s speed=1.23x    
    frame=   75 fps= 18 q=-1.0 size=     256KiB time=00:00:04.96 bitrate= 422.8kbits/s speed= 1.2x    
    frame=   88 fps= 19 q=-1.0 size=     256KiB time=00:00:05.48 bitrate= 382.7kbits/s speed=1.18x    
    frame=  100 fps= 19 q=-1.0 size=     256KiB time=00:00:05.96 bitrate= 351.9kbits/s speed=1.16x    
    frame=  113 fps= 20 q=-1.0 size=     768KiB time=00:00:06.48 bitrate= 970.9kbits/s speed=1.14x    
    frame=  126 fps= 20 q=-1.0 size=     768KiB time=00:00:07.00 bitrate= 898.8kbits/s speed=1.13x    
    frame=  139 fps= 21 q=-1.0 size=     768KiB time=00:00:07.52 bitrate= 836.6kbits/s speed=1.12x    
    frame=  152 fps= 21 q=-1.0 size=    1280KiB time=00:00:08.04 bitrate=1304.2kbits/s speed=1.11x    
    frame=  165 fps= 21 q=-1.0 size=    1280KiB time=00:00:08.56 bitrate=1225.0kbits/s speed=1.11x    
    frame=  178 fps= 22 q=-1.0 size=    1280KiB time=00:00:09.08 bitrate=1154.8kbits/s speed= 1.1x    
    frame=  191 fps= 22 q=-1.0 size=    1280KiB time=00:00:09.60 bitrate=1092.3kbits/s speed= 1.1x    
    frame=  203 fps= 22 q=-1.0 size=    1792KiB time=00:00:10.08 bitrate=1456.4kbits/s speed=1.09x    
    frame=  217 fps= 22 q=-1.0 size=    1792KiB time=00:00:10.64 bitrate=1379.7kbits/s speed=1.09x    
    
    
    [q] command received. Exiting.
    
    [out#0/matroska @ 000001e0329cad80] video:2377KiB audio:0KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: 0.100389%
    frame=  230 fps= 22 q=-1.0 Lsize=    2380KiB time=00:00:11.16 bitrate=1746.9kbits/s speed=1.08x    
    ect)
      configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-lcms2 --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-libsnappy --enable-zlib --enable-librist --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray --enable-libcaca --enable-libdvdnav --enable-libdvdread --enable-sdl2 --enable-libaribb24 --enable-libaribcaption --enable-libdav1d --enable-libdavs2 --enable-libopenjpeg --enable-libquirc --enable-libuavs3d --enable-libxevd --enable-libzvbi --enable-libqrencode --enable-librav1e --enable-libsvtav1 --enable-libvvenc --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxeve --enable-libxvid --enable-libaom --enable-libjxl --enable-libvpx --enable-mediafoundation --enable-libass --enable-frei0r --enable-libfreetype --enable-libfribidi --enable-libharfbuzz --enable-liblensfun --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-dxva2 --enable-d3d11va --enable-d3d12va --enable-ffnvcodec --enable-libvpl --enable-nvdec --enable-nvenc --enable-vaapi --enable-libshaderc --enable-vulkan --enable-libplacebo --enable-opencl --enable-libcdio --enable-libgme --enable-libmodplug --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libshine --enable-libtheora --enable-libtwolame --enable-libvo-amrwbenc --enable-libcodec2 --enable-libilbc --enable-libgsm --enable-liblc3 --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-ladspa --enable-libbs2b --enable-libflite --enable-libmysofa --enable-librubberband --enable-libsoxr --enable-chromaprint
      libavutil      59. 39.100 / 59. 39.100
      libavcodec     61. 19.101 / 61. 19.101
      libavformat    61.  7.100 / 61.  7.100
      libavdevice    61.  3.100 / 61.  3.100
      libavfilter    10.  4.100 / 10.  4.100
      libswscale      8.  3.100 /  8.  3.100
      libswresample   5.  3.100 /  5.  3.100
      libpostproc    58.  3.100 / 58.  3.100
    Input #0, rtsp, from 'rtsp://user:password@10.10.10.10:554/cam/realmonitor?channel=1&subtype=0&unicast=false':
      Metadata:
        title           : Media Server
      Duration: N/A, bitrate: N/A
      Stream #0:0: Video: hevc (Main), yuv420p(tv), 2560x1440, 25 tbr, 90k tbn
    Stream mapping:
      Stream #0:0 -> #0:0 (copy)
    Output #0, matroska, to 'output.mkv':
      Metadata:
        title           : Media Server
        encoder         : Lavf61.7.100
      Stream #0:0: Video: hevc (Main), yuv420p(tv), 2560x1440, q=2-31, 25 tbr, 1k tbn
    Press [q] to stop, [?] for help
    frame=    0 fps=0.0 q=-1.0 size=       0KiB time=N/A bitrate=N/A speed=N/A    
    frame=    0 fps=0.0 q=-1.0 size=       0KiB time=N/A bitrate=N/A speed=N/A    
    frame=    0 fps=0.0 q=-1.0 size=       0KiB time=N/A bitrate=N/A speed=N/A    
    frame=    0 fps=0.0 q=-1.0 size=       0KiB time=N/A bitrate=N/A speed=N/A    
    frame=    0 fps=0.0 q=-1.0 size=       0KiB time=N/A bitrate=N/A speed=N/A    
    frame=    0 fps=0.0 q=-1.0 size=       0KiB time=N/A bitrate=N/A speed=N/A    
    frame=    0 fps=0.0 q=-1.0 size=       0KiB time=N/A bitrate=N/A speed=N/A    
    frame=    0 fps=0.0 q=-1.0 size=       0KiB time=N/A bitrate=N/A speed=N/A    
    frame=    0 fps=0.0 q=-1.0 size=       0KiB time=N/A bitrate=N/A speed=N/A    
    frame=    0 fps=0.0 q=-1.0 size=       0KiB time=N/A bitrate=N/A speed=N/A    
    frame=    0 fps=0.0 q=-1.0 size=       0KiB time=N/A bitrate=N/A speed=N/A    
    frame=    0 fps=0.0 q=-1.0 size=       0KiB time=N/A bitrate=N/A speed=N/A    
    frame=    0 fps=0.0 q=-1.0 size=       0KiB time=N/A bitrate=N/A speed=N/A    
    frame=    0 fps=0.0 q=-1.0 size=       0KiB time=N/A bitrate=N/A speed=N/A    
    frame=    0 fps=0.0 q=-1.0 size=       0KiB time=N/A bitrate=N/A speed=N/A    
    frame=    0 fps=0.0 q=-1.0 size=       0KiB time=N/A bitrate=N/A speed=N/A    
    frame=    0 fps=0.0 q=-1.0 size=       0KiB time=N/A bitrate=N/A speed=N/A    
    frame=    0 fps=0.0 q=-1.0 size=       0KiB time=N/A bitrate=N/A speed=N/A    
    frame=    0 fps=0.0 q=-1.0 size=       0KiB time=N/A bitrate=N/A speed=N/A    
    frame=    0 fps=0.0 q=-1.0 size=       0KiB time=N/A bitrate=N/A speed=N/A    
    frame=    0 fps=0.0 q=-1.0 size=       0KiB time=N/A bitrate=N/A speed=N/A    
    [in#0/rtsp @ 0000014b1a80a580] Error during demuxing: Error number -138 occurred
    [out#0/matroska @ 0000014b1a7ee700] video:0KiB audio:0KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: unknown
    [out#0/matroska @ 0000014b1a7ee700] Output file is empty, nothing was encoded
    frame=    0 fps=0.0 q=-1.0 Lsize=       1KiB time=N/A bitrate=N/A speed=N/A    
    

    Unicast:

    ffmpeg -fflags nobuffer -flags low_delay -timeout 10M -stats -i "rtsp://user:password@10.10.10.10:554/cam/realmonitor?channel=1&subtype=0" -acodec copy -vcodec copy -y output.mkv
    
    ffmpeg version 7.1.1-full_build-www.gyan.dev Copyright (c) 2000-2025 the FFmpeg developers
      built with gcc 14.2.0 (Rev1, Built by MSYS2 project)
      configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-lcms2 --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-libsnappy --enable-zlib --enable-librist --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray --enable-libcaca --enable-libdvdnav --enable-libdvdread --enable-sdl2 --enable-libaribb24 --enable-libaribcaption --enable-libdav1d --enable-libdavs2 --enable-libopenjpeg --enable-libquirc --enable-libuavs3d --enable-libxevd --enable-libzvbi --enable-libqrencode --enable-librav1e --enable-libsvtav1 --enable-libvvenc --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxeve --enable-libxvid --enable-libaom --enable-libjxl --enable-libvpx --enable-mediafoundation --enable-libass --enable-frei0r --enable-libfreetype --enable-libfribidi --enable-libharfbuzz --enable-liblensfun --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-dxva2 --enable-d3d11va --enable-d3d12va --enable-ffnvcodec --enable-libvpl --enable-nvdec --enable-nvenc --enable-vaapi --enable-libshaderc --enable-vulkan --enable-libplacebo --enable-opencl --enable-libcdio --enable-libgme --enable-libmodplug --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libshine --enable-libtheora --enable-libtwolame --enable-libvo-amrwbenc --enable-libcodec2 --enable-libilbc --enable-libgsm --enable-liblc3 --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-ladspa --enable-libbs2b --enable-libflite --enable-libmysofa --enable-librubberband --enable-libsoxr --enable-chromaprint
      libavutil      59. 39.100 / 59. 39.100
      libavcodec     61. 19.101 / 61. 19.101
      libavformat    61.  7.100 / 61.  7.100
      libavdevice    61.  3.100 / 61.  3.100
      libavfilter    10.  4.100 / 10.  4.100
      libswscale      8.  3.100 /  8.  3.100
      libswresample   5.  3.100 /  5.  3.100
      libpostproc    58.  3.100 / 58.  3.100
    Input #0, rtsp, from 'rtsp://user:password@10.10.10.10:554/cam/realmonitor?channel=1&subtype=0':
      Metadata:
        title           : Media Server
      Duration: N/A, start: 0.000000, bitrate: N/A
      Stream #0:0: Video: hevc (Main), yuv420p(tv), 2560x1440, 25 fps, 25 tbr, 90k tbn
    Stream mapping:
      Stream #0:0 -> #0:0 (copy)
    Output #0, matroska, to 'output.mkv':
      Metadata:
        title           : Media Server
        encoder         : Lavf61.7.100
      Stream #0:0: Video: hevc (Main), yuv420p(tv), 2560x1440, q=2-31, 25 fps, 25 tbr, 1k tbn
    Press [q] to stop, [?] for help
    frame=    0 fps=0.0 q=-1.0 size=       0KiB time=00:00:01.32 bitrate=   0.0kbits/s speed= 2.6x    
    frame=    0 fps=0.0 q=-1.0 size=       0KiB time=00:00:01.84 bitrate=   0.0kbits/s speed=1.81x    
    frame=   10 fps=6.5 q=-1.0 size=       1KiB time=00:00:02.36 bitrate=   2.2kbits/s speed=1.53x    
    frame=   23 fps= 11 q=-1.0 size=       1KiB time=00:00:02.88 bitrate=   1.8kbits/s speed= 1.4x    
    frame=   36 fps= 14 q=-1.0 size=       1KiB time=00:00:03.40 bitrate=   1.5kbits/s speed=1.33x    
    frame=   49 fps= 16 q=-1.0 size=       1KiB time=00:00:03.92 bitrate=   1.3kbits/s speed=1.27x    
    frame=   62 fps= 17 q=-1.0 size=     256KiB time=00:00:04.44 bitrate= 472.3kbits/s speed=1.23x    
    frame=   75 fps= 18 q=-1.0 size=     256KiB time=00:00:04.96 bitrate= 422.8kbits/s speed= 1.2x    
    frame=   88 fps= 19 q=-1.0 size=     256KiB time=00:00:05.48 bitrate= 382.7kbits/s speed=1.18x    
    frame=  100 fps= 19 q=-1.0 size=     256KiB time=00:00:05.96 bitrate= 351.9kbits/s speed=1.16x    
    frame=  113 fps= 20 q=-1.0 size=     768KiB time=00:00:06.48 bitrate= 970.9kbits/s speed=1.14x    
    frame=  126 fps= 20 q=-1.0 size=     768KiB time=00:00:07.00 bitrate= 898.8kbits/s speed=1.13x    
    frame=  139 fps= 21 q=-1.0 size=     768KiB time=00:00:07.52 bitrate= 836.6kbits/s speed=1.12x    
    frame=  152 fps= 21 q=-1.0 size=    1280KiB time=00:00:08.04 bitrate=1304.2kbits/s speed=1.11x    
    frame=  165 fps= 21 q=-1.0 size=    1280KiB time=00:00:08.56 bitrate=1225.0kbits/s speed=1.11x    
    frame=  178 fps= 22 q=-1.0 size=    1280KiB time=00:00:09.08 bitrate=1154.8kbits/s speed= 1.1x    
    frame=  191 fps= 22 q=-1.0 size=    1280KiB time=00:00:09.60 bitrate=1092.3kbits/s speed= 1.1x    
    frame=  203 fps= 22 q=-1.0 size=    1792KiB time=00:00:10.08 bitrate=1456.4kbits/s speed=1.09x    
    frame=  217 fps= 22 q=-1.0 size=    1792KiB time=00:00:10.64 bitrate=1379.7kbits/s speed=1.09x    
    
    
    [q] command received. Exiting.
    
    [out#0/matroska @ 000001e0329cad80] video:2377KiB audio:0KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: 0.100389%
    frame=  230 fps= 22 q=-1.0 Lsize=    2380KiB time=00:00:11.16 bitrate=1746.9kbits/s speed=1.08x    
    
  • Title : FFmpeg and yt-dlp not working on Render.com deployment - Node.js YouTube video processing app

    23 mai, par minhquan lavo

    I'm building a video processing application that:

    1. Downloads YouTube videos using yt-dlp
    2. Processes these videos with FFmpeg for:
      • Cutting clips from the original video
      • Adding captions/subtitles to the clips

    I'm struggling with getting both tools to work on Render.com deployment. Here's my setup:

    Backend Stack:

    • Node.js
    • Express
    • FFmpeg-related packages:
      • @ffmpeg-installer/ffmpeg: ^1.1.0
      • @ffprobe-installer/ffprobe: ^2.1.2
      • ffmpeg-static: ^5.2.0
      • fluent-ffmpeg: ^2.1.2
    • yt-dlp (installed via pip in postinstall)

    What I've tried:

    1. Added FFmpeg installation in render.yaml:
    services:
      - type: web
        name: clipthat-backend
        env: node
        buildCommand: |
          apt-get update && apt-get install -y ffmpeg
          npm install
        startCommand: npm start
    
    1. Installing yt-dlp through npm postinstall:
    "scripts": {
        "postinstall": "pip install yt-dlp"
    }
    

    The issues:

    1. FFmpeg commands fail on Render deployment:
      • Can't process video editing tasks (cutting clips)
      • Can't add captions to videos
    2. yt-dlp fails to download YouTube videos on deployment Both tools work perfectly in my local development environment, but fail after deployment to Render.

    Questions:

    1. Has anyone successfully deployed a Node.js application using both FFmpeg and yt-dlp on Render.com for video processing?
    2. Are there specific configurations needed for Python-based tools (like yt-dlp) on Render with Node.js apps?
    3. Do I need to modify the build process to properly install Python and pip before the yt-dlp installation?
    4. Is Render.com suitable for this kind of video processing application, or should I consider alternatives like DigitalOcean, AWS, etc.?

    Any help or guidance would be greatly appreciated! Let me know if you need any additional information.

  • How to dynamically overlay images with ffmpeg

    23 mai, par Rorschy

    As a part of a bigger project, I'm trying to stream a live feed using ffmpeg through RTSP while also dynamically changing subtitles depending on the situation.

    As of now, I'm able to live stream with no issue. I also came across a solution for the subtitles by using a text file.

    However, I'd like to avoid having this text file in my project. I thought about creating a picture with the subtitles and overlaying it with the screen stream. However, with my current solution, the data is streamed only when I kill the running code (data streamed for a few seconds).

    Here is the current code for this problem :

    import subprocess
    import threading
    import string
    import random
    import time
    import io
    from PIL import Image, ImageDraw, ImageFont
    
    RTSP_URL = "..."
    ffmpeg = None
    
    def generate_subtitle():
        width = 640
        height = 100
        font_size = 32
        while True:
            if ffmpeg:
                try:
                    text = ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(10))
    
                    image = Image.new("RGBA", (width, height), (0, 0, 0, 128))
                    draw = ImageDraw.Draw(image)
    
                    try:
                        font = ImageFont.truetype("arial.ttf", font_size)
                    except IOError:
                        font = ImageFont.load_default()
    
                    bbox = draw.textbbox((0, 0), text, font=font)
                    text_width = bbox[2] - bbox[0]
                    text_height = bbox[3] - bbox[1]
    
                    x = (width - text_width) // 2
                    y = (height - text_height) // 2
    
                    draw.text((x, y), text, font=font, fill=(255, 255, 255, 255))
                    buffer = io.BytesIO()
                    image.save(buffer, format="PNG")
                    ffmpeg.stdin.write(buffer.getvalue())
                    ffmpeg.stdin.flush()
                    time.sleep(5)
                except Exception as e:
                    print("Erreur d'envoi d'image :", e)
                    break
            else:
                time.sleep(1)
    
    def run_ffmpeg():
        global ffmpeg
        ffmpeg = subprocess.Popen([
            'ffmpeg',
    
            # Input 0: capture desktop
            "-f", "gdigrab",
            "-offset_x", "0",
            "-offset_y", "0",
            "-video_size", "1920x1080",
            "-i", "desktop",
    
            # Input 1: PNG overlay from stdin
            "-f", "image2pipe",
            "-vcodec", "png",
            "-i", "-",
    
            # Filter to overlay Input 1 on Input 0
            "-filter_complex", "[0:v][1:v]overlay=(main_w-overlay_w)/2:(main_h-overlay_h)-10",
    
            # Output settings
            "-vcodec", "libx264",
            "-preset", "ultrafast",
            "-tune", "zerolatency",
            "-g", "30",
            "-sc_threshold", "0",
            "-f", "rtsp",
            RTSP_URL
        ], stdin=subprocess.PIPE)
    
    threading.Thread(target=run_ffmpeg, daemon=True).start()
    
    threading.Thread(target=generate_subtitle, daemon=True).start()
    
    while True:
        time.sleep(1)
    
    

    My question is how can I stream the data correctly ? If there is another solution to change dynamically the subtitles without using a text file or a temporary file I'd be glad to hear it.