
Recherche avancée
Médias (91)
-
Les Miserables
9 décembre 2019, par
Mis à jour : Décembre 2019
Langue : français
Type : Textuel
-
VideoHandle
8 novembre 2019, par
Mis à jour : Novembre 2019
Langue : français
Type : Video
-
Somos millones 1
21 juillet 2014, par
Mis à jour : Juin 2015
Langue : français
Type : Video
-
Un test - mauritanie
3 avril 2014, par
Mis à jour : Avril 2014
Langue : français
Type : Textuel
-
Pourquoi Obama lit il mes mails ?
4 février 2014, par
Mis à jour : Février 2014
Langue : français
-
IMG 0222
6 octobre 2013, par
Mis à jour : Octobre 2013
Langue : français
Type : Image
Autres articles (54)
-
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 (...) -
Les statuts des instances de mutualisation
13 mars 2010, parPour des raisons de compatibilité générale du plugin de gestion de mutualisations avec les fonctions originales de SPIP, les statuts des instances sont les mêmes que pour tout autre objets (articles...), seuls leurs noms dans l’interface change quelque peu.
Les différents statuts possibles sont : prepa (demandé) qui correspond à une instance demandée par un utilisateur. Si le site a déjà été créé par le passé, il est passé en mode désactivé. publie (validé) qui correspond à une instance validée par un (...) -
Creating farms of unique websites
13 avril 2011, parMediaSPIP platforms can be installed as a farm, with a single "core" hosted on a dedicated server and used by multiple websites.
This allows (among other things) : implementation costs to be shared between several different projects / individuals rapid deployment of multiple unique sites creation of groups of like-minded sites, making it possible to browse media in a more controlled and selective environment than the major "open" (...)
Sur d’autres sites (7355)
-
Evolution #4468 : Unification des CSS pour les boutons et les icônes
14 septembre 2020Noté pour ajouter un a.bouton
Il y a déjà des variantes .principal et .secondaire dans cette prop, donc il suffit de les reprendre (cf. captures et description messages précédents).
Par contre la classe .bouton est déjà utilisée dans le bandeau d’ajout rapide :
- .
Donc pour les liens boutons, il faudrait soit limiter à la balise<a></a>
→a.bouton { … }
, mais c’est un peu sale. Ou alors trouver une autre classe pour le bandeau.Un dernier truc à régler aussi : dans les styles actuels il semble être prévu de pouvoir utiliser les classes .icone.horizontale sur les boutons d’action, c.à.d
#BOUTON_ACTION{…, …, …, icone horizontale s-24}
.
Mais je n’arrive pas à voir quel résultat est censé être obtenu avec cette combinaison. Actuellement, ça à l’air pété, cf. captures.D’une part ça n’est mentionné nulle part dans la charte (du plugin dev), et de l’autre ça semble n’être utilisé qu’une seule fois dans la dist, dans la page controler_urls. Ailleurs je n’ai vu ça utilisé que dans la Fabrique (les boutons de suppression d’objet).
Je suppose que le but c’était d’essayer d’afficher un bouton d’action comme une
|icone_horizontale
.
Mais|icone_horizontale
ça produit un markup très différent de#BOUTON_ACTION
, essayer de finir de porter la classe .icone.horizontale sur ce dernier ça va être bien compliqué.Mais en fait dans cette prop, on peut déjà avoir des icônes facilement dans les boutons d’action, soit en utilisant une des variantes new, add, del, config, ou alors en mettant une image/icône à la main dans le label tout bêtement.
Donc au final ça me semble plus simple d’arrêter de supporter la combinaison
#BOUTON_ACTION
+ classe .icone : en l’état ça marche à moitié, c’est inutile avec cette prop, et ça fait un truc compliqué en moins à maintenir.
- .
-
FFmpeg.AutoGen use avfilter_graph_create_filter return -22
13 novembre 2017, par dongdongall
i used FFmpeg.AutoGen 3.2 ,vs2015 in win7,copy a Example from FFmpeg(http://ffmpeg.org/doxygen/trunk/filtering_video_8c-example.html),
when run
string video = @"e:\\1.avi";
FilterVideo fv = new FilterVideo();
fv.filtertest(video);return errorcode -22 :
args:video_size=640x480:pix_fmt=AV_PIX_FMT_YUV420P:time_base=1/25:pixel_aspect=1/1
Cannot create buffer source22
thanks for any rep.
blow is code :
using FFmpeg.AutoGen;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace videoFFmpegAutoGen.tool
{
public unsafe class FilterVideo
{
public int open_input_file(string filename)
{
try
{
int ret;
AVCodec* dec;
fixed (AVFormatContext** at = &fmt_ctx)
{
ret = ffmpeg.avformat_open_input(at, filename, null, null);
}
if (ret < 0)
{
Console.WriteLine("Cannot open input file\n");
return ret;
}
ret = ffmpeg.avformat_find_stream_info(fmt_ctx, null);
if (ret < 0)
{
Console.WriteLine("Cannot find stream information\n");
return ret;
}
ret = ffmpeg.av_find_best_stream(fmt_ctx, AVMediaType.AVMEDIA_TYPE_VIDEO, -1, -1, &dec, 0);
if (ret < 0)
{
Console.WriteLine("Cannot find a video stream in the input file\n");
return ret;
}
video_stream_index = ret;
/* create decoding context */
dec_ctx = ffmpeg.avcodec_alloc_context3(dec);
ffmpeg.avcodec_parameters_to_context(dec_ctx, fmt_ctx->streams[video_stream_index]->codecpar);
ffmpeg.av_opt_set_int(dec_ctx, "refcounted_frames", 1, 0);
/* init the video decoder */
if ((ret = ffmpeg.avcodec_open2(dec_ctx, dec, null)) < 0)
{
Console.WriteLine("Cannot open video decoder\n");
return ret;
}
return ret;
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
finally
{
}
return -1;
}
private string filters_descr = "scale=78:24,transpose=cclock";
private int video_stream_index = -1;
private AVFormatContext* fmt_ctx;
private AVFilterGraph* filter_graph;
AVFilterContext* buffersrc_ctx;
private AVCodecContext* dec_ctx;
AVFilterContext* buffersink_ctx;
public unsafe int init_filters(string filters_descr)
{
int ret = 0;
AVFilterInOut* outputs = null;
AVFilterInOut* inputs = null;
try
{
AVFilter* buffersrc = ffmpeg.avfilter_get_by_name("buffer");
AVFilter* buffersink = ffmpeg.avfilter_get_by_name("buffersink");
outputs = ffmpeg.avfilter_inout_alloc();
inputs = ffmpeg.avfilter_inout_alloc();
AVRational time_base = fmt_ctx->streams[video_stream_index]->time_base;
filter_graph = ffmpeg.avfilter_graph_alloc();
//string args = string.Format("video_size=%dx%d:pix_fmt=%d:time_base=%d/%d:pixel_aspect=%d/%d", dec_ctx->width, dec_ctx->height, dec_ctx->pix_fmt, time_base.num, time_base.den, dec_ctx->sample_aspect_ratio.num, dec_ctx->sample_aspect_ratio.den);
string args = string.Format("video_size={0}x{1}:pix_fmt={2}:time_base={3}/{4}:pixel_aspect={5}/{6}", dec_ctx->width, dec_ctx->height, dec_ctx->pix_fmt, time_base.num, time_base.den, dec_ctx->sample_aspect_ratio.num, dec_ctx->sample_aspect_ratio.den);
// string args = string.Format("video_size={0}x{1}:time_base={2}/{3}:pixel_aspect={4}/{5}", dec_ctx->width, dec_ctx->height, time_base.num, time_base.den, dec_ctx->sample_aspect_ratio.num, dec_ctx->sample_aspect_ratio.den);
// string args = string.Format("video_size={0}x{1}", dec_ctx->width, dec_ctx->height);
Console.WriteLine("args:" + args);
fixed (AVFilterContext** at= &buffersrc_ctx)
{
ret = ffmpeg.avfilter_graph_create_filter(at, buffersrc, "in", args, null, filter_graph);
}
if (ret < 0)
{
Console.WriteLine("Cannot create buffer source\n"+ret);
return ret;
}
fixed (AVFilterContext** at = &buffersink_ctx)
{
ret = ffmpeg.avfilter_graph_create_filter(at, buffersink, "out", null, null, filter_graph);
}
if (ret < 0)
{
Console.WriteLine("Cannot create buffer sink\n");
return ret;
}
// ret = ffmpeg.av_opt_set_int_list(buffersink_ctx, "pix_fmts", pix_fmts,AV_PIX_FMT_NONE, AV_OPT_SEARCH_CHILDREN);
/*
* The buffer source output must be connected to the input pad of
* the first filter described by filters_descr; since the first
* filter input label is not specified, it is set to "in" by
* default.
*/
outputs->name = ffmpeg.av_strdup("in");
outputs->filter_ctx = buffersrc_ctx;
outputs->pad_idx = 0;
outputs->next = null;
/*
* The buffer sink input must be connected to the output pad of
* the last filter described by filters_descr; since the last
* filter output label is not specified, it is set to "out" by
* default.
*/
inputs->name = ffmpeg.av_strdup("out");
inputs->filter_ctx = buffersink_ctx;
inputs->pad_idx = 0;
inputs->next = null;
ret = ffmpeg.avfilter_graph_parse_ptr(filter_graph, filters_descr, &inputs, &outputs, null);
if (ret < 0)
{
return ret;
}
ret = ffmpeg.avfilter_graph_config(filter_graph, null);
if (ret < 0)
{
return ret;
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
finally
{
ffmpeg.avfilter_inout_free(&inputs);
ffmpeg.avfilter_inout_free(&outputs);
}
return ret;
}
long AV_NOPTS_VALUE = 1;
//int last_pts = AV_NOPTS_VALUE;
long last_pts = 1;
public void display_frame(AVFrame* frame, AVRational time_base)
{
int x, y;
long delay;
sbyte* p0;
sbyte* p;
AVRational cq = new AVRational();
cq.num = 1;
cq.den = 1000000;
if (frame->pts != AV_NOPTS_VALUE)
{
if (last_pts != AV_NOPTS_VALUE)
{
/* sleep roughly the right amount of time;
* usleep is in microseconds, just like AV_TIME_BASE. */
delay = ffmpeg.av_rescale_q(frame->pts - last_pts, time_base, cq);
if (delay > 0 && delay < 1000000)
Thread.Sleep((int)delay);
}
last_pts = frame->pts;
}
/* Trivial ASCII grayscale display. */
p0 = frame->data0;
//puts("\033c");
for (y = 0; y < frame->height; y++)
{
p = p0;
//for (x = 0; x < frame->width; x++)
//putchar(" .-+#"[*(p++) / 52]);
//putchar('\n');
p0 += frame->linesize[0];
}
//fflush(stdout);
}
private int AV_BUFFERSRC_FLAG_KEEP_REF = 8 ;
public unsafe void filtertest(string inputvideo)
{
AVFrame* frame = ffmpeg.av_frame_alloc();
AVFrame* filt_frame = ffmpeg.av_frame_alloc();
try
{
int ret;
AVPacket packet;
ffmpeg.av_register_all();
ffmpeg.avfilter_register_all();
ret = open_input_file(inputvideo);
if (ret < 0)
{
return;
}
ret = init_filters(filters_descr);
if (ret < 0)
{
return;
}
while (true)
{
ret = ffmpeg.av_read_frame(fmt_ctx, &packet);
if (ret < 0)
{
Console.WriteLine("Error while sending a packet to the decoder\n");
break;
}
if (packet.stream_index == video_stream_index)
{
ret = ffmpeg.avcodec_send_packet(dec_ctx, &packet);
if (ret < 0)
{
Console.WriteLine( "Error while sending a packet to the decoder\n");
break;
}
while (ret >= 0)
{
ret = ffmpeg.avcodec_receive_frame(dec_ctx, frame);
//if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF)
if (ret == 999)
{
break;
}
else if (ret < 0)
{
Console.WriteLine("Error while receiving a frame from the decoder\n");
return;
} else
{
Console.WriteLine("ret::"+ret);
}
if (ret >= 0)
{
frame->pts = frame->best_effort_timestamp;
/* push the decoded frame into the filtergraph */
if (ffmpeg.av_buffersrc_add_frame_flags(buffersrc_ctx, frame, AV_BUFFERSRC_FLAG_KEEP_REF) < 0)
{
Console.WriteLine("Error while feeding the filtergraph\n");
break;
}
/* pull filtered frames from the filtergraph */
while (true)
{
ret = ffmpeg.av_buffersink_get_frame(buffersink_ctx, filt_frame);
//if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF)
if (ret == 999)
{
break;
}
else if (ret < 0)
{
return;
}else
{
Console.WriteLine("ret2:" + ret);
}
display_frame(filt_frame, buffersink_ctx->inputs[0]->time_base);
ffmpeg.av_frame_unref(filt_frame);
}
ffmpeg.av_frame_unref(frame);
}
}
}
ffmpeg.av_packet_unref(&packet);
}
}
catch(Exception e)
{
Console.WriteLine(e.ToString());
}
finally
{
fixed (AVFilterGraph** at = &filter_graph)
{
ffmpeg.avfilter_graph_free(at);
}
ffmpeg.avcodec_close(dec_ctx);
fixed (AVFormatContext** at = &fmt_ctx)
{
ffmpeg.avformat_close_input(at);
}
ffmpeg.av_frame_free(&frame);
ffmpeg.av_frame_free(&filt_frame);
}
}
}
} -
Add watermark-overlay with -filter_complex to multiple outputs (dash)
13 juillet 2020, par WernerI'm creating a set of files for DASH (without audio) with :


ffmpeg -i "input.mov"
 -y
 -keyint_min 100 -g 100
 -sc_threshold 0
 -c:v libx264
 -pix_fmt yuv420p
 -map v:0 -s:0 320x180 -b:v:0 681.125k -maxrate:0 681.125k -bufsize:0 340.5625k
 -map v:0 -s:1 640x360 -b:v:1 2724.5k -maxrate:1 2724.5k -bufsize:1 1362.25k
 -map v:0 -s:2 1280x720 -b:v:2 5449k -maxrate:2 5449k -bufsize:2 2724.5k
 -map v:0 -s:3 1920x1080 -b:v:3 10898k -maxrate:3 10898k -bufsize:3 5449k
 -init_seg_name "myname_$RepresentationID$.$ext$"
 -media_seg_name "myname_$RepresentationID$-$Number%05d$.$ext$"
 -use_template 1 -use_timeline 1
 -seg_duration 4 -adaptation_sets "id=0,streams=v"
 -f dash "myname.mpd"



Now I want to add a watermark. How is it done ? I tried something like :


ffmpeg -i "input.mov"
 -y
 -i "watermark.png" // Added
 -filter_complex "overlay=24:960" // Added
 -keyint_min 100 -g 100
 -sc_threshold 0
 -c:v libx264
 -pix_fmt yuv420p
 -map v:0 -s:0 320x180 -b:v:0 681.125k -maxrate:0 681.125k -bufsize:0 340.5625k
 -map v:0 -s:1 640x360 -b:v:1 2724.5k -maxrate:1 2724.5k -bufsize:1 1362.25k
 -map v:0 -s:2 1280x720 -b:v:2 5449k -maxrate:2 5449k -bufsize:2 2724.5k
 -map v:0 -s:3 1920x1080 -b:v:3 10898k -maxrate:3 10898k -bufsize:3 5449k
 -init_seg_name "myname_$RepresentationID$.$ext$"
 -media_seg_name "myname_$RepresentationID$-$Number%05d$.$ext$"
 -use_template 1 -use_timeline 1
 -seg_duration 4 -adaptation_sets "id=0,streams=v"
 -f dash "myname.mpd"



But this results in only getting the 180p-Version of the video. How can I still get all versions of the video with the overlay ?


Added :
I tried as well :


ffmpeg -i "input.mov"
 -y
 -i "watermark.png"
 -filter_complex "[0:v][1:v]overlay=24:960[out0][out1][out2][out3]"
 -keyint_min 100 -g 100
 -sc_threshold 0
 -c:v libx264
 -pix_fmt yuv420p
 -map "[out0]" -s:0 320x180 -b:v:0 681.125k -maxrate:0 681.125k -bufsize:0 340.5625k
 -map "[out1]" -s:1 640x360 -b:v:1 2724.5k -maxrate:1 2724.5k -bufsize:1 1362.25k
 -map "[out2]" -s:2 1280x720 -b:v:2 5449k -maxrate:2 5449k -bufsize:2 2724.5k
 -map "[out3]" -s:3 1920x1080 -b:v:3 10898k -maxrate:3 10898k -bufsize:3 5449k
 -init_seg_name "myname_$RepresentationID$.$ext$"
 -media_seg_name "myname_$RepresentationID$-$Number%05d$.$ext$"
 -use_template 1 -use_timeline 1
 -seg_duration 4 -adaptation_sets "id=0,streams=v"
 -f dash "myname.mpd"



which results in the error :
No output pad can be associated to link label 'out1'.