Recherche avancée

Médias (1)

Mot : - Tags -/copyleft

Autres articles (42)

  • Creating farms of unique websites

    13 avril 2011, par

    MediaSPIP 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" (...)

  • Publier sur MédiaSpip

    13 juin 2013

    Puis-je poster des contenus à partir d’une tablette Ipad ?
    Oui, si votre Médiaspip installé est à la version 0.2 ou supérieure. Contacter au besoin l’administrateur de votre MédiaSpip pour le savoir

  • Supporting all media types

    13 avril 2011, par

    Unlike most software and media-sharing platforms, MediaSPIP aims to manage as many different media types as possible. The following are just a few examples from an ever-expanding list of supported formats : images : png, gif, jpg, bmp and more audio : MP3, Ogg, Wav and more video : AVI, MP4, OGV, mpg, mov, wmv and more text, code and other data : OpenOffice, Microsoft Office (Word, PowerPoint, Excel), web (html, CSS), LaTeX, Google Earth and (...)

Sur d’autres sites (9190)

  • How to extract grayscale image from a video with ffmpeg-library ?

    9 mars 2016, par user1587451

    I’v compiled and tested this tutorial from here which works just fine. After I tried to edit the tutorial to read/convert frames into grayscale. I just changed pFrameRGB to pFrameGray, PIX_FMT_RGB24 to PIX_FMT_GRAY16 and to save just the 200th frame. It compiles and run but the image don’t show the expected. What’s wrong ?

    The image :
    image

    The edited code :

    #include <libavcodec></libavcodec>avcodec.h>
    #include <libavformat></libavformat>avformat.h>
    #include <libswscale></libswscale>swscale.h>

    #include

    // compatibility with newer API
    #if LIBAVCODEC_VERSION_INT &lt; AV_VERSION_INT(55,28,1)
    #define av_frame_alloc avcodec_alloc_frame
    #define av_frame_free avcodec_free_frame
    #endif

    void SaveFrame(AVFrame *pFrame, int width, int height, int iFrame) {
     FILE *pFile;
     char szFilename[32];
     int  y;

     // Open file
     sprintf(szFilename, "frame%d.ppm", iFrame);
     pFile=fopen(szFilename, "wb");
     if(pFile==NULL)
       return;

     // Write header
     fprintf(pFile, "P6\n%d %d\n255\n", width, height);

     // Write pixel data
     for(y=0; ydata[0]+y*pFrame->linesize[0], 1, width*3, pFile);

     // Close file
     fclose(pFile);
    }

    int main(int argc, char *argv[]) {
     // Initalizing these to NULL prevents segfaults!
     AVFormatContext   *pFormatCtx = NULL;
     int               i, videoStream;
     AVCodecContext    *pCodecCtxOrig = NULL;
     AVCodecContext    *pCodecCtx = NULL;
     AVCodec           *pCodec = NULL;
     AVFrame           *pFrame = NULL;
     AVFrame           *pFrameGRAY = NULL;
     AVPacket          packet;
     int               frameFinished;
     int               numBytes;
     uint8_t           *buffer = NULL;
     struct SwsContext *sws_ctx = NULL;

     if(argc &lt; 2) {
       printf("Please provide a movie file\n");
       return -1;
     }
     // Register all formats and codecs
     av_register_all();

     // Open video file
     if(avformat_open_input(&amp;pFormatCtx, argv[1], NULL, NULL)!=0)
       return -1; // Couldn't open file

     // Retrieve stream information
     if(avformat_find_stream_info(pFormatCtx, NULL)&lt;0)
       return -1; // Couldn't find stream information

     // Dump information about file onto standard error
     av_dump_format(pFormatCtx, 0, argv[1], 0);

     // Find the first video stream
     videoStream=-1;
     for(i=0; inb_streams; i++)
       if(pFormatCtx->streams[i]->codec->codec_type==AVMEDIA_TYPE_VIDEO) {
         videoStream=i;
         break;
       }
     if(videoStream==-1)
       return -1; // Didn't find a video stream

     // Get a pointer to the codec context for the video stream
     pCodecCtxOrig=pFormatCtx->streams[videoStream]->codec;
     // Find the decoder for the video stream
     pCodec=avcodec_find_decoder(pCodecCtxOrig->codec_id);
     if(pCodec==NULL) {
       fprintf(stderr, "Unsupported codec!\n");
       return -1; // Codec not found
     }
     // Copy context
     pCodecCtx = avcodec_alloc_context3(pCodec);
     if(avcodec_copy_context(pCodecCtx, pCodecCtxOrig) != 0) {
       fprintf(stderr, "Couldn't copy codec context");
       return -1; // Error copying codec context
     }

     // Open codec
     if(avcodec_open2(pCodecCtx, pCodec, NULL)&lt;0)
       return -1; // Could not open codec

     // Allocate video frame
     pFrame=av_frame_alloc();

     // Allocate an AVFrame structure
     pFrameGRAY=av_frame_alloc();
     if(pFrameGRAY==NULL)
       return -1;

     // Determine required buffer size and allocate buffer
     numBytes=avpicture_get_size(PIX_FMT_GRAY16, pCodecCtx->width,
                     pCodecCtx->height);
     buffer=(uint8_t *)av_malloc(numBytes*sizeof(uint8_t));

     // Assign appropriate parts of buffer to image planes in pFrameGRAY
     // Note that pFrameGRAY is an AVFrame, but AVFrame is a superset
     // of AVPicture
     avpicture_fill((AVPicture *)pFrameGRAY, buffer, PIX_FMT_GRAY16,
            pCodecCtx->width, pCodecCtx->height);

     // initialize SWS context for software scaling
     sws_ctx = sws_getContext(pCodecCtx->width,
                  pCodecCtx->height,
                  pCodecCtx->pix_fmt,
                  pCodecCtx->width,
                  pCodecCtx->height,
                  PIX_FMT_GRAY16,
                  SWS_BILINEAR,
                  NULL,
                  NULL,
                  NULL
                  );

     // Read frames and save first five frames to disk
     i=0;
     while(av_read_frame(pFormatCtx, &amp;packet)>=0) {
       // Is this a packet from the video stream?
       if(packet.stream_index==videoStream) {
         // Decode video frame
         avcodec_decode_video2(pCodecCtx, pFrame, &amp;frameFinished, &amp;packet);

         // Did we get a video frame?
         if(frameFinished) {
       // Convert the image from its native format to GRAY
       sws_scale(sws_ctx, (uint8_t const * const *)pFrame->data,
             pFrame->linesize, 0, pCodecCtx->height,
             pFrameGRAY->data, pFrameGRAY->linesize);

       // Save the frame to disk
       if(++i==200)
         SaveFrame(pFrameGRAY, pCodecCtx->width, pCodecCtx->height,
               i);
         }
       }

       // Free the packet that was allocated by av_read_frame
       av_free_packet(&amp;packet);
     }

     // Free the GRAY image
     av_free(buffer);
     av_frame_free(&amp;pFrameGRAY);

     // Free the YUV frame
     av_frame_free(&amp;pFrame);

     // Close the codecs
     avcodec_close(pCodecCtx);
     avcodec_close(pCodecCtxOrig);

     // Close the video file
     avformat_close_input(&amp;pFormatCtx);

     return 0;
    }
  • convert CCTV .264 video to one of common formats (mp4, avi, etc.) via ffmpeg or other cmdline tool

    21 mars 2016, par yy502

    I’ve got a CCTV cam that produces .264 format video clips. These clips plays fine just like any other normal video recording that you would expect on portable devices, but only with it’s manufacture provided App. When played directly using VLC or mplayer, only gray blocks are visible in the picture. I doubt it is propitiatory encoding, but some kind of hardware encoded raw h264 format that I’m just lacking the right combination of arguments/options for playback or convert using ffmpeg. ffmpeg -i does report the basic metadata correctly, but also crazy amount of frame errors.... but I know the video can be played fine.

    The Android App has the following files in its lib folder :
    enter image description here

    I understand these files are not all for video decoding but also some other feature in the app. I’m just hoping someone could maybe determine what extra lib or option is needed to convert it with ffmpeg. e.g. libh264ToRGB565.so could be useful maybe...?

    This is a screenshot of what to expect from the sample video.
    enter image description here

    And here is the sample video clip (1.3M, 1280x720p) : http://146.185.145.75/vid.264
    (MD5 = 0ae871484b3832984f46e6820b21c673)

    Any suggestion is appreciated.

  • Converting cv::Mat image from BGR to YUV using ffmpeg

    10 mars 2016, par bot1131357

    I am trying to convert BGR image into YUV420P, but when I try to view each of the YUV planes separately, this is what I see.

    Shouldn’t cv::Mat::data and AVFrame::data[0] be packed in the same way ? I should be able to do a direct memcpy. Am I missing something ?

    Any ideas ?

    Mat frame;
    VideoCapture cap;
    if(!cap.open(0)){
       return 0;
    }

    // capture a frame
    cap >> frame;
    if( frame.empty() ) return 0;

    cv::Size s = frame.size();
    int height = s.height;
    int width = s.width;

    // Creating two frames for conversion
    AVFrame *pFrameYUV =av_frame_alloc();
    AVFrame *pFrameBGR =av_frame_alloc();

    // Determine required buffer size and allocate buffer for YUV frame
    int numBytesYUV=av_image_get_buffer_size(AV_PIX_FMT_YUV420P, width,
                   height,1);          

    // Assign image buffers
    avpicture_fill((AVPicture *)pFrameBGR, frame.data,      AV_PIX_FMT_BGR24,
       width, height);

    uint8_t* bufferYUV=(uint8_t *)av_malloc(numBytesYUV*sizeof(uint8_t));
    avpicture_fill((AVPicture *)pFrameYUV, bufferYUV, AV_PIX_FMT_YUV420P,
           width, height);

    // Initialise Software scaling context
    struct SwsContext *sws_ctx = sws_getContext(width,
       height,
       AV_PIX_FMT_BGR24,
       width,
       height,
       AV_PIX_FMT_YUV420P,
       SWS_BILINEAR,
       NULL,
       NULL,
       NULL
       );

    // Convert the image from its BGR to YUV
    sws_scale(sws_ctx, (uint8_t const * const *)pFrameBGR->data,
         pFrameYUV->linesize, 0, height,
         pFrameYUV->data, pFrameYUV->linesize);



    // Trying to see the different planes of YUV
    Mat MY = Mat(height, width, CV_8UC1);
    memcpy(MY.data,pFrameYUV->data[0], height*width);
     imshow("Test1", MY); // fail
    Mat MU = Mat(height/2, width/2, CV_8UC1);
    memcpy(MU.data,pFrameYUV->data[1], height*width/4);
     imshow("Test2", MU); // fail
    Mat MV = Mat(height/2, width/2, CV_8UC1);
    memcpy(MV.data,pFrameYUV->data[2], height*width/4);
     imshow("Test3", MV); // fail  

    waitKey(0); // Wait for a keystroke in the window