Recherche avancée

Médias (0)

Mot : - Tags -/xmlrpc

Aucun média correspondant à vos critères n’est disponible sur le site.

Autres articles (60)

  • Amélioration de la version de base

    13 septembre 2013

    Jolie sélection multiple
    Le plugin Chosen permet d’améliorer l’ergonomie des champs de sélection multiple. Voir les deux images suivantes pour comparer.
    Il suffit pour cela d’activer le plugin Chosen (Configuration générale du site > Gestion des plugins), puis de configurer le plugin (Les squelettes > Chosen) en activant l’utilisation de Chosen dans le site public et en spécifiant les éléments de formulaires à améliorer, par exemple select[multiple] pour les listes à sélection multiple (...)

  • Menus personnalisés

    14 novembre 2010, par

    MediaSPIP utilise le plugin Menus pour gérer plusieurs menus configurables pour la navigation.
    Cela permet de laisser aux administrateurs de canaux la possibilité de configurer finement ces menus.
    Menus créés à l’initialisation du site
    Par défaut trois menus sont créés automatiquement à l’initialisation du site : Le menu principal ; Identifiant : barrenav ; Ce menu s’insère en général en haut de la page après le bloc d’entête, son identifiant le rend compatible avec les squelettes basés sur Zpip ; (...)

  • Déploiements possibles

    31 janvier 2010, par

    Deux types de déploiements sont envisageable dépendant de deux aspects : La méthode d’installation envisagée (en standalone ou en ferme) ; Le nombre d’encodages journaliers et la fréquentation envisagés ;
    L’encodage de vidéos est un processus lourd consommant énormément de ressources système (CPU et RAM), il est nécessaire de prendre tout cela en considération. Ce système n’est donc possible que sur un ou plusieurs serveurs dédiés.
    Version mono serveur
    La version mono serveur consiste à n’utiliser qu’une (...)

Sur d’autres sites (4144)

  • C++ ffmpeg API created video does not open in some players

    18 novembre 2017, par ar2015

    After my previous question, I found codes from here to create videos in C++ using avcodec of ffmpeg libraries.

    I have modified this code to comply with C++. Everything is fine and it creates mp4 videos. Except for the output video opens with some video managers and does not open with some others.

    E.g. I can open it on Linux by totem (the slider does not allow back and forth anyway). But VLC (on the same Linux machine) does not open this file. Probably, there will be similar problem in windows.

    Is there any missing process for this code causing this problem ?

    #include
    #include
    #include
    #include <string>
    #include <iostream>

    extern "C" {
       #include <libavcodec></libavcodec>avcodec.h>
       #include <libavutil></libavutil>opt.h>
       #include <libavutil></libavutil>imgutils.h>
    }

    static void encode(AVCodecContext *enc_ctx, AVFrame *frame, AVPacket *pkt,
                      FILE *outfile)
    {
       int ret;

       /* send the frame to the encoder */
       if (frame)
           std::cout&lt;&lt;"Send frame "&lt;&lt;(frame->pts)&lt;= 0) {
           ret = avcodec_receive_packet(enc_ctx, pkt);
           if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF)
               return;
           else if (ret &lt; 0) {
               fprintf(stderr, "Error during encoding\n");
               exit(1);
           }

           std::cout&lt;&lt;"Write packet "&lt;&lt;(pkt->pts)&lt;&lt;" (size="&lt;&lt;(pkt->size)&lt;&lt;")"&lt;/ printf("Write packet %3" PRId64" (size=%5d)\n", pkt->pts, pkt->size);
           fwrite(pkt->data, 1, pkt->size, outfile);
           av_packet_unref(pkt);
       }
    }

    int main(int argc, char **argv)
    {
       const char *filename;
       const AVCodec *codec;
       AVCodecContext *c= NULL;
       int i, ret, x, y;
       FILE *f;
       AVFrame *frame;
       AVPacket *pkt;
       uint8_t endcode[] = { 0, 0, 1, 0xb7 };

       if (argc &lt; 2) {
           fprintf(stderr, "Usage: %s <output file="file">\n", argv[0]);
           exit(0);
       }
       filename = argv[1];
       std::string codec_name = "mpeg4";

       avcodec_register_all();

       /* find the mpeg1video encoder */
       codec = avcodec_find_encoder_by_name(codec_name.c_str());
       if (!codec) {
           fprintf(stderr, "Codec '%s' not found\n", codec_name.c_str());
           exit(1);
       }

       c = avcodec_alloc_context3(codec);
       if (!c) {
           fprintf(stderr, "Could not allocate video codec context\n");
           exit(1);
       }

       pkt = av_packet_alloc();
       if (!pkt)
           exit(1);

       /* put sample parameters */
       // c->bit_rate = 400000;
       c->bit_rate = 4000000;
       /* resolution must be a multiple of two */
       // c->width = 352;
       // c->height = 288;
       c->width = 640;
       c->height = 480;
       /* frames per second */
       c->time_base = (AVRational){1, 25};
       c->framerate = (AVRational){25, 1};

       /* emit one intra frame every ten frames
        * check frame pict_type before passing frame
        * to encoder, if frame->pict_type is AV_PICTURE_TYPE_I
        * then gop_size is ignored and the output of encoder
        * will always be I frame irrespective to gop_size
        */
       c->gop_size = 10;
       c->max_b_frames = 1;
       c->pix_fmt = AV_PIX_FMT_YUV420P;

       if (codec->id == AV_CODEC_ID_H264)
           av_opt_set(c->priv_data, "preset", "slow", 0);

       /* open it */
       ret = avcodec_open2(c, codec, NULL);
       if (ret &lt; 0) {
           fprintf(stderr, "Could not open codec\n");
           // fprintf(stderr, "Could not open codec: %s\n", av_err2str(ret));
           exit(1);
       }

       f = fopen(filename, "wb");
       if (!f) {
           fprintf(stderr, "Could not open %s\n", filename);
           exit(1);
       }

       frame = av_frame_alloc();
       if (!frame) {
           fprintf(stderr, "Could not allocate video frame\n");
           exit(1);
       }
       frame->format = c->pix_fmt;
       frame->width  = c->width;
       frame->height = c->height;

       ret = av_frame_get_buffer(frame, 32);
       if (ret &lt; 0) {
           fprintf(stderr, "Could not allocate the video frame data\n");
           exit(1);
       }

       /* encode 10 second of video */
       for (i = 0; i &lt; 250; i++) {
           fflush(stdout);

           /* make sure the frame data is writable */
           ret = av_frame_make_writable(frame);
           if (ret &lt; 0)
               exit(1);

           /* prepare a dummy image */
           /* Y */
           for (y = 0; y &lt; c->height; y++) {
               for (x = 0; x &lt; c->width; x++) {
                   frame->data[0][y * frame->linesize[0] + x] = uint8_t(x + y + i * 3);
               }
           }

           /* Cb and Cr */
           for (y = 0; y &lt; c->height/2; y++) {
               for (x = 0; x &lt; c->width/2; x++) {
                   frame->data[1][y * frame->linesize[1] + x] = uint8_t(128 + y + i * 2);
                   frame->data[2][y * frame->linesize[2] + x] = uint8_t(64 + x + i * 5);
               }
           }

           frame->pts = i;

           /* encode the image */
           encode(c, frame, pkt, f);
       }

       /* flush the encoder */
       encode(c, NULL, pkt, f);

       /* add sequence end code to have a real MPEG file */
       fwrite(endcode, 1, sizeof(endcode), f);
       fclose(f);

       avcodec_free_context(&amp;c);
       av_frame_free(&amp;frame);
       av_packet_free(&amp;pkt);

       return 0;
    }
    </output></iostream></string>

    build :

    g++ -I ./FFmpeg/ video.cpp -L ./fflibs -lavdevice -lavfilter -lavformat -lavcodec -lrt -ldl -lXfixes -lXext -lX11 -lasound -lSDL -lz -lrt -lswresample -lswscale -lavutil -lm -llzma -lbz2 -lswresample -lpthread

    run

    ./a.out myvideo.mp4

    This video will be fine if converted in bash via

    ffmpeg -i myvideo.mp4 out1.mp4

    But I look for a method to fix it from the code.

    Generated video played on totem (Ubuntu) :

    c++ ffmpeg avcodec

    Video after conversion :

    converted

  • Can not open a video file in OpenCV

    31 octobre 2017, par mans

    I have a video file that encoded in h264 and save in mkv format (*.mkv).
    I can pen file in VLC and play it, but I want to open it in OpenCV and extract each frame of the video.

    I have this code :

    std::string fileName = "D:/Temp/video.mkv";

    cv::VideoCapture capture(fileName);
    capture.set(CV_CAP_PROP_FOURCC, CV_FOURCC('H', '2', '6', '4'));
    if (!capture.isOpened())
    {
       //error!
       std::cout &lt;&lt; "Can not load video";
    }
    else
    {
       double prevtimestamp = 0;
       cv::Mat frame;

       while (1)
       {
           capture.grab();
           double timestamp = capture.get(CV_CAP_PROP_POS_MSEC);

       }
    }

    when I run this code, I am getting message that the file can not be open.

    My questions :

    1. Is there anything wrong with this code ?
    2. Do I need FFMPEG on the path so OpenCV can open h264 videos ?
    3. How can I get more information why OpenCV can not open the file ?
  • FFMPEG Open several video files at the same time ? C++ [on hold]

    8 octobre 2017, par LemanRass

    I wrote a C++ plugin for playing videos using FFmpeg libraries. All works perfectly when playing a single video, but when I try to play at least 2 videos at the same time I have these errors :

    #01 pc 0000714d  /data/app/com.ffmpeg.sdk.videoplugin-
    1/lib/arm/libAndroidVideoPlugin.so (_ZN12FFmpegReader13ReadNextFrameEPvPc+404)
    #02 pc 00005a9f  /data/app/com.ffmpeg.sdk.videoplugin-
    1/lib/arm/libAndroidVideoPlugin.so (_ZN9Videofile17UpdateFramesCacheEv+118)
    #03 pc 000057d1  /data/app/com.ffmpeg.sdk.videoplugin-
    1/lib/arm/libAndroidVideoPlugin.so (_firstUpdateThread+80)

    It seems that when I open the second video it, replaces the first one.
    I came up with this idea when I opened 2 videos one by one (without any errors) then I started to play only the second one and as a result I didn’t get any errors. But when I tried to read frames from the first video, my app crashed with the error above.

    A bit about plugin`s structure :

    1. I created a class called FFmpegReader where methods work
      directly with ffmpeg (Opening file, ReadFrames and returning them as void*,
      Seek and Close).

    2. Then I created one more class which creates a FFmpegReader instance using
      the "new" operator inside its constructor, descriptor (unique id of the opened
      file), queue of cached frames (up to 100 at the same time) and
      methods to operate with FFmpegReader and framesCache.

    3. I created a main file where I created a vector of objects of class from
      the second point I described above. Also I declared 4 threads for each
      opened video file (4 opened videos is the max number of allowed opened
      videos at the same time). They call the method to update a cache of frames in
      its own video file using the video file descriptor. Finally I declared methods
      which will be called from the main app which is using this plugin to retrieve
      cached frames from cache.

    As you can see, I did everything to let it works separately with each new opened video. It seems the problem is inside of FFmpeg. There might be some restrictions I’m not aware of.

    ================UPDATE=================

    Sources of Main: https://pastebin.com/DfGH0BRZ
    Sources of Videofile class: https://pastebin.com/WjdS532B
    Sources of FFmpegReader class: https://pastebin.com/aPHpBvBv

    Hope it’s gonna help...