Recherche avancée

Médias (16)

Mot : - Tags -/mp3

Autres articles (101)

  • Mise à jour de la version 0.1 vers 0.2

    24 juin 2013, par

    Explications des différents changements notables lors du passage de la version 0.1 de MediaSPIP à la version 0.3. Quelles sont les nouveautés
    Au niveau des dépendances logicielles Utilisation des dernières versions de FFMpeg (>= v1.2.1) ; Installation des dépendances pour Smush ; Installation de MediaInfo et FFprobe pour la récupération des métadonnées ; On n’utilise plus ffmpeg2theora ; On n’installe plus flvtool2 au profit de flvtool++ ; On n’installe plus ffmpeg-php qui n’est plus maintenu au (...)

  • Personnaliser en ajoutant son logo, sa bannière ou son image de fond

    5 septembre 2013, par

    Certains thèmes prennent en compte trois éléments de personnalisation : l’ajout d’un logo ; l’ajout d’une bannière l’ajout d’une image de fond ;

  • Ecrire une actualité

    21 juin 2013, par

    Présentez les changements dans votre MédiaSPIP ou les actualités de vos projets sur votre MédiaSPIP grâce à la rubrique actualités.
    Dans le thème par défaut spipeo de MédiaSPIP, les actualités sont affichées en bas de la page principale sous les éditoriaux.
    Vous pouvez personnaliser le formulaire de création d’une actualité.
    Formulaire de création d’une actualité Dans le cas d’un document de type actualité, les champs proposés par défaut sont : Date de publication ( personnaliser la date de publication ) (...)

Sur d’autres sites (13153)

  • Overlay filter in LibAV/FFMpeg returns strange (tripled) frame in C

    28 juillet 2014, par gkuczera

    I tried to make a program, which merges two frames. I use LibAV (libav-win32-20140428) under Windows 7 64 and Visual Studio 2013.
    But the result is quite odd.

    http://oi58.tinypic.com/rcobnm.jpg

    The filter which was used is Overlay. When I change the graph, to the one, that uses only one stream and add FADE effect, everything works like a charm. But OVERLAY and eg. DRAWBOX give me strange distortion (three frames on one and black and white effect). Here is the code :

    static int init_filter_graph(AVFilterGraph **pGraph, AVFilterContext **pSrc1, AVFilterContext **pSink)
    {
       AVFilterGraph* tFilterGraph;
       AVFilterContext* tBufferContext1;
       AVFilter* tBuffer1;
       AVFilterContext* tColorContext;
       AVFilter* tColor;
       AVFilterContext* tOverlayContext;
       AVFilter* tOverlay;
       AVFilterContext* tBufferSinkContext;
       AVFilter* tBufferSink;

       int tError;

       /* Create a new filtergraph, which will contain all the filters. */
       tFilterGraph = avfilter_graph_alloc();

       if (!tFilterGraph) {
           return -1;
       }

       { // BUFFER FILTER 1
           tBuffer1 = avfilter_get_by_name("buffer");
           if (!tBuffer1) {
               return -1;
           }
           tBufferContext1 = avfilter_graph_alloc_filter(tFilterGraph, tBuffer1, "src1");
           if (!tBufferContext1) {
               return -1;
           }

           av_dict_set(&tOptionsDict, "width", "320", 0);
           av_dict_set(&tOptionsDict, "height", "240", 0);
           av_dict_set(&tOptionsDict, "pix_fmt", "bgr24", 0);
           av_dict_set(&tOptionsDict, "time_base", "1/25", 0);
           av_dict_set(&tOptionsDict, "sar", "1", 0);
           tError = avfilter_init_dict(tBufferContext1, &tOptionsDict);
           av_dict_free(&tOptionsDict);
           if (tError < 0) {
               return tError;
           }
       }

       { // COLOR FILTER
           tColor = avfilter_get_by_name("color");
           if (!tColor) {
               return -1;
           }
           tColorContext = avfilter_graph_alloc_filter(tFilterGraph, tColor, "color");
           if (!tColorContext) {
               return -1;
           }

           av_dict_set(&tOptionsDict, "color", "white", 0);
           av_dict_set(&tOptionsDict, "size", "20x120", 0);
           av_dict_set(&tOptionsDict, "framerate", "1/25", 0);
           tError = avfilter_init_dict(tColorContext, &tOptionsDict);
           av_dict_free(&tOptionsDict);
           if (tError < 0) {
               return tError;
           }
       }

       { // OVERLAY FILTER
           tOverlay = avfilter_get_by_name("overlay");
           if (!tOverlay) {
               return -1;
           }
           tOverlayContext = avfilter_graph_alloc_filter(tFilterGraph, tOverlay, "overlay");
           if (!tOverlayContext) {
               return -1;
           }

           av_dict_set(&tOptionsDict, "x", "0", 0);
           av_dict_set(&tOptionsDict, "y", "0", 0);
           av_dict_set(&tOptionsDict, "main_w", "120", 0);
           av_dict_set(&tOptionsDict, "main_h", "140", 0);
           av_dict_set(&tOptionsDict, "overlay_w", "320", 0);
           av_dict_set(&tOptionsDict, "overlay_h", "240", 0);
           tError = avfilter_init_dict(tOverlayContext, &tOptionsDict);
           av_dict_free(&tOptionsDict);
           if (tError < 0) {
               return tError;
           }
       }

       { // BUFFERSINK FILTER
           tBufferSink = avfilter_get_by_name("buffersink");
           if (!tBufferSink) {
               return -1;
           }

           tBufferSinkContext = avfilter_graph_alloc_filter(tFilterGraph, tBufferSink, "sink");
           if (!tBufferSinkContext) {
               return -1;
           }

           tError = avfilter_init_str(tBufferSinkContext, NULL);
           if (tError < 0) {
               return tError;
           }
       }

       // Linking graph
       tError = avfilter_link(tBufferContext1, 0, tOverlayContext, 0);
       if (tError >= 0) {
           tError = avfilter_link(tColorContext, 0, tOverlayContext, 1);
       }
       if (tError >= 0) {
           tError = avfilter_link(tOverlayContext, 0, tBufferSinkContext, 0);
       }
       if (tError < 0) {
           return tError;
       }

       tError = avfilter_graph_config(tFilterGraph, NULL);
       if (tError < 0) {
           return tError;
       }

       *pGraph = tFilterGraph;
       *pSrc1 = tBufferContext1;
       *pSink = tBufferSinkContext;

       return 0;
    }

    What do you think is the reason ?

  • android ffmpeg halfninja av_open_input_file returns -2 (no such file or directory)

    20 janvier 2012, par cdavidyoung

    I have built ffmpeg for Android using the code and method described at

    https://github.com/halfninja/android-ffmpeg-x264

    using Ubuntu running in VirtualBox on windows. I then copied libvideokit.so into the Project\libs\armeabi folder of a Windows copy of the provided projects. From there I was able to run the ProjectTest from Eclipse on my Android device. I can see the ffmpeg code being executed but when it gets to the point of opening the input file it gives me the indicated error. I have noticed some discussion of this problem at

    FFMpeg on Android, undefined references to libavcodec functions, although it is listed on command line

    but the solutions have not helped since the file protocol is enabled in this build and I also tried putting "file :" in front of the filepath to no avail. For completeness I tried setting minimal_featureset=0 to enable all the defaults but this gives me the same error. Below is a snapshot of the logcat from Eclipse showing the output from Videokit with an extra call to LOGE to display the result from av_open_input_file. Any suggestions of things to try would be greatly appreciated.

    10-23 11:57:33.888: DEBUG/Videokit(4830): run() called
    10-23 11:57:33.888: DEBUG/Videokit(4830): run passing off to main()
    10-23 11:57:33.904: DEBUG/Videokit(4830): main(): registering all modules
    10-23 11:57:33.927: DEBUG/Videokit(4830): main(): registered everything
    10-23 11:57:33.927: DEBUG/Videokit(4830): main(): initting opts
    10-23 11:57:33.943: DEBUG/Videokit(4830): main(): initted opts.
    10-23 11:57:33.943: ERROR/Videokit(4830): ffmpeg version N-30996-gf925b24, Copyright (c) 2000-2011 the FFmpeg developers
    10-23 11:57:33.943: ERROR/Videokit(4830):   built on Oct 21 2011 13:54:03 with gcc 4.4.3
    10-23 11:57:33.943: ERROR/Videokit(4830):   configuration: --enable-cross-compile --arch=arm5te --enable-armv5te --target-os=linux --disable-stripping --prefix=../output --disable-neon --enable-version3 --disable-shared --enable-static --enable-gpl --enable-memalign-hack --cc=arm-linux-androideabi-gcc --ld=arm-linux-androideabi-ld --extra-cflags='-fPIC -DANDROID -D__thumb__ -mthumb -Wfatal-errors -Wno-deprecated' --disable-everything --enable-decoder=mjpeg --enable-demuxer=mjpeg --enable-parser=mjpeg --enable-demuxer=image2 --enable-muxer=mp4 --enable-encoder=libx264 --enable-libx264 --enable-decoder=rawvideo --enable-protocol=file --enable-hwaccels --disable-ffmpeg --disable-ffplay --disable-ffprobe --disable-ffserver --disable-network --enable-filter=buffer --enable-filter=buffersink --disable-demuxer=v4l --disable-demuxer=v4l2 --disable-indev=v4l --disable-indev=v4l2 --extra-cflags='-I../x264 -Ivideokit' --extra-ldflags=-L../x264
    10-23 11:57:33.943: DEBUG/Videokit(4830): main(): parsing options
    10-23 11:57:33.943: DEBUG/Videokit(4830): parse_options has 4 options to parse
    10-23 11:57:33.951: ERROR/Videokit(4830): opt_input_file av_open_input_file /mnt/sdcard/fun/snap0000.jpg -2
    10-23 11:57:33.951: ERROR/Videokit(4830): /mnt/sdcard/fun/snap0000.jpg: No such file or directory
    10-23 11:57:33.951: ERROR/Videokit(4830): ffmpeg_exit(1) called!
  • libavformat : calling avformat_open_input 2 times results in decoding white frames

    25 avril 2017, par explodus
    • pre build ffmpeg libs format/util/scale
    • version 57.56.101
    • don’t use any deprecated function
    • use the actual style
      • av_read_frame -> avcodec_send_packet -> avcodec_receive_frame -> sws_scale

    Everything is fine on the first run, but when i wanna load/open another file i only get white frames.

    void video::app::flush_cached_frames() {
       if (nullptr == avcontext)
           return;
       if (nullptr == avpicture)
           return;

       // send an empty packet which instructs the codec to start flushing
       AVPacket pkt;
       av_init_packet(&pkt);
       pkt.data = NULL;
       pkt.size = 0;
       avcodec_send_packet(avcontext, &pkt);

       // drain the codec
       while (true) {
           int r = avcodec_receive_frame(avcontext, avpicture);
           if (r != 0)
               break;
       }
    }

    void video::app::close_avi() {
       flush_cached_frames();

       if (avformat && avstream)
           seek_to_frame(0);
       avstream = nullptr;

       if (avfile)
           fclose(avfile);
       avfile = nullptr;

       if (avcontext)
           avcodec_close(avcontext);
       avcontext = nullptr;

       if (avformat)
           avformat_free_context(avformat);
       avformat = nullptr;

       if (sws_ctx)
           sws_freeContext(sws_ctx);
       sws_ctx = nullptr;

       if (avparser)
           av_parser_close(avparser);
       avparser = nullptr;

       if (avinbuf)
           av_free(avinbuf);
       avinbuf = nullptr;
    }

    I think i close anything perfectly. Has anyone an idea ?

    edit1 : init/load

    unsigned video::app::load(const std::string& name) {
       _file = name_;

       close_avi();

       av_register_all();
       avcodec_register_all();

       av_init_packet(&avpkt);

       AVCodecID codec_id = AV_CODEC_ID_H264;
       int64_t duration = 0;
       double fps = .0;
       int ret = 0;
       {
           av_log_set_level(1);

           avfile = fopen(name_.c_str(), "rb");

           avformat = avformat_alloc_context();
           ret = avformat_open_input(&avformat, name_.c_str(), nullptr, nullptr);
           ret = avformat_find_stream_info(avformat, nullptr);
           duration = avformat->duration;

           avstream = nullptr;
           if (avformat->nb_streams == 1) {
               avstream = avformat->streams[0];
           } else {
               avstream = avformat->streams[av_find_default_stream_index(avformat)];
           }

           if (avstream) {
               fps = (double(avstream->avg_frame_rate.num) / double(avstream->avg_frame_rate.den));
               codec_id = avstream->codecpar->codec_id;
               duration = avstream->duration;

               _vid.v_width = avstream->codecpar->width;
               _vid.v_height = avstream->codecpar->height;

               _vid.lastframe = duration / fps;
               _vid.lastframe = avstream->nb_frames;
           }

           avcodec = avcodec_find_decoder(avstream->codecpar->codec_id);
           avparser = av_parser_init(avcodec->id);
           avcontext = avcodec_alloc_context3(avcodec);

           avcontext->flags |= AVFMT_FLAG_NONBLOCK;
           avcontext->flags |= AVFMT_FLAG_FLUSH_PACKETS;
           avcontext->flags |= AVFMT_FLAG_DISCARD_CORRUPT;
           avcontext->flags |= AVFMT_FLAG_NOBUFFER;

           ret = avcodec_parameters_to_context(avcontext, avstream->codecpar);
           ret = avcodec_open2(avcontext, avcodec, nullptr);


           // Determine required buffer size and allocate buffer
           auto numBytes = av_image_get_buffer_size(
                 AV_PIX_FMT_BGRA
               , avcontext->width
               , avcontext->height
               , 1);
           if (avinbuf)
               av_free(avinbuf);
           avinbuf = nullptr;
           avinbuf = (uint8_t *)av_malloc(numBytes * sizeof(uint8_t));
           ret = av_image_fill_arrays(
                 avrgb->data
               , avrgb->linesize
               , avinbuf
               , AV_PIX_FMT_BGRA
               , avcontext->width
               , avcontext->height
               , 1);

           sws_ctx = sws_getContext(
                   avcontext->width
               , avcontext->height
               , avcontext->pix_fmt
               , avcontext->width
               , avcontext->height
               , AV_PIX_FMT_BGRA
               , SWS_BILINEAR
               , nullptr
               , nullptr
               , nullptr
           );
       }

       int err = (sws_ctx && avcontext && avformat) ? 0 : 1;
       // ...
    }

    getting the frame :

    uint8_t * video::app::get_frame(uint32_t frame) {
       if (!avcontext)
           return nullptr;
       if (!avformat)
           return nullptr;
       if (!avpicture)
           return nullptr;
       if (!avfile)
           return nullptr;

       try {
           int ret = 0;

           if (avpicture->data)
               av_frame_unref(avpicture);

           while (true) {
               if ((ret = av_read_frame(avformat, &avpkt)) < 0)
                   break;

               if (avpkt.stream_index == avstream->index) {
                   ret = avcodec_send_packet(avcontext, &avpkt);
                   if (ret < 0)
                       break;

                   while (ret >= 0) {
                       ret = avcodec_receive_frame(avcontext, avpicture);
                       if (ret == AVERROR_EOF) {
                           return nullptr;
                       } else if (ret == -11) {
                           avpkt.data = nullptr;
                           avpkt.size = 0;
                           break;
                       } else if (ret < 0) {
                           return nullptr;
                       }

                       if (ret == AVERROR(EAGAIN)) {
                           avpkt.data = nullptr;
                           avpkt.size = 0;
                           break;
                       }

                       if (ret >= 0) {
                           int linesize[AV_NUM_DATA_POINTERS] = {
                                 avpicture->linesize[0]
                               , avpicture->linesize[1]
                               , avpicture->linesize[2]
                               , avpicture->linesize[3]
                               , avpicture->linesize[4]
                               , avpicture->linesize[5]
                               , avpicture->linesize[6]
                               , avpicture->linesize[7]
                           };
                           uint8_t * data[AV_NUM_DATA_POINTERS] = {
                                 avpicture->data[0]
                               , avpicture->data[1]
                               , avpicture->data[2]
                               , avpicture->data[3]
                               , avpicture->data[4]
                               , avpicture->data[5]
                               , avpicture->data[6]
                               , avpicture->data[7]
                           };

                           {
                               // flip the frame, never ever touch this thing again!
                               // If the planes in the image are unequal size(e.g.YUV420) you need to adapt the height.
                               auto h = avcontext->height;
                               for (int i = 0; i < 4; i++) {
                                   if (i)
                                       data[i] += linesize[i] * ((h >> 1) - 1);
                                   else
                                       data[i] += linesize[i] * (h - 1);
                                   linesize[i] = -linesize[i];
                               }
                           }

                           ret = sws_scale(
                                 sws_ctx
                               , (uint8_t const * const *)data
                               , linesize
                               , 0
                               , avcontext->height
                               , avrgb->data
                               , avrgb->linesize);

                           av_packet_unref(&avpkt);

                           currPts = avpkt.dts;
                           currPts *= av_q2d(avstream->time_base);

                           usleep(1000000 * (currPts - prevPts));
                           prevPts = currPts;

                           return avrgb->data[0];
                       }
                   }
               }
               av_packet_unref(&avpkt);
           }

       } catch (...) {
       }

       return nullptr;
    }