
Recherche avancée
Autres articles (66)
-
Les autorisations surchargées par les plugins
27 avril 2010, parMediaspip core
autoriser_auteur_modifier() afin que les visiteurs soient capables de modifier leurs informations sur la page d’auteurs -
Publier sur MédiaSpip
13 juin 2013Puis-je poster des contenus à partir d’une tablette Ipad ?
Oui, si votre Médiaspip installé est à la version 0.2 ou supérieure. Contacter au besoin l’administrateur de votre MédiaSpip pour le savoir -
Supporting all media types
13 avril 2011, parUnlike most software and media-sharing platforms, MediaSPIP aims to manage as many different media types as possible. The following are just a few examples from an ever-expanding list of supported formats : images : png, gif, jpg, bmp and more audio : MP3, Ogg, Wav and more video : AVI, MP4, OGV, mpg, mov, wmv and more text, code and other data : OpenOffice, Microsoft Office (Word, PowerPoint, Excel), web (html, CSS), LaTeX, Google Earth and (...)
Sur d’autres sites (10679)
-
How to dynamically overlay images with ffmpeg
23 mai, par RorschyAs 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.


-
vulkan : temporarily disable threading for ASIC-based hwaccels
9 août, par Lynnevulkan : temporarily disable threading for ASIC-based hwaccels
The issue is that a race condition exists between threads locking
frames, which results in cyclic loops and deadlocks.Compute-based implementations are not affected.
Fixes #20169
-
Screen recording with ffmpeg has stuttering [closed]
7 novembre 2024, par Adam LabušI am recording with ffmpeg like so :
ffmpeg -f x11grab -probesize 18M -framerate 30 -video_size 1920x1080 -i :0.0+0,0 -f pulse -i -c:v libx264 -preset ultrafast -c:a aac .mkv


Problem :


Usually at the start the video starts to stutter, sometimes stuttering up to 20 seconds, each frame during this stuttering is shown for 1-5 seconds. Example video : https://drive.google.com/file/d/1uwdaFboCO2qNALgaPC8JD15W64BE3VyY/view?usp=sharing


Diagnostics :


Machine details :


OS: Fedora Linux 41 (Server Edition) x86_64
Host: HP ProDesk 600 G2 DM
Kernel: Linux 6.11.5-300.fc41.x86_64
WM: Openbox (X11)
CPU: Intel(R) Core(TM) i5-6500T (4) @ 3.10 GHz
GPU: Intel HD Graphics 530 @ 1.10 GHz [Integrated]
Memory: 884.62 MiB / 15.49 GiB (6%)
Swap: 0 B / 8.00 GiB (0%)
Disk (/): 5.45 GiB / 14.94 GiB (37%) - xfs



My gpu(20%), cpu (50%), disk utilisation is always in well perfect range - I tried stress testing gpu, ram, cpu and disk while recording and it had no effect on the recording. I tried recording to ramdisk. I always have 10gb ram available. I ran the same command on my laptop (hp 850 g5) and computer and encountered no stuttering at all.


If it matters the machine is running bare Xorg and openbox display manager


I have tried :


- 

- setting fps_mode to cfr - because the frame rate does fluctuate around 29-30 at the start
- setting fps_mode to vfr
- setting fps_mode to passthrough
- setting cfr all the way to 40
- presets veryfast, faster
- increasing thread_queue_size
- async=1
















Ffmpeg Log :


ffmpeg version 7.0.2 Copyright (c) 2000-2024 the FFmpeg developers 
 built with gcc 14 (GCC) 
 configuration: --prefix=/usr --bindir=/usr/bin --datadir=/usr/share/ffmpeg --docdir=/usr/share/doc/ffmpeg --incdir=/usr/include/ffmpeg --libdir=/usr/lib64 --mandir=/usr/share/man --arch=x86_64 --optflags='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-swi
tches -pipe -Wall -Wno-complain-wrong-lang -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 
-mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer' --extra-ldflags='-Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/re
dhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 ' --extra-cflags=' -I/usr/include/rav1e' --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libvo-amrwbenc --enable-version3 --enable-bzlib --enable-chromaprint --enable-fontcon
fig --enable-frei0r --enable-gcrypt --enable-gnutls --enable-ladspa --enable-lcms2 --enable-libaom --enable-libaribb24 --enable-libaribcaption --enable-libdav1d --enable-libass --enable-libbluray --enable-libbs2b --enable-libcodec2 --enable-libcdio --enable-libdrm --enabl
e-libjack --enable-libjxl --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libharfbuzz --enable-libilbc --enable-libmp3lame --enable-libmysofa --enable-nvenc --enable-openal --enable-opencl --enable-opengl --enable-libopenh264 --enable-libopenjpeg --enabl
e-libopenmpt --enable-libopus --enable-libpulse --enable-libplacebo --enable-librsvg --enable-librav1e --enable-librubberband --enable-libqrencode --enable-libsmbclient --enable-version3 --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh
 --enable-libsvtav1 --enable-libtesseract --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libv4l2 --enable-libvidstab --enable-libvmaf --enable-version3 --enable-vapoursynth --enable-libvpx --enable-vulkan --enable-libshaderc --enable-libwebp --enable-l
ibx264 --enable-libx265 --enable-libxvid --enable-libxml2 --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-avfilter --enable-libmodplug --enable-postproc --enable-pthreads --disable-static --enable-shared --enable-gpl --disable-debug --disable-strip
ping --shlibdir=/usr/lib64 --enable-lto --enable-libvpl --enable-runtime-cpudetect 
 libavutil 59. 8.100 / 59. 8.100 
 libavcodec 61. 3.100 / 61. 3.100 
 libavformat 61. 1.100 / 61. 1.100 
 libavdevice 61. 1.100 / 61. 1.100 
 libavfilter 10. 1.100 / 10. 1.100 
 libswscale 8. 1.100 / 8. 1.100 
 libswresample 5. 1.100 / 5. 1.100 
 libpostproc 58. 1.100 / 58. 1.100 
Input #0, x11grab, from ':0.0+0,0': 
 Duration: N/A, start: 1730923728.417205, bitrate: 1990656 kb/s 
 Stream #0:0: Video: rawvideo (BGR[0] / 0x524742), bgr0, 1920x1080, 1990656 kb/s, 30 fps, 29.92 tbr, 1000k tbn 
[aist#1:0/pcm_s16le @ 0x55a29c634a40] Guessed Channel Layout: stereo 
Input #1, pulse, from 'auto_null.monitor': 
 Duration: N/A, start: 1730923728.521148, bitrate: 1536 kb/s 
 Stream #1:0: Audio: pcm_s16le, 48000 Hz, stereo, s16, 1536 kb/s 
Stream mapping: 
 Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (libx264)) 
 Stream #1:0 -> #0:1 (pcm_s16le (native) -> aac (native)) 
Press [q] to stop, [?] for help 
[libx264 @ 0x55a29c627f00] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2 
[libx264 @ 0x55a29c627f00] profile High 4:4:4 Predictive, level 4.0, 4:4:4, 8-bit 
[libx264 @ 0x55a29c627f00] 264 - core 164 r3108 31e19f9 - H.264/MPEG-4 AVC codec - Copyleft 2003-2023 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 tre
llis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=4 threads=6 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=2 keyint=250
 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00 
Output #0, matroska, to '/tmp/tmp38n41uwz.mkv': 
 Metadata: 
 encoder : Lavf61.1.100 
 Stream #0:0: Video: h264 (H264 / 0x34363248), yuv444p(progressive), 1920x1080, q=2-31, 29.92 fps, 1k tbn 
 Metadata: 
 encoder : Lavc61.3.100 libx264 
 Side data: 
 cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A 
 Stream #0:1: Audio: aac (LC) ([255][0][0][0] / 0x00FF), 48000 Hz, stereo, fltp, 128 kb/s 
 Metadata: 
 encoder : Lavc61.3.100 aac 
frame= 915 fps= 24 q=29.0 size= 7936KiB time=00:00:35.79 bitrate=1816.0kbits/s dup=0 drop=167 speed=0.929x 
 
[q] command received. Exiting.