
Recherche avancée
Médias (29)
-
#7 Ambience
16 octobre 2011, par
Mis à jour : Juin 2015
Langue : English
Type : Audio
-
#6 Teaser Music
16 octobre 2011, par
Mis à jour : Février 2013
Langue : English
Type : Audio
-
#5 End Title
16 octobre 2011, par
Mis à jour : Février 2013
Langue : English
Type : Audio
-
#3 The Safest Place
16 octobre 2011, par
Mis à jour : Février 2013
Langue : English
Type : Audio
-
#4 Emo Creates
15 octobre 2011, par
Mis à jour : Février 2013
Langue : English
Type : Audio
-
#2 Typewriter Dance
15 octobre 2011, par
Mis à jour : Février 2013
Langue : English
Type : Audio
Autres articles (103)
-
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 -
De l’upload à la vidéo finale [version standalone]
31 janvier 2010, parLe chemin d’un document audio ou vidéo dans SPIPMotion est divisé en trois étapes distinctes.
Upload et récupération d’informations de la vidéo source
Dans un premier temps, il est nécessaire de créer un article SPIP et de lui joindre le document vidéo "source".
Au moment où ce document est joint à l’article, deux actions supplémentaires au comportement normal sont exécutées : La récupération des informations techniques des flux audio et video du fichier ; La génération d’une vignette : extraction d’une (...) -
Encodage et transformation en formats lisibles sur Internet
10 avril 2011MediaSPIP transforme et ré-encode les documents mis en ligne afin de les rendre lisibles sur Internet et automatiquement utilisables sans intervention du créateur de contenu.
Les vidéos sont automatiquement encodées dans les formats supportés par HTML5 : MP4, Ogv et WebM. La version "MP4" est également utilisée pour le lecteur flash de secours nécessaire aux anciens navigateurs.
Les documents audios sont également ré-encodés dans les deux formats utilisables par HTML5 :MP3 et Ogg. La version "MP3" (...)
Sur d’autres sites (6438)
-
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
-
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.


-
avcodec/mpegvideo_dec : Move memcpy'ing ctx to mpeg4videodec.c
29 avril, par Andreas Rheinhardtavcodec/mpegvideo_dec : Move memcpy'ing ctx to mpeg4videodec.c
When the destination MpegEncContext in ff_mpeg_update_thread_context()
is not initialized, the source MpegEncContext is simply copied
over it before (potentially) calling ff_mpv_common_init().
This leads to data races when this code is executed which is why
it should be replaced with only copying the necessary fields
(this is for future commits).Given that the RV30 and RV40 decoders always call said function
with an already initialized MpegEncContext (they use context_reinit
in case of frame size changes), they don't need this ugly
initialization (and are therefore race-free). This means that
this code can be moved to the only decoder that actually needs it :
MPEG-4. This commit does so.Signed-off-by : Andreas Rheinhardt <andreas.rheinhardt@outlook.com>