
Recherche avancée
Médias (1)
-
Bug de détection d’ogg
22 mars 2013, par
Mis à jour : Avril 2013
Langue : français
Type : Video
Autres articles (95)
-
Les tâches Cron régulières de la ferme
1er décembre 2010, parLa gestion de la ferme passe par l’exécution à intervalle régulier de plusieurs tâches répétitives dites Cron.
Le super Cron (gestion_mutu_super_cron)
Cette tâche, planifiée chaque minute, a pour simple effet d’appeler le Cron de l’ensemble des instances de la mutualisation régulièrement. Couplée avec un Cron système sur le site central de la mutualisation, cela permet de simplement générer des visites régulières sur les différents sites et éviter que les tâches des sites peu visités soient trop (...) -
Le plugin : Podcasts.
14 juillet 2010, parLe problème du podcasting est à nouveau un problème révélateur de la normalisation des transports de données sur Internet.
Deux formats intéressants existent : Celui développé par Apple, très axé sur l’utilisation d’iTunes dont la SPEC est ici ; Le format "Media RSS Module" qui est plus "libre" notamment soutenu par Yahoo et le logiciel Miro ;
Types de fichiers supportés dans les flux
Le format d’Apple n’autorise que les formats suivants dans ses flux : .mp3 audio/mpeg .m4a audio/x-m4a .mp4 (...) -
HTML5 audio and video support
13 avril 2011, parMediaSPIP uses HTML5 video and audio tags to play multimedia files, taking advantage of the latest W3C innovations supported by modern browsers.
The MediaSPIP player used has been created specifically for MediaSPIP and can be easily adapted to fit in with a specific theme.
For older browsers the Flowplayer flash fallback is used.
MediaSPIP allows for media playback on major mobile platforms with the above (...)
Sur d’autres sites (9267)
-
ffmpeg : use vidstabtransform to overlay it over blurred background
5 novembre 2023, par konewkaI am using
ffmpeg
to concatenate multiple video clips taken from the same object over multiple timeframes. To make sure the videos are properly aligned (and therefore show the object in rougly the same position), I manually identify two points in the first frame each clip, and use that to calculate the scaling and positioning necessary for proper alignment. I'm using Python for this, and it also generates the ffmpeg command for me. When it has calculated that the appropriate scale of the video is less than 100%, that means that some parts of the frame will become black. To counter that, I overlay the scaled and positioned video over a blurred version of the original video (like this effect)

Now, additionally, some of the video clips are a bit shaky, so my flow now first applies the
vidstabdetect
andvidstabtransform
filters, and uses the transformed stabilized version as input for my final command. However, if the shaking is significant, thevidstabtransform
will zoom in and therefore I will either lose some of the details around the edges, or a black border is created around the edge. As I am later including the stabilized version of the video in the concatenation, with the possibility of it shrinking, I would rather perform thevidstabtransform
step inside my command, and use the output directly into the overlay over the blurred version. That way, I would want to achieve that the clip rotates across the frame as it is stabilized, and it is shown over the blurred background. Is it possible to achieve this using ffmpeg, or am I trying to stretch it too far ?

As a minimal example, these are my commands :


ffmpeg -i video1.mp4 -vf vidstabdetect=output=transform.trf -f null - 

ffmpeg -i video1.mp4 -vf vidstabtransform=input=transform.trf video1_stabilized.mp4

# same for video2.mp4

ffmpeg -i video1_stabilized.mp4 -i video2_stabilized.mp4 -filter_complex "
 [0:v]split=2[v0blur][v0scale];
 [v0blur]gblur=sigma=50[v0blur]; // blur the video
 [v0scale]scale=round(iw*0.8/2)*2:round(ih*0.8/2)*2[v0scale]; // scale the video
 [v0blur][v0scale]overlay=x=100:y=200[v0]; // overlay the scaled video over the blur at a specific location
 [1:v]split=2[v1blur][v1scale];
 [v1blur]gblur=sigma=50[v1blur];
 [v1scale]scale=round(iw*0.9/2)*2:round(ih*0.9/2)*2[v1scale];
 [v1blur][v1scale]overlay=x=150:y=150[v1];
 [v0][v1]concat=n=2 // concatenate the two clips" 
-c:v libx264 -r 30 out.mp4



So, I know I can put the
vidstabtransform
step into thefilter_complex
-graph (I'll do the detection in a separate step still), but can I also use it such that I can achieve the stabilization over the blurred background and have the clip move around the frame as it is stabilized ?

EDIT : so to include
vidstabtransform
into the filter graph, it would then look like this :

ffmpeg -i video1.mp4 -i video2.mp4 -filter_complex "
 [0:v]vidstabtransform=input=transform1.trf[v0stab]
 [v0stab]split=2[v0blur][v0scale];
 [v0blur]gblur=sigma=50[v0blur];
 [v0scale]scale=round(iw*0.8/2)*2:round(ih*0.8/2)*2[v0scale];
 [v0blur][v0scale]overlay=x=100:y=200[v0];
 [1:v]vidstabtransform=input=transform2.trf[v1stab]
 [v1stab]split=2[v1blur][v1scale];
 [v1blur]gblur=sigma=50[v1blur];
 [v1scale]scale=round(iw*0.9/2)*2:round(ih*0.9/2)*2[v1scale];
 [v1blur][v1scale]overlay=x=150:y=150[v1];
 [v0][v1]concat=n=2"
-c:v libx264 -r 30 out.mp4



-
Not getting partial video content while using ffmpeg
1er mai 2023, par MI SabicI'm trying to partially send a video using nodejs and
fluent-ffmpeg
. But it's failing to send the data.

When I send the video using only
fs
module only, it works fine. Here's the code.

const express = require("express");
const app = express(); 
const fs = require("fs");

const VIDEO_PATH = 'video.mp4';

app.get("/", (req, res) => {
 res.sendFile(__dirname + "/index.html");
})

app.get("/video", (req, res) => {
 const range = req.headers.range;
 if(!range) {
 res.status(400).send("Requires range header!");
 }

 const size = fs.statSync(VIDEO_PATH).size;
 const CHUNK_SIZE = 10**6;
 const start = Number(range.replace(/\D/g, ""));
 const end = Math.min(start + CHUNK_SIZE, size - 1);

 const contentLength = end - start + 1;

 const headers = {
 "Content-Range": `bytes ${start}-${end}/${size}`,
 "Accept-Ranges": 'bytes',
 "Content-Length": contentLength, 
 "Content-Type": "video/mp4"
 }

 res.writeHead(206, headers);

 const videoStream = fs.createReadStream(VIDEO_PATH, {start, end});
 videoStream.pipe(res);
})

app.listen(3000, () => {
 console.log("Server is running on port: ", 3000);
})



When I send the video after processing it using
fluent-ffmpeg
module, it doesn't work. I've simplified the code for understanding. Here's my code.

const express = require("express");
const app = express(); 
const fs = require("fs");
const ffmpegStatic = require('ffmpeg-static');
const ffmpeg = require('fluent-ffmpeg');

ffmpeg.setFfmpegPath(ffmpegStatic);

const VIDEO_PATH = 'video.mp4';

app.get("/", (req, res) => {
 res.sendFile(__dirname + "/index.html");
})

app.get("/video", (req, res) => {
 const range = req.headers.range;
 if(!range) {
 res.status(400).send("Requires range header!");
 }

 const size = fs.statSync(VIDEO_PATH).size;
 const CHUNK_SIZE = 10**6;
 const start = Number(range.replace(/\D/g, ""));
 const end = Math.min(start + CHUNK_SIZE, size - 1);

 const contentLength = end - start + 1;

 const headers = {
 "Content-Range": `bytes ${start}-${end}/${size}`,
 "Accept-Ranges": 'bytes',
 "Content-Length": contentLength, 
 "Content-Type": "video/mp4"
 }

 res.writeHead(206, headers);

 const videoStream = fs.createReadStream(VIDEO_PATH, {start, end});

 ffmpeg(videoStream)
 .outputOptions('-movflags frag_keyframe+empty_moov')
 .toFormat('mp4')
 .pipe(res);
})

app.listen(3000, () => {
 console.log("Server is running on port: ", 3000);
})



My
index.html





 
 
 
 


 <video width="50%" controls="controls">
 <source src="/video" type="video/mp4">
 </source></video>





Any help would be appreciated. Thanks in advance.


-
How to use (django-celery,RQ) worker to execute a video filetype conversion (ffmpeg) in django on heroku (My code works locally)
15 janvier 2013, par GetItDoneOne part of my website includes a form that allows users to upload video. I use ffmpeg to convert the video to flv. My media and static files are stored on Amazon S3. I can get everything to work perfectly locally, however I can't seem to figure out how to use a worker to run the video conversion subprocess in production. I have dj-celery and rq installed in my app. The code in my view that I was able to get to work locally is :
#views.py
def upload_broadcast(request):
if request.method == 'POST':
form = VideoUploadForm(request.POST, request.FILES)
if form.is_valid():
new_video=form.save()
def convert_to_flv(video):
filename = video.video_upload
sourcefile = "%s%s" % (settings.MEDIA_ROOT, filename)
flvfilename = "%s.flv" % video.id
imagefilename = "%s.png" % video.id
thumbnailfilename = "%svideos/flv/%s" % (settings.MEDIA_ROOT, imagefilename)
targetfile = "%svideos/flv/%s" % (settings.MEDIA_ROOT, flvfilename)
ffmpeg = "ffmpeg -i %s -acodec mp3 -ar 22050 -f flv -s 320x240 %s" % (sourcefile, targetfile)
grabimage = "ffmpeg -y -i %s -vframes 1 -ss 00:00:02 -an -vcodec png -f rawvideo -s 320x240 %s" % (sourcefile, thumbnailfilename)
print ("SOURCE: %s" % sourcefile)
print ("TARGET: %s" % targetfile)
print ("TARGET IMAGE: %s" % thumbnailfilename)
print ("FFMPEG TASK CODE: %s" % ffmpeg)
print ("IMAGE TASK CODE: %s" % grabimage)
try:
ffmpegresult = subprocess.call(ffmpeg)
print "---------------FFMPEG---------------"
print ffmpegresult
except:
print "Not working."
try:
videothumbnail = subprocess.call(grabimage)
print "---------------IMAGE---------------"
print videothumbnail
except:
print "Not working."
video.flvfilename = flvfilename
video.videothumbnail = imagefilename
video.save()
convert_to_flv(new_video)
return HttpResponseRedirect('/video_list/')
else:
...This is my first time trying to use a worker (or ever pushing a project to production), so even with the documentation it is still unclear to me what I need to do. I have tried several different things but nothing seems to work. Is there just a simple way to tell celery to run the ffmpegresult = subprocess.call(ffmpeg) ? Thanks in advance for any help or insight.
EDIT- Added heroku logs
2013-01-10T20:58:57+00:00 app[web.1]: TARGET: /media/videos/flv/8.flv
2013-01-10T20:58:57+00:00 app[web.1]: IMAGE TASK CODE: ffmpeg -y -i /media/videos/practice.wmv -vframes 1 -ss 00:00:02 - an -vcodec png -f rawvideo -s 320x240 /media/videos/flv/8.png
2013-01-10T20:58:57+00:00 app[web.1]: SOURCE: /media/videos/practice.wmv
2013-01-10T20:58:57+00:00 app[web.1]: FFMPEG TASK CODE: ffmpeg -i /media/videos/practice.wmv -acodec mp3 -ar 22050 -f fl v -s 320x240 /media/videos/flv/8.flv
2013-01-10T20:58:57+00:00 app[web.1]: TARGET IMAGE: /media/videos/flv/8.png
2013-01-10T20:58:57+00:00 app[web.1]: Not working.
2013-01-10T20:58:57+00:00 app[web.1]: Not working.NEWER EDIT
I tried adding a tasks.py and added the task :
celery = Celery('tasks', broker='redis://guest@localhost//')
@celery.task
def ffmpeg_task(video):
converted_file = subprocess.call(video)
return converted_filethen I changed the relevant section of my view to :
...
try:
ffmpeg_task.delay(ffmpeg)
print "---------------FFMPEG---------------"
print ffmpegresult
except:
print "Not working."
...My new logs are :
2013-01-15T13:19:52+00:00 app[web.1]: TARGET IMAGE: /media/videos/flv/12.png
2013-01-15T13:19:52+00:00 app[web.1]: SOURCE: /media/videos/practice.wmv
2013-01-15T13:19:52+00:00 app[web.1]: FFMPEG TASK CODE: ffmpeg -i /media/videos/practice.wmv -acodec mp3 -ar 22050 -f fl v -s 320x240 /media/videos/flv/12.flv
2013-01-15T13:19:52+00:00 app[web.1]: IMAGE TASK CODE: ffmpeg -y -i /media/videos/practice.wmv -vframes 1 -ss 00:00:02 -an -vcodec png -f rawvideo -s 320x240 /media/videos/flv/12.png
2013-01-15T13:19:52+00:00 app[web.1]: TARGET: /media/videos/flv/12.flv
2013-01-15T13:20:17+00:00 app[web.1]: 2013-01-15 13:20:17 [2] [CRITICAL] WORKER TIMEOUT (pid:12)
2013-01-15T13:20:17+00:00 app[web.1]: 2013-01-15 13:20:17 [2] [CRITICAL] WORKER TIMEOUT (pid:12)
2013-01-15T13:20:17+00:00 app[web.1]: 2013-01-15 13:20:17 [19] [INFO] Booting worker with pid: 19Am I completely missing something ? I'll keep trying, but will be very appreciative of any direction or assistance.