
Recherche avancée
Autres articles (106)
-
Encoding and processing into web-friendly formats
13 avril 2011, parMediaSPIP automatically converts uploaded files to internet-compatible formats.
Video files are encoded in MP4, Ogv and WebM (supported by HTML5) and MP4 (supported by Flash).
Audio files are encoded in MP3 and Ogg (supported by HTML5) and MP3 (supported by Flash).
Where possible, text is analyzed in order to retrieve the data needed for search engine detection, and then exported as a series of image files.
All uploaded files are stored online in their original format, so you can (...) -
Formulaire personnalisable
21 juin 2013, parCette page présente les champs disponibles dans le formulaire de publication d’un média et il indique les différents champs qu’on peut ajouter. Formulaire de création d’un Media
Dans le cas d’un document de type média, les champs proposés par défaut sont : Texte Activer/Désactiver le forum ( on peut désactiver l’invite au commentaire pour chaque article ) Licence Ajout/suppression d’auteurs Tags
On peut modifier ce formulaire dans la partie :
Administration > Configuration des masques de formulaire. (...) -
Qu’est ce qu’un masque de formulaire
13 juin 2013, parUn masque de formulaire consiste en la personnalisation du formulaire de mise en ligne des médias, rubriques, actualités, éditoriaux et liens vers des sites.
Chaque formulaire de publication d’objet peut donc être personnalisé.
Pour accéder à la personnalisation des champs de formulaires, il est nécessaire d’aller dans l’administration de votre MediaSPIP puis de sélectionner "Configuration des masques de formulaires".
Sélectionnez ensuite le formulaire à modifier en cliquant sur sont type d’objet. (...)
Sur d’autres sites (10457)
-
ffmpeg extension isn't installing
29 avril 2013, par kaan yilginI'm using wamp server v2.2 x64 and php version 5.3.13. I'm trying to install ffmpeg during two days. I fallowed this steps :
- Download dll files for x64 (I'm using windows7 x64)
- copied ffmpeg.dll to bin\php\php5.3.13\ext
- copied rest of dll files to system32
- enable ffmpeg extension from wamp server.
and I checked phpinfo() but it's not working.
by the way is there any way to take a frame from video for poster image ? -
France rules Google Analytics non-compliant with GDPR
11 février 2022, par Erin — Privacy -
Ffmpeg set output format C++
7 septembre 2022, par TurgutI made a program that encodes a video and I want to specify the format as
h264
but I can't figure out how to do it. It automatically sets the format tompeg4
and I can't change it. I got my code from ffmpegs official examples muxing.c and slightly edited it to fit my code (I haven't changed much especially did not touch the parts where it sets the format)

Here is my code so for (I have trimmed down the code slightly, removing redundant parts)


video_encoder.cpp :



video_encoder::video_encoder(int w, int h, float fps, unsigned int duration) 
 :width(w), height(h), STREAM_FRAME_RATE(fps), STREAM_DURATION(duration)
{
 std::string as_str = "./output/video.mp4";

 char* filename = const_cast(as_str.c_str());
 enc_inf.video_st, enc_inf.audio_st = (struct OutputStream) { 0 };
 enc_inf.video_st.next_pts = 1; 
 enc_inf.audio_st.next_pts = 1;
 enc_inf.encode_audio, enc_inf.encode_video = 0;
 int ret;
 int i;

 /* allocate the output media context */
 avformat_alloc_output_context2(&enc_inf.oc, NULL, NULL, filename);

 if (!enc_inf.oc) {
 std::cout << "FAILED" << std::endl;
 avformat_alloc_output_context2(&enc_inf.oc, NULL, "mpeg", filename);
 }

 enc_inf.fmt = enc_inf.oc->oformat;

 /* Add the audio and video streams using the default format codecs
 * and initialize the codecs. */
 if (enc_inf.fmt->video_codec != AV_CODEC_ID_NONE) {
 add_stream(&enc_inf.video_st, enc_inf.oc, &video_codec, enc_inf.fmt->video_codec);
 enc_inf.have_video = 1;
 enc_inf.encode_video = 1;
 }
 if (enc_inf.fmt->audio_codec != AV_CODEC_ID_NONE) {
 add_stream(&enc_inf.audio_st, enc_inf.oc, &audio_codec, enc_inf.fmt->audio_codec);
 enc_inf.have_audio = 1;
 enc_inf.encode_audio = 1;
 }

 /* Now that all the parameters are set, we can open the audio and
 * video codecs and allocate the necessary encode buffers. */
 if (enc_inf.have_video)
 open_video(enc_inf.oc, video_codec, &enc_inf.video_st, opt);

 if (enc_inf.have_audio)
 open_audio(enc_inf.oc, audio_codec, &enc_inf.audio_st, opt);
 av_dump_format(enc_inf.oc, 0, filename, 1);

 /* open the output file, if needed */
 if (!(enc_inf.fmt->flags & AVFMT_NOFILE)) {
 ret = avio_open(&enc_inf.oc->pb, filename, AVIO_FLAG_WRITE);
 if (ret < 0) {
 //VI_ERROR("Could not open '%s': %s\n", filename, ret);
 //return 1;
 }
 }

 /* Write the stream header, if any. */
 ret = avformat_write_header(enc_inf.oc, &opt);
 if (ret < 0) {
 VI_ERROR("Error occurred when opening output file:");
 //return 1;
 }
 
 //return 0;
}


/* Add an output stream. */
void video_encoder::add_stream(OutputStream *ost, AVFormatContext *oc,
 const AVCodec **codec,
 enum AVCodecID codec_id)
{
 AVCodecContext *c;
 int i;

 /* find the encoder */
 *codec = avcodec_find_encoder(codec_id);
 
 if (!(*codec)) {
 fprintf(stderr, "Could not find encoder for '%s'\n",
 avcodec_get_name(codec_id));
 exit(1);
 }

 ost->tmp_pkt = av_packet_alloc();

 if (!ost->tmp_pkt) {
 fprintf(stderr, "Could not allocate AVPacket\n");
 exit(1);
 }

 ost->st = avformat_new_stream(oc, NULL);
 if (!ost->st) {
 fprintf(stderr, "Could not allocate stream\n");
 exit(1);
 }
 ost->st->id = oc->nb_streams-1;
 c = avcodec_alloc_context3(*codec);
 if (!c) {
 fprintf(stderr, "Could not alloc an encoding context\n");
 exit(1);
 }
 ost->enc = c;


 switch ((*codec)->type) {
 case AVMEDIA_TYPE_AUDIO:
 ...
 break;
 case AVMEDIA_TYPE_VIDEO:
 c->codec_id = codec_id;

 c->bit_rate = 10000;
 /* Resolution must be a multiple of two. */
 c->width = width;
 c->height = height;
 /* timebase: This is the fundamental unit of time (in seconds) in terms
 * of which frame timestamps are represented. For fixed-fps content,
 * timebase should be 1/framerate and timestamp increments should be
 * identical to 1. */
 ost->st->time_base = (AVRational){ 1, STREAM_FRAME_RATE }; // *frame_rate
 c->time_base = ost->st->time_base;

 c->gop_size = 7; /* emit one intra frame every twelve frames at most */
 //c->codec_id = AV_CODEC_ID_H264;
 c->pix_fmt = STREAM_PIX_FMT;
 //if (c->codec_id == AV_CODEC_ID_MPEG2VIDEO) 
 // c->max_b_frames = 2;
 if (c->codec_id == AV_CODEC_ID_MPEG1VIDEO) {
 /* Needed to avoid using macroblocks in which some coeffs overflow.
 * This does not happen with normal video, it just happens here as
 * the motion of the chroma plane does not match the luma plane. */
 c->mb_decision = 2;
 }

 if ((*codec)->pix_fmts){
 //c->pix_fmt = (*codec)->pix_fmts[0];
 std::cout << "NEW FORMAT : " << c->pix_fmt << std::endl;
 }

 break;
 }
 

 /* Some formats want stream headers to be separate. */
 if (oc->oformat->flags & AVFMT_GLOBALHEADER)
 c->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;
}



video_encoder.h



typedef struct OutputStream {
 AVStream *st;
 AVCodecContext *enc;

 /* pts of the next frame that will be generated */
 int64_t next_pts;
 int samples_count;

 AVFrame *frame;
 AVFrame *tmp_frame;

 AVPacket *tmp_pkt;

 float t, tincr, tincr2;

 struct SwsContext *sws_ctx;
 struct SwrContext *swr_ctx;
} OutputStream;

class video_encoder{
 private:
 typedef struct {
 OutputStream video_st, audio_st;
 const AVOutputFormat *fmt;
 AVFormatContext *oc;
 int have_video, have_audio, encode_video, encode_audio;
 std::string name;
 } encode_info;
 public:
 encode_info enc_inf;
 video_encoder(int w, int h, float fps, unsigned int duration);
 ~video_encoder(); 
 ...
 private:
 ...
 void add_stream(OutputStream *ost, AVFormatContext *oc,
 const AVCodec **codec,
 enum AVCodecID codec_id);



I'm thinking that the example sets the codec at
avformat_alloc_output_context2(&enc_inf.oc, NULL, NULL, filename)
but I'm not quite sure how to set it to h264.

I've tried something like this
avformat_alloc_output_context2(&enc_inf.oc, enc_inf.fmt, "h264", filename)


But it just gives a seg fault. What am I supposed to do ?


Edit : I've tried adding these two lines to
video_encoder::video_encoder
by deletingavformat_alloc_output_context2(&enc_inf.oc, NULL, NULL, filename);
:


 video_codec = avcodec_find_encoder(AV_CODEC_ID_H264);
 enc_inf.video_st.enc = avcodec_alloc_context3(video_codec);




But it resulted in these errors :
It says this every frame (A bunch of times)


[mpeg @ 0x56057c465480] buffer underflow st=0 bufi=26822 size=31816



Says this once when the frame encoding loop is over :


[mpeg @ 0x5565ac4a04c0] start time for stream 0 is not set in estimate_timings_from_pts
[mpeg @ 0x5565ac4a04c0] stream 0 : no TS found at start of file, duration not set
[mpeg @ 0x5565ac4a04c0] Could not find codec parameters for stream 0 (Video: mpeg2video, none): unspecified size
Consider increasing the value for the 'analyzeduration' (0) and 'probesize' (5000000) options