Recherche avancée

Médias (2)

Mot : - Tags -/map

Autres articles (78)

  • Diogene : création de masques spécifiques de formulaires d’édition de contenus

    26 octobre 2010, par

    Diogene est un des plugins ? SPIP activé par défaut (extension) lors de l’initialisation de MediaSPIP.
    A quoi sert ce plugin
    Création de masques de formulaires
    Le plugin Diogène permet de créer des masques de formulaires spécifiques par secteur sur les trois objets spécifiques SPIP que sont : les articles ; les rubriques ; les sites
    Il permet ainsi de définir en fonction d’un secteur particulier, un masque de formulaire par objet, ajoutant ou enlevant ainsi des champs afin de rendre le formulaire (...)

  • MediaSPIP version 0.1 Beta

    16 avril 2011, par

    MediaSPIP 0.1 beta est la première version de MediaSPIP décrétée comme "utilisable".
    Le fichier zip ici présent contient uniquement les sources de MediaSPIP en version standalone.
    Pour avoir une installation fonctionnelle, il est nécessaire d’installer manuellement l’ensemble des dépendances logicielles sur le serveur.
    Si vous souhaitez utiliser cette archive pour une installation en mode ferme, il vous faudra également procéder à d’autres modifications (...)

  • Utilisation et configuration du script

    19 janvier 2011, par

    Informations spécifiques à la distribution Debian
    Si vous utilisez cette distribution, vous devrez activer les dépôts "debian-multimedia" comme expliqué ici :
    Depuis la version 0.3.1 du script, le dépôt peut être automatiquement activé à la suite d’une question.
    Récupération du script
    Le script d’installation peut être récupéré de deux manières différentes.
    Via svn en utilisant la commande pour récupérer le code source à jour :
    svn co (...)

Sur d’autres sites (8285)

  • Wrong colors when converting an AVFrame to QVideoFrame

    2 janvier 2020, par Michael G.

    I read videos with libav and display them in a QAbstractVideoSurface in QML. It works so far, however, I did not manage to get the colors right.

    My av_read_frame Loop looks like this :

    if (frameFinished)
    {
                           SwsContext* context = nullptr;
                           context = sws_getContext(_frame->width, _frame->height, (AVPixelFormat)_frame->format, _frame->width, _frame->height, AVPixelFormat::AV_PIX_FMT_RGBA, SWS_BICUBIC, nullptr, nullptr, nullptr);
                           QImage img(_frame->width, _frame->height, QImage::Format_RGBA8888);
                           uint8_t* dstSlice[] = { img.bits() };
                           int dstStride = img.width() * 4;
                           sws_scale(context, _frame->data, _frame->linesize,
                               0, _frame->height, dstSlice, &dstStride);

                           av_packet_unref(&packet);
                           sws_freeContext(context);
    }

    If I save the image to disk at this point, the colors are already wrong (everything looks red).
    Later, I display the images in a video surface with the format QVideoFrame::Format_ARGB32, and the colors are wrong again, but look different than the saved image (everything looks blue).

    I started to experiment with libav/ffmpeg recently, so maybe the problem is something else and I just have no clue. Let me know, if you need more information :)

  • RGB to YUV conversion with libav (ffmpeg) triplicates image

    17 avril 2021, par José Tomás Tocino

    I'm building a small program to capture the screen (using X11 MIT-SHM extension) on video. It works well if I create individual PNG files of the captured frames, but now I'm trying to integrate libav (ffmpeg) to create the video and I'm getting... funny results.

    


    The furthest I've been able to reach is this. The expected result (which is a PNG created directly from the RGB data of the XImage file) is this :

    


    Expected result

    


    However, the result I'm getting is this :

    


    Obtained result

    


    As you can see the colors are funky and the image appears cropped three times. I have a loop where I capture the screen, and first I generate the individual PNG files (currently commented in the code below) and then I try to use libswscale to convert from RGB24 to YUV420 :

    


    while (gRunning) {
        printf("Processing frame framecnt=%i \n", framecnt);

        if (!XShmGetImage(display, RootWindow(display, DefaultScreen(display)), img, 0, 0, AllPlanes)) {
            printf("\n Ooops.. Something is wrong.");
            break;
        }

        // PNG generation
        // snprintf(imageName, sizeof(imageName), "salida_%i.png", framecnt);
        // writePngForImage(img, width, height, imageName);

        unsigned long red_mask = img->red_mask;
        unsigned long green_mask = img->green_mask;
        unsigned long blue_mask = img->blue_mask;

        // Write image data
        for (int y = 0; y < height; y++) {
            for (int x = 0; x < width; x++) {
                unsigned long pixel = XGetPixel(img, x, y);

                unsigned char blue = pixel & blue_mask;
                unsigned char green = (pixel & green_mask) >> 8;
                unsigned char red = (pixel & red_mask) >> 16;

                pixel_rgb_data[y * width + x * 3] = red;
                pixel_rgb_data[y * width + x * 3 + 1] = green;
                pixel_rgb_data[y * width + x * 3 + 2] = blue;
            }
        }

        uint8_t* inData[1] = { pixel_rgb_data };
        int inLinesize[1] = { in_w };

        printf("Scaling frame... \n");
        int sliceHeight = sws_scale(sws_context, inData, inLinesize, 0, height, pFrame->data, pFrame->linesize);

        printf("Obtained slice height: %i \n", sliceHeight);
        pFrame->pts = framecnt * (pVideoStream->time_base.den) / ((pVideoStream->time_base.num) * 25);

        printf("Frame pts: %li \n", pFrame->pts);
        int got_picture = 0;

        printf("Encoding frame... \n");
        int ret = avcodec_encode_video2(pCodecCtx, &pkt, pFrame, &got_picture);

//                int ret = avcodec_send_frame(pCodecCtx, pFrame);

        if (ret != 0) {
            printf("Failed to encode! Error: %i\n", ret);
            return -1;
        }

        printf("Succeed to encode frame: %5d - size: %5d\n", framecnt, pkt.size);

        framecnt++;

        pkt.stream_index = pVideoStream->index;
        ret = av_write_frame(pFormatCtx, &pkt);

        if (ret != 0) {
            printf("Error writing frame! Error: %framecnt \n", ret);
            return -1;
        }

        av_packet_unref(&pkt);
    }


    


    I've placed the entire code at this gist. This question right here looks pretty similar to mine, but not quite, and the solution did not work for me, although I think this has something to do with the way the line stride is calculated.

    


  • Overlay system time with milliseconds in ffmpeg

    8 septembre 2017, par userDtrm

    I need to overlay the current system time with milliseconds in ffmpeg. The solutions I’ve come here across simply displays the pts or gmtime (doesn’t show milliseconds). Please find below the script that I’m currently using for this. This simply shows the pts time stamp.

    ffmpeg -f v4l2 -input_format yuyv422 -framerate 30 -s 640x480 -i /dev/video0 -filter_complex "drawtext=fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='frame %{n}\\: %{pict_type}\\: pts=%{pts\\:hms}': x=100: y=50: fontsize=24: fontcolor=yellow@0.8: box=1: boxcolor=blue@0.9" -analyzeduration 5 -c:v libx264 -profile:v baseline -trellis 0 -subq 1 -level 32 -preset ultrafast -tune zerolatency -me_method epzs -r 50 -crf 20 -threads 0 -bufsize 1 -coder 0 -b_strategy 0 -bf 0 -sc_threshold 0 -x264-params vbv-maxrate=2000:vbv-bufsize=100:slice-max-size=200:keyint=10:min-keyint=10:partitions=-parti8x8-partp8x8:me=dia:qpmin=10:qpmax=51:qpstep=4:ref=1: -pix_fmt yuv420p -an -f mpegts - | nc -u 131.227.87.152 7001

    Can someone please let me know how to get the current system time with milliseconds into the ffmpeg output ?

    Thanks.