Newest 'ffmpeg' Questions - Stack Overflow

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

Les articles publiés sur le site

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

  • FFmpeg HLS input stream shows "Packet corrupt" and "timestamp discontinuity" errors when pushing to RTMP server [closed]

    22 mai, par Amul Bhatia

    I'm trying to restream an HLS URL (https://cache.fastcdn.com.my/edge/53-1.stream/index_0.m3u8?misc=87uq4HjbDEDE3TzIY95ja1ZMxA-Cm1PbOXAk16riVlU&uid=139322&ts=1747931206&e=43200&lat=1747931206&sil=5&sk=no&uip=MTEwLjIyNC4yNDIuOTg&head=aHR0cF94X2ZvcndhcmRlZF9mb3I&chid=53-1') into my RTMP server with FFmpeg. The command I use is:

    ffmpeg -i "https://cache.fastcdn.com.my/edge/53-1.stream/index_0.m3u8?misc=87uq4HjbDEDE3TzIY95ja1ZMxA-Cm1PbOXAk16riVlU&uid=139322&ts=1747931206&e=43200&lat=1747931206&sil=5&sk=no&uip=MTEwLjIyNC4yNDIuOTg&head=aHR0cF94X2ZvcndhcmRlZF9mb3I&chid=53-1" -c:v libx264 -preset veryfast -b:v 1000k -c:a aac -b:a 128k -f flv rtmp://69.62.85.241/live/streamkey
    

    getting error

    ffmpeg version 6.1.1-3ubuntu5 Copyright (c) 2000-2023 the FFmpeg developers
      built with gcc 13 (Ubuntu 13.2.0-23ubuntu3)
      configuration: --prefix=/usr --extra-version=3ubuntu5 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --disable-omx --enable-gnutls --enable-libaom --enable-libass --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libglslang --enable-libgme --enable-libgsm --enable-libharfbuzz --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-openal --enable-opencl --enable-opengl --disable-sndio --enable-libvpl --disable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-ladspa --enable-libbluray --enable-libjack --enable-libpulse --enable-librabbitmq --enable-librist --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libx264 --enable-libzmq --enable-libzvbi --enable-lv2 --enable-sdl2 --enable-libplacebo --enable-librav1e --enable-pocketsphinx --enable-librsvg --enable-libjxl --enable-shared
      libavutil      58. 29.100 / 58. 29.100
      libavcodec     60. 31.102 / 60. 31.102
      libavformat    60. 16.100 / 60. 16.100
      libavdevice    60.  3.100 / 60.  3.100
      libavfilter     9. 12.100 /  9. 12.100
      libswscale      7.  5.100 /  7.  5.100
      libswresample   4. 12.100 /  4. 12.100
      libpostproc    57.  3.100 / 57.  3.100
    [hls @ 0x60992c0c8880] Skip ('#EXT-X-VERSION:3')
    [hls @ 0x60992c0c8880] Skip ('#EXT-X-DISCONTINUITY')
        Last message repeated 9 times
    [hls @ 0x60992c0c8880] Opening 'https://cache.fastcdn.com.my/error/chunks/407.ts' for reading
        Last message repeated 1 times
    Input #0, hls, from 'https://cache.fastcdn.com.my/edge/53-1.stream/index_0.m3u8?misc=87uq4HjbDEDE3TzIY95ja1ZMxA-Cm1PbOXAk16riVlU&uid=139322&ts=1747931206&e=43200&lat=1747931206&sil=5&sk=no&uip=MTEwLjIyNC4yNDIuOTg&head=aHR0cF94X2ZvcndhcmRlZF9mb3I&chid=53-1':
      Duration: 00:01:00.00, start: 1.466667, bitrate: 0 kb/s
      Program 0
        Metadata:
          variant_bitrate : 0
      Stream #0:0: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p(tv, unknown/bt709/iec61966-2-1), 854x480 [SAR 1:1 DAR 427:240], 30 fps, 30 tbr, 90k tbn
        Metadata:
          variant_bitrate : 0
    Stream mapping:
      Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
    Press [q] to stop, [?] for help
    [libx264 @ 0x60992cd68b00] using SAR=1/1
    [libx264 @ 0x60992cd68b00] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2 AVX512
    [libx264 @ 0x60992cd68b00] profile High, level 3.1, 4:2:0, 8-bit
    [libx264 @ 0x60992cd68b00] 264 - core 164 r3108 31e19f9 - H.264/MPEG-4 AVC codec - Copyleft 2003-2023 - http://www.videolan.org/x264.html - options: cabac=1 ref=1 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=2 psy=1 psy_rd=1.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=0 threads=3 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=1 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=10 rc=abr mbtree=1 bitrate=1000 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
    Output #0, flv, to 'rtmp://69.62.85.241/live/streamkey':
      Metadata:
        encoder         : Lavf60.16.100
      Stream #0:0: Video: h264 ([7][0][0][0] / 0x0007), yuv420p(tv, unknown/bt709/iec61966-2-1, progressive), 854x480 [SAR 1:1 DAR 427:240], q=2-31, 1000 kb/s, 30 fps, 1k tbn
        Metadata:
          variant_bitrate : 0
          encoder         : Lavc60.31.102 libx264
        Side data:
          cpb: bitrate max/min/avg: 0/0/1000000 buffer size: 0 vbv_delay: N/A
    [https @ 0x60992c48fc40] Opening 'https://cache.fastcdn.com.my/error/chunks/407.ts' for reading
    [mpegts @ 0x60992c161940] Packet corrupt (stream = 0, dts = 663000).
    [hls @ 0x60992c0c8880] Packet corrupt (stream = 0, dts = 660000).
    [in#0/hls @ 0x60992c0c8780] corrupt input packet in stream 0
    [vist#0:0/h264 @ 0x60992c47ae80] timestamp discontinuity (stream id=0): -6000000, new offset= 6000000
    [https @ 0x60992c4a9d40] Opening 'https://cache.fastcdn.com.my/error/chunks/407.ts' for reading
    [mpegts @ 0x60992c161940] Packet corrupt (stream = 0, dts = 663000).
    [hls @ 0x60992c0c8880] Packet corrupt (stream = 0, dts = 660000).
    [in#0/hls @ 0x60992c0c8780] corrupt input packet in stream 0
    [vist#0:0/h264 @ 0x60992c47ae80] timestamp discontinuity (stream id=0): -6000000, new offset= 12000000
    [https @ 0x60992c48fc40] Opening 'https://cache.fastcdn.com.my/error/chunks/407.ts' for reading
    [mpegts @ 0x60992c161940] Packet corrupt (stream = 0, dts = 663000).
    [hls @ 0x60992c0c8880] Packet corrupt (stream = 0, dts = 660000).
    [in#0/hls @ 0x60992c0c8780] corrupt input packet in stream 0
    [vist#0:0/h264 @ 0x60992c47ae80] timestamp discontinuity (stream id=0): -6000000, new offset= 18000000
    [https @ 0x60992c4a9d40] Opening 'https://cache.fastcdn.com.my/error/chunks/407.ts' for reading
    [mpegts @ 0x60992c161940] Packet corrupt (stream = 0, dts = 663000).
    [hls @ 0x60992c0c8880] Packet corrupt (stream = 0, dts = 660000).
    [in#0/hls @ 0x60992c0c8780] corrupt input packet in stream 0
    [vist#0:0/h264 @ 0x60992c47ae80] timestamp discontinuity (stream id=0): -6000000, new offset= 24000000
    [https @ 0x60992c48fc40] Opening 'https://cache.fastcdn.com.my/error/chunks/407.ts' for reading
    [mpegts @ 0x60992c161940] Packet corrupt (stream = 0, dts = 663000).
    [hls @ 0x60992c0c8880] Packet corrupt (stream = 0, dts = 660000).
    [in#0/hls @ 0x60992c0c8780] corrupt input packet in stream 0
    [vist#0:0/h264 @ 0x60992c47ae80] timestamp discontinuity (stream id=0): -6000000, new offset= 30000000
    [https @ 0x60992c4a9d40] Opening 'https://cache.fastcdn.com.my/error/chunks/407.ts' for reading
    [mpegts @ 0x60992c161940] Packet corrupt (stream = 0, dts = 663000).
    [hls @ 0x60992c0c8880] Packet corrupt (stream = 0, dts = 660000).
    [in#0/hls @ 0x60992c0c8780] corrupt input packet in stream 0
    [vist#0:0/h264 @ 0x60992c47ae80] timestamp discontinuity (stream id=0): -6000000, new offset= 36000000
    [https @ 0x60992c48fc40] Opening 'https://cache.fastcdn.com.my/error/chunks/407.ts' for reading
    [mpegts @ 0x60992c161940] Packet corrupt (stream = 0, dts = 663000).
    [hls @ 0x60992c0c8880] Packet corrupt (stream = 0, dts = 660000).
    [in#0/hls @ 0x60992c0c8780] corrupt input packet in stream 0
    [vist#0:0/h264 @ 0x60992c47ae80] timestamp discontinuity (stream id=0): -6000000, new offset= 42000000
    [https @ 0x60992c4a9d40] Opening 'https://cache.fastcdn.com.my/error/chunks/407.ts' for reading
    [mpegts @ 0x60992c161940] Packet corrupt (stream = 0, dts = 663000).
    [hls @ 0x60992c0c8880] Packet corrupt (stream = 0, dts = 660000).
    [in#0/hls @ 0x60992c0c8780] corrupt input packet in stream 0
    [vist#0:0/h264 @ 0x60992c47ae80] timestamp discontinuity (stream id=0): -6000000, new offset= 48000000
    [mpegts @ 0x60992c161940] Packet corrupt (stream = 0, dts = 663000).
    [hls @ 0x60992c0c8880] Packet corrupt (stream = 0, dts = 660000).
    [in#0/hls @ 0x60992c0c8780] corrupt input packet in stream 0
    [vist#0:0/h264 @ 0x60992c47ae80] timestamp discontinuity (stream id=0): -6000000, new offset= 54000000
    [flv @ 0x60992c88a340] Failed to update header with correct duration.44.8kbits/s speed=22.6x
    [flv @ 0x60992c88a340] Failed to update header with correct filesize.
    [out#0/flv @ 0x60992cc36180] video:304kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 11.671993%
    frame= 1800 fps=685 q=-1.0 Lsize=     339kB time=00:00:59.90 bitrate=  46.4kbits/s speed=22.8x
    [libx264 @ 0x60992cd68b00] frame I:8     Avg QP: 2.07  size: 20330
    [libx264 @ 0x60992cd68b00] frame P:454   Avg QP: 0.23  size:   218
    [libx264 @ 0x60992cd68b00] frame B:1338  Avg QP: 0.21  size:    37
    [libx264 @ 0x60992cd68b00] consecutive B-frames:  0.9%  0.0%  0.0% 99.1%
    [libx264 @ 0x60992cd68b00] mb I  I16..4: 86.7%  0.3% 13.0%
    [libx264 @ 0x60992cd68b00] mb P  I16..4:  0.1%  0.0%  0.0%  P16..4:  1.4%  0.0%  0.0%  0.0%  0.0%    skip:98.6%
    [libx264 @ 0x60992cd68b00] mb B  I16..4:  0.0%  0.0%  0.0%  B16..8:  0.1%  0.0%  0.0%  direct: 0.1%  skip:99.8%  L0:59.9% L1:40.1% BI: 0.0%
    [libx264 @ 0x60992cd68b00] final ratefactor: -25.04
    [libx264 @ 0x60992cd68b00] 8x8 transform intra:0.3% inter:1.8%
    [libx264 @ 0x60992cd68b00] coded y,uvDC,uvAC intra: 13.5% 0.0% 0.0% inter: 0.2% 0.0% 0.0%
    [libx264 @ 0x60992cd68b00] i16 v,h,dc,p: 90%  6%  4%  0%
    [libx264 @ 0x60992cd68b00] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 59% 12% 28%  0%  1%  1%  0%  0%  0%
    [libx264 @ 0x60992cd68b00] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 41% 18% 19%  4%  4%  4%  3%  4%  3%
    [libx264 @ 0x60992cd68b00] i8c dc,h,v,p: 100%  0%  0%  0%
    [libx264 @ 0x60992cd68b00] Weighted P-Frames: Y:0.0% UV:0.0%
    [libx264 @ 0x60992cd68b00] kb/s:41.38
    

    However, I get repeated errors like:

    Packet corrupt (stream = 0, dts = xxxx)

    timestamp discontinuity (stream id=0)

    corrupt input packet in stream 0

    The stream partially works but seems unstable. How can I fix this error?

    my nginx.conf

    rtmp {
        server {
            listen 1935;
            chunk_size 4096;
    
            application live {
                live on;
                record off;
    
                hls on;
                hls_path /var/www/hls;
                hls_fragment 5;                  # each TS segment = 5s
                hls_playlist_length 120;         # keep last 2 minutes of stream
                hls_cleanup off;                 # do not delete old segments
            }
        }
    }
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
    
        sendfile on;
        keepalive_timeout 65;
    
        server {
            listen 81;
    
            location /hls {
                root /var/www;
                types {
                    application/vnd.apple.mpegurl m3u8;
                    video/mp2t ts;
                }
    
                add_header Cache-Control no-cache;
                add_header Access-Control-Allow-Origin *;
                add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
                add_header Access-Control-Allow-Headers 'Range';
                add_header Access-Control-Expose-Headers 'Content-Length, Content-Range';
            }
        }
    }
    

    The same url is working fine when used in browser, but extracting the stream and putting it in RTMP server and accessing my RTMP server at rtmp://69.62.85.241/live/streamkey not working

  • How to implement in-browser video editing features in a React app ? [closed]

    21 mai, par Neeru Singh

    I'm building a React app that uses AI to generate short videos (reels, explainers, etc.). The generation works well, but I want users to edit the output directly in the browser.

    Key features I need in the frontend:

    Add/style captions

    Trim, split, and reorder clips

    Sync audio, apply transitions, and preview changes

    I'm considering a custom React-based editor with drag-and-drop, timeline editing, and real-time playback.

    Question: What’s the best approach to implement these features in-browser using React? Should I use with canvas/SVG overlays? How do I handle accurate timeline syncing and user interactions? Any architectural tips or examples would be helpful.

  • openbase_dir preventing access to ffmpeg executable

    21 mai, par Arthur Gorbana

    I have installed FFMPEG on Ubuntu. In the console I ran whereis ffmpeg and I got this info:

    ffmpeg: /usr/bin/ffmpeg /usr/share/ffmpeg /usr/share/man/man1/ffmpeg.1.gz
    

    But when I enter the path on my website I get this error:

    enter image description here

    I have PHP 8.4 and AAPANEL.

    Please can you help to make my Clipbucket V5 script work?

  • How to fix "moov atom not found" error in ffmpeg ?

    21 mai, par user10664722

    Well, I'm using this project to create a Telegram bot which receives URL of .mp4 files, downloads them on server and uploads them to Telegram.

    Issue

    Everything works fine so far, except converting certain .mp4 files.

    For example if I use a sample .mp4 video from https://sample-videos.com/. Then it works fine and converts it successfully.

    But if I use a video from some random website which is also simple .mp4 file, it doesn't work and throws this error:

    [mov,mp4,m4a,3gp,3g2,mj2 @ 0x1932420] Format mov,mp4,m4a,3gp,3g2,mj2 detected only with low score of 1, misdetection possible! [mov,mp4,m4a,3gp,3g2,mj2 @ 0x1932420] moov atom not found data/720P_1500K_210306701.mp4: Invalid data found when processing input