
Recherche avancée
Médias (91)
-
MediaSPIP Simple : futur thème graphique par défaut ?
26 septembre 2013, par
Mis à jour : Octobre 2013
Langue : français
Type : Video
-
avec chosen
13 septembre 2013, par
Mis à jour : Septembre 2013
Langue : français
Type : Image
-
sans chosen
13 septembre 2013, par
Mis à jour : Septembre 2013
Langue : français
Type : Image
-
config chosen
13 septembre 2013, par
Mis à jour : Septembre 2013
Langue : français
Type : Image
-
SPIP - plugins - embed code - Exemple
2 septembre 2013, par
Mis à jour : Septembre 2013
Langue : français
Type : Image
-
GetID3 - Bloc informations de fichiers
9 avril 2013, par
Mis à jour : Mai 2013
Langue : français
Type : Image
Autres articles (67)
-
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 -
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" (...) -
La sauvegarde automatique de canaux SPIP
1er avril 2010, parDans 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 EvgeniiI want to understand why
av_buffersink_get_frame()
always returnAVERROR(EAGAIN)
.
I use this algorithm :

- 

- Open input file
input.mp3
, create decoder for input file - Open signal file
signal.wav
, create decoder for signal file - Create filter graph and inputs/outputs with function
avfilter_graph_parse2("[in0][in1]afir[out], &inputs, &outputs")
- Create
abuffersrc
for every inputs with names "in0", "in1" - Create one
abuffersink
for oneoutputs
with name "out" - Read and decode samples with methods
av_read_frame()
,avcodec_send_packet()
,avcodec_receive_frame()
, put samples to abuffersrc withav_buffersrc_add_frame()
and trying to read samples from abuffersink withav_buffersink_get_frame()
- HERE I getAVERROR(EAGAIN)
for every call














Please, help !


I've tried to read all samples and push its to abuffersrc for
input
andsignal
pipes in first step and and callav_buffersink_get_frame
one time in second step. I gotAVERROR(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.


- Open input file
-
lavc/qsvdec : update HDR side data on output AVFrame
21 novembre 2022, par Haihao Xiang -
Python asyncio subprocess code returns "pipe closed by peer or os.write(pipe, data) raised exception."
4 novembre 2022, par Duke DougalI am trying to convert a synchronous Python process to asyncio. Any ideas what I am doing wrong ?


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


import subprocess
import shlex
from os import listdir
from os.path import isfile, join

output_filename = 'output.mp4'
process = subprocess.Popen(shlex.split(f'ffmpeg -y -framerate 60 -i pipe: -vcodec libx265 -pix_fmt yuv420p -crf 24 output.mp4'), stdin=subprocess.PIPE)

thepath = '/home/ubuntu/webpfiles/'
thefiles = [f for f in listdir(thepath) if isfile(join(thepath, f))]
for filename in thefiles:
 absolute_path = f'{thepath}{filename}'
 with open(absolute_path, 'rb') as f:
 process.stdin.write(f.read())

process.stdin.close()
process.wait()
process.terminate()



This async code fails :


from os import listdir
from os.path import isfile, join
import shlex
import asyncio

outputfilename = 'output.mp4'

async def write_stdin(proc):
 thepath = '/home/ubuntu/webpfiles/'
 thefiles = [f for f in listdir(thepath) if isfile(join(thepath, f))]
 thefiles.sort()
 for filename in thefiles:
 absolute_path = f'{thepath}{filename}'
 with open(absolute_path, 'rb') as f:
 await proc.communicate(input=f.read())

async def create_ffmpeg_subprocess():
 bin = f'/home/ubuntu/bin/ffmpeg'
 params = f'-y -framerate 60 -i pipe: -vcodec libx265 -pix_fmt yuv420p -crf 24 {outputfilename}'
 proc = await asyncio.create_subprocess_exec(
 bin,
 *shlex.split(params),
 stdin=asyncio.subprocess.PIPE,
 stdout=asyncio.subprocess.PIPE,
 stderr=asyncio.subprocess.PIPE,
 )
 return proc

async def start():
 loop = asyncio.get_event_loop()
 proc = await create_ffmpeg_subprocess()
 task_stdout = loop.create_task(write_stdin(proc))
 await asyncio.gather(task_stdout)

if __name__ == '__main__':
 asyncio.run(start())



The output for the async code is :


pipe closed by peer or os.write(pipe, data) raised exception.
pipe closed by peer or os.write(pipe, data) raised exception.
pipe closed by peer or os.write(pipe, data) raised exception.
pipe closed by peer or os.write(pipe, data) raised exception.
pipe closed by peer or os.write(pipe, data) raised exception.
pipe closed by peer or os.write(pipe, data) raised exception.
pipe closed by peer or os.write(pipe, data) raised exception.
pipe closed by peer or os.write(pipe, data) raised exception.
pipe closed by peer or os.write(pipe, data) raised exception.
pipe closed by peer or os.write(pipe, data) raised exception.
pipe closed by peer or os.write(pipe, data) raised exception.
pipe closed by peer or os.write(pipe, data) raised exception.
pipe closed by peer or os.write(pipe, data) raised exception.
pipe closed by peer or os.write(pipe, data) raised exception.
pipe closed by peer or os.write(pipe, data) raised exception.
pipe closed by peer or os.write(pipe, data) raised exception.



etc - one line for each webp file