Recherche avancée

Médias (91)

Autres articles (67)

  • Les autorisations surchargées par les plugins

    27 avril 2010, par

    Mediaspip core
    autoriser_auteur_modifier() afin que les visiteurs soient capables de modifier leurs informations sur la page d’auteurs

  • Creating farms of unique websites

    13 avril 2011, par

    MediaSPIP 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" (...)

  • La sauvegarde automatique de canaux SPIP

    1er avril 2010, par

    Dans le cadre de la mise en place d’une plateforme ouverte, il est important pour les hébergeurs de pouvoir disposer de sauvegardes assez régulières pour parer à tout problème éventuel.
    Pour réaliser cette tâche on se base sur deux plugins SPIP : Saveauto qui permet une sauvegarde régulière de la base de donnée sous la forme d’un dump mysql (utilisable dans phpmyadmin) mes_fichiers_2 qui permet de réaliser une archive au format zip des données importantes du site (les documents, les éléments (...)

Sur d’autres sites (8815)

  • What is the right way to put data to abuffersrc and pull from abufersink when I have multiple inputs with FFMPEG "afir" filter ?

    19 décembre 2022, par Evgenii

    I want to understand why av_buffersink_get_frame() always return AVERROR(EAGAIN).
I use this algorithm :

    


      

    1. Open input file input.mp3, create decoder for input file
    2. 


    3. Open signal file signal.wav, create decoder for signal file
    4. 


    5. Create filter graph and inputs/outputs with function avfilter_graph_parse2("[in0][in1]afir[out], &inputs, &outputs")
    6. 


    7. Create abuffersrc for every inputs with names "in0", "in1"
    8. 


    9. Create one abuffersink for one outputs with name "out"
    10. 


    11. Read and decode samples with methods av_read_frame(), avcodec_send_packet(), avcodec_receive_frame(), put samples to abuffersrc with av_buffersrc_add_frame() and trying to read samples from abuffersink with av_buffersink_get_frame() - HERE I get AVERROR(EAGAIN) for every call
    12. 


    


    Please, help !

    


    I've tried to read all samples and push its to abuffersrc for input and signal pipes in first step and and call av_buffersink_get_frame one time in second step. I got AVERROR(EGAIN) again.

    


    I've tried to config two outputs with names "in0" and "in1" and one input with name "out" and call avfilter_graph_parse_ptr() as done in here :

    


    static AVFilterContext *init_buffersrc(AVCodecContext *decoder, AVFilterGraph *filter_graph, const char *pad_name) {
    AVFilterContext *buffersrc = NULL;
    uint8_t args[1024];

    snprintf(args, sizeof(args),
        "time_base=%d/%d:sample_rate=%d:sample_fmt=%s:channel_layout=0x%"PRIx64"",
        decoder->time_base.num, decoder->time_base.den, decoder->sample_rate, av_get_sample_fmt_name(decoder->sample_fmt), decoder->channel_layout);

    CHECK_AV(avfilter_graph_create_filter(&buffersrc, avfilter_get_by_name("abuffer"), pad_name, args, NULL, filter_graph));
    return buffersrc;
}

static AVFilterContext *init_buffersink(AVFilterGraph *filter_graph) {
    AVFilterContext *buffersink = NULL;

    CHECK_AV(avfilter_graph_create_filter(&buffersink, avfilter_get_by_name("abuffersink"), "out", NULL, NULL, filter_graph));
    return buffersink;
}

static void init_complex_graph(const char *desc, Context *ctx) {

    AVFilterGraph *filter_graph;
    AVFilterInOut *inputs = avfilter_inout_alloc();
    AVFilterInOut **outputs = (AVFilterInOut**) av_malloc(ctx->nb_input_files*sizeof(AVFilterInOut *));
    char *dump;
    uint8_t pad_name[64];

    filter_graph = ctx->filter_graph = avfilter_graph_alloc();
    filter_graph->nb_threads = 1;

    for (int i = 0; i< ctx->nb_input_files; ++i) {
        outputs[i] = avfilter_inout_alloc();
    }

    for (int i = 0; i < ctx->nb_input_files; ++i) {
        AVFilterContext *buffersrc;
        snprintf(pad_name, sizeof(pad_name), "in%d", i);        
        buffersrc = init_buffersrc(ctx->input_files[i]->decoder, filter_graph, pad_name);
        ctx->input_files[i]->buffersrc = buffersrc;
        outputs[i]->name = av_strdup(pad_name);
        outputs[i]->filter_ctx = buffersrc;
        outputs[i]->pad_idx = 0;
        if (i == ctx->nb_input_files - 1) {
            outputs[i]->next = NULL;
        }
        else {
            outputs[i]->next = outputs[i + 1];
        }
    }

    ctx->output_file->buffersink = init_buffersink(filter_graph);

    inputs->name = av_strdup("out");
    inputs->filter_ctx = ctx->output_file->buffersink;
    inputs->pad_idx =0;
    inputs->next = NULL;

    CHECK_AV(avfilter_graph_parse_ptr(filter_graph, desc, &inputs, outputs, NULL));

    CHECK_AV(avfilter_graph_config(filter_graph, NULL));
}   

// Call init_complex_graph("[in0][in1]afir[out]", SOME_CONTEXT);


    


    and still nothing.

    


  • lavc/qsvdec : update HDR side data on output AVFrame

    21 novembre 2022, par Haihao Xiang
    lavc/qsvdec : update HDR side data on output AVFrame
    

    The SDK may provides HDR metadata for HDR streams via mfxExtBuffer
    attached on output mfxFrameSurface1

    Signed-off-by : Haihao Xiang <haihao.xiang@intel.com>

    • [DH] libavcodec/qsv_internal.h
    • [DH] libavcodec/qsvdec.c
  • Python asyncio subprocess code returns "pipe closed by peer or os.write(pipe, data) raised exception."

    4 novembre 2022, par Duke Dougal

    I am trying to convert a synchronous Python process to asyncio. Any ideas what I am doing wrong ?

    &#xA;

    This is the synchronous code which successfully starts ffmpeg and converts a directory of webp files into a video.

    &#xA;

    import subprocess&#xA;import shlex&#xA;from os import listdir&#xA;from os.path import isfile, join&#xA;&#xA;output_filename = &#x27;output.mp4&#x27;&#xA;process = subprocess.Popen(shlex.split(f&#x27;ffmpeg -y -framerate 60 -i pipe: -vcodec libx265 -pix_fmt yuv420p -crf 24 output.mp4&#x27;), stdin=subprocess.PIPE)&#xA;&#xA;thepath = &#x27;/home/ubuntu/webpfiles/&#x27;&#xA;thefiles = [f for f in listdir(thepath) if isfile(join(thepath, f))]&#xA;for filename in thefiles:&#xA;    absolute_path = f&#x27;{thepath}{filename}&#x27;&#xA;    with open(absolute_path, &#x27;rb&#x27;) as f:&#xA;        process.stdin.write(f.read())&#xA;&#xA;process.stdin.close()&#xA;process.wait()&#xA;process.terminate()&#xA;

    &#xA;

    This async code fails :

    &#xA;

    from os import listdir&#xA;from os.path import isfile, join&#xA;import shlex&#xA;import asyncio&#xA;&#xA;outputfilename = &#x27;output.mp4&#x27;&#xA;&#xA;async def write_stdin(proc):&#xA;    thepath = &#x27;/home/ubuntu/webpfiles/&#x27;&#xA;    thefiles = [f for f in listdir(thepath) if isfile(join(thepath, f))]&#xA;    thefiles.sort()&#xA;    for filename in thefiles:&#xA;        absolute_path = f&#x27;{thepath}{filename}&#x27;&#xA;        with open(absolute_path, &#x27;rb&#x27;) as f:&#xA;            await proc.communicate(input=f.read())&#xA;&#xA;async def create_ffmpeg_subprocess():&#xA;    bin = f&#x27;/home/ubuntu/bin/ffmpeg&#x27;&#xA;    params = f&#x27;-y -framerate 60 -i pipe: -vcodec libx265 -pix_fmt yuv420p -crf 24 {outputfilename}&#x27;&#xA;    proc = await asyncio.create_subprocess_exec(&#xA;        bin,&#xA;        *shlex.split(params),&#xA;        stdin=asyncio.subprocess.PIPE,&#xA;        stdout=asyncio.subprocess.PIPE,&#xA;        stderr=asyncio.subprocess.PIPE,&#xA;    )&#xA;    return proc&#xA;&#xA;async def start():&#xA;    loop = asyncio.get_event_loop()&#xA;    proc = await create_ffmpeg_subprocess()&#xA;    task_stdout = loop.create_task(write_stdin(proc))&#xA;    await asyncio.gather(task_stdout)&#xA;&#xA;if __name__ == &#x27;__main__&#x27;:&#xA;    asyncio.run(start())&#xA;

    &#xA;

    The output for the async code is :

    &#xA;

    pipe closed by peer or os.write(pipe, data) raised exception.&#xA;pipe closed by peer or os.write(pipe, data) raised exception.&#xA;pipe closed by peer or os.write(pipe, data) raised exception.&#xA;pipe closed by peer or os.write(pipe, data) raised exception.&#xA;pipe closed by peer or os.write(pipe, data) raised exception.&#xA;pipe closed by peer or os.write(pipe, data) raised exception.&#xA;pipe closed by peer or os.write(pipe, data) raised exception.&#xA;pipe closed by peer or os.write(pipe, data) raised exception.&#xA;pipe closed by peer or os.write(pipe, data) raised exception.&#xA;pipe closed by peer or os.write(pipe, data) raised exception.&#xA;pipe closed by peer or os.write(pipe, data) raised exception.&#xA;pipe closed by peer or os.write(pipe, data) raised exception.&#xA;pipe closed by peer or os.write(pipe, data) raised exception.&#xA;pipe closed by peer or os.write(pipe, data) raised exception.&#xA;pipe closed by peer or os.write(pipe, data) raised exception.&#xA;pipe closed by peer or os.write(pipe, data) raised exception.&#xA;

    &#xA;

    etc - one line for each webp file

    &#xA;