Recherche avancée

Médias (39)

Mot : - Tags -/audio

Autres articles (45)

  • Submit bugs and patches

    13 avril 2011

    Unfortunately a software is never perfect.
    If you think you have found a bug, report it using our ticket system. Please to help us to fix it by providing the following information : the browser you are using, including the exact version as precise an explanation as possible of the problem if possible, the steps taken resulting in the problem a link to the site / page in question
    If you think you have solved the bug, fill in a ticket and attach to it a corrective patch.
    You may also (...)

  • Websites made ​​with MediaSPIP

    2 mai 2011, par

    This page lists some websites based on MediaSPIP.

  • Les autorisations surchargées par les plugins

    27 avril 2010, par

    Mediaspip core
    autoriser_auteur_modifier() afin que les visiteurs soient capables de modifier leurs informations sur la page d’auteurs

Sur d’autres sites (9474)

  • FFMPEG lossless simple & efficient format

    30 octobre 2016, par Adminy

    I took a sample video and ran this code for each image format like this :

    ffmpeg -i test.mkv png/%d.png
    ffmpeg -i test.mkv bmp/%d.bmp

    What I noted is that BMP at 1080P has a fixed size of 5.97 MB (6,266,934 bytes)

                                                              !6,220,800

    Then I did some maths :

    1 byte = 2^8 == 256 possible combinations
    r + g + b form a color (0-255,0-255,0-255)
    bmp = 3 * 1920 * 1080 = 6,220,800 bytes

    So extra is just the file headers ?! (46134 bytes for just headers ?)

    Next thing I noted that PNG size is dynamic and when the image has a lot of repetition is somewhere 2.5mb. Usually its between 10mb and 12mb.

    Also decoding BMP seemed a lot quicker compared to PNG. So there is no point in even looking at PNG. I would like to know why is it so huge over BMP if it has (zlib) compression factor.

    What is the best format to export to in terms of speed and size, preferred if its as simple as reading the file of color bytes ?

  • How to extract frames at 30 fps using FFMPEG APIs ?

    7 septembre 2016, par Amber Beriwal

    We are working on a project that consumes FFMPEG library for video frame extraction.

    We have seen that using command line, ffmpeg is capable of extracting frames at 30 fps using below command. Even using Xuggler, we are able to extract frames at 30 fps.

    ffmpeg -i input.flv -vf fps=1 out%d.png

    But when we use FFMPEG APIs directly in our code, we are getting following results :

    • 720p video (1280 x 720) - 16 fps (approx. 60 ms/frame)
    • 1080p video (1920 x 1080) - 7 fps (approx. 140 ms/frame)

    Ideally, we should be able to get the data in constant time (approx. 30 ms/frame).

    How can we get 30 fps ?

    Code :

    if (avformat_open_input(&pFormatCtx, pcVideoFile, NULL, NULL)) {
       iError = -1;  //Couldn't open file
    }

    if (!iError) {
       //Retrieve stream information
       if (avformat_find_stream_info(pFormatCtx, NULL) < 0)
           iError = -2; //Couldn't find stream information
    }

    //Find the first video stream
    if (!iError) {

       for (i = 0; i < pFormatCtx->nb_streams; i++) {
           if (AVMEDIA_TYPE_VIDEO
                   == pFormatCtx->streams[i]->codec->codec_type) {
               iFramesInVideo = pFormatCtx->streams[i]->nb_index_entries;
               duration = pFormatCtx->streams[i]->duration;
               begin = pFormatCtx->streams[i]->start_time;
               time_base = (pFormatCtx->streams[i]->time_base.num * 1.0f)
                       / pFormatCtx->streams[i]->time_base.den;

               pCodecCtx = avcodec_alloc_context3(NULL);
               if (!pCodecCtx) {
                   iError = -6;
                   break;
               }

               AVCodecParameters params = { 0 };
               iReturn = avcodec_parameters_from_context(&params,
                       pFormatCtx->streams[i]->codec);
               if (iReturn < 0) {
                   iError = -7;
                   break;
               }

               iReturn = avcodec_parameters_to_context(pCodecCtx, &params);
               if (iReturn < 0) {
                   iError = -7;
                   break;
               }

               //pCodecCtx = pFormatCtx->streams[i]->codec;

               iVideoStreamIndex = i;
               break;
           }
       }
    }

    if (!iError) {
       if (iVideoStreamIndex == -1) {
           iError = -3; // Didn't find a video stream
       }
    }

    if (!iError) {
       // Find the decoder for the video stream
       pCodec = avcodec_find_decoder(pCodecCtx->codec_id);
       if (pCodec == NULL) {
           iError = -4;
       }
    }

    if (!iError) {
       // Open codec
       if (avcodec_open2(pCodecCtx, pCodec, NULL) < 0)
           iError = -5;
    }

    if (!iError) {
       iNumBytes = av_image_get_buffer_size(AV_PIX_FMT_RGB24, pCodecCtx->width,
               pCodecCtx->height, 1);

       // initialize SWS context for software scaling
       sws_ctx = sws_getContext(pCodecCtx->width, pCodecCtx->height,
               pCodecCtx->pix_fmt, pCodecCtx->width, pCodecCtx->height,
               AV_PIX_FMT_RGB24,
               SWS_BILINEAR,
               NULL,
               NULL,
               NULL);
       if (!sws_ctx) {
           iError = -7;
       }
    }
    clock_gettime(CLOCK_MONOTONIC_RAW, &end);
    delta_us = (end.tv_sec - start.tv_sec) * 1000000
           + (end.tv_nsec - start.tv_nsec) / 1000;
    start = end;
    //LOGI("Starting_Frame_Extraction: %lld", delta_us);
    if (!iError) {
       while (av_read_frame(pFormatCtx, &packet) == 0) {
           // Is this a packet from the video stream?
           if (packet.stream_index == iVideoStreamIndex) {
               pFrame = av_frame_alloc();
               if (NULL == pFrame) {
                   iError = -8;
                   break;
               }

               // Decode video frame
               avcodec_decode_video2(pCodecCtx, pFrame, &iFrameFinished,
                       &packet);
               if (iFrameFinished) {
                   //OUR CODE
               }
               av_frame_free(&pFrame);
               pFrame = NULL;
           }
           av_packet_unref(&packet);
       }
    }
  • How can I convert a video raw frame to image using ffmpeg [closed]

    8 mai 2024, par Sean

    I have a video stream (from a DJI Drone) coming to a websocket server.The websocket server saves the data using the technique described in this answer.

    


    Technical Details

    



    


    The frame is :

    


      

    • From a H265 video generated by the drone
    • 


    • has size : height 1080 , width 1440
    • 


    • FPS : 30
    • 


    • Size : 45235
    • 


    


    This is the raw video data as we receive from the getData() function of the video frame returned by the addStreamDataListener method

    


    Goal

    



    


    I want that the saved frame (I have noted the peculiar size) to be converted to ffpmeg.

    


    Attempt(s) to solve

    



    


    I have tried :

    


    ffmpeg -f rawvideo -s 720x480 -i images/fileName1715180324575.dat output.jpg


    


    as well as

    


    ffmpeg -f rawvideo -pix_fmt rgb24 -s 1080x1440 -i images/fileName1715180324575.dat output.jpg


    


    and various other combinations

    


    Error

    



    


    I get :

    


    ffmpeg version n6.1.1 Copyright (c) 2000-2023 the FFmpeg developers


built with gcc 13.2.1 (GCC) 20230801
  configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-amf --enable-avisynth --enable-cuda-llvm --enable-lto --enable-fontconfig --enable-frei0r --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libdav1d --enable-libdrm --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libharfbuzz --enable-libiec61883 --enable-libjack --enable-libjxl --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libplacebo --enable-libpulse --enable-librav1e --enable-librsvg --enable-librubberband --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpl --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-libzimg --enable-nvdec --enable-nvenc --enable-opencl --enable-opengl --enable-shared --enable-vapoursynth --enable-version3 --enable-vulkan
  libavutil      58. 29.100 / 58. 29.100
  libavcodec     60. 31.102 / 60. 31.102
  libavformat    60. 16.100 / 60. 16.100
  libavdevice    60.  3.100 / 60.  3.100
  libavfilter     9. 12.100 /  9. 12.100
  libswscale      7.  5.100 /  7.  5.100
  libswresample   4. 12.100 /  4. 12.100
  libpostproc    57.  3.100 / 57.  3.100
[rawvideo @ 0x5d0fc4e5f600] Packet corrupt (stream = 0, dts = 0).
[rawvideo @ 0x5d0fc4e5f600] Estimating duration from bitrate, this may be inaccurate
Input #0, rawvideo, from 'images/fileName1715180324575.dat':
  Duration: N/A, start: 0.000000, bitrate: 933120 kb/s
  Stream #0:0: Video: rawvideo (RGB[24] / 0x18424752), rgb24, 1080x1440, 933120 kb/s, 25 tbr, 25 tbn
Stream mapping:
  Stream #0:0 -> #0:0 (rawvideo (native) -> mjpeg (native))
Press [q] to stop, [?] for help
[in#0/rawvideo @ 0x5d0fc4e5f500] corrupt input packet in stream 0
[rawvideo @ 0x5d0fc4e697c0] Invalid buffer size, packet size 45235 < expected frame_size 4665600
[vist#0:0/rawvideo @ 0x5d0fc4e69640] Error submitting packet to decoder: Invalid argument
[swscaler @ 0x5d0fc4e86580] deprecated pixel format used, make sure you did set range correctly
[vost#0:0/mjpeg @ 0x5d0fc4e6c6c0] No filtered frames for output stream, trying to initialize anyway.
Output #0, image2, to 'output.jpg':
  Metadata:
    encoder         : Lavf60.16.100
  Stream #0:0: Video: mjpeg, yuvj444p(pc, progressive), 1080x1440, q=2-31, 200 kb/s, 25 fps, 25 tbn
    Metadata:
      encoder         : Lavc60.31.102 mjpeg
    Side data:
      cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: N/A
[vist#0:0/rawvideo @ 0x5d0fc4e69640] Decode error rate 1 exceeds maximum 0.666667
[out#0/image2 @ 0x5d0fc4e69380] video:0kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
[out#0/image2 @ 0x5d0fc4e69380] Output file is empty, nothing was encoded(check -ss / -t / -frames parameters if used)
frame=    0 fps=0.0 q=0.0 Lsize=N/A time=N/A bitrate=N/A speed=N/A    
Conversion failed!


    


    or

    


    ffmpeg version n6.1.1 Copyright (c) 2000-2023 the FFmpeg developers
  built with gcc 13.2.1 (GCC) 20230801
  configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-amf --enable-avisynth --enable-cuda-llvm --enable-lto --enable-fontconfig --enable-frei0r --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libdav1d --enable-libdrm --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libharfbuzz --enable-libiec61883 --enable-libjack --enable-libjxl --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libplacebo --enable-libpulse --enable-librav1e --enable-librsvg --enable-librubberband --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpl --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-libzimg --enable-nvdec --enable-nvenc --enable-opencl --enable-opengl --enable-shared --enable-vapoursynth --enable-version3 --enable-vulkan
  libavutil      58. 29.100 / 58. 29.100
  libavcodec     60. 31.102 / 60. 31.102
  libavformat    60. 16.100 / 60. 16.100
  libavdevice    60.  3.100 / 60.  3.100
  libavfilter     9. 12.100 /  9. 12.100
  libswscale      7.  5.100 /  7.  5.100
  libswresample   4. 12.100 /  4. 12.100
  libpostproc    57.  3.100 / 57.  3.100
[rawvideo @ 0x5a4c0b8685c0] Packet corrupt (stream = 0, dts = 0).
[rawvideo @ 0x5a4c0b8685c0] Estimating duration from bitrate, this may be inaccurate
Input #0, rawvideo, from 'images/fileName1715180324575.dat':
  Duration: N/A, start: 0.000000, bitrate: 103680 kb/s
  Stream #0:0: Video: rawvideo (I420 / 0x30323449), yuv420p, 720x480, 103680 kb/s, 25 tbr, 25 tbn
Stream mapping:
  Stream #0:0 -> #0:0 (rawvideo (native) -> mjpeg (native))
Press [q] to stop, [?] for help
[in#0/rawvideo @ 0x5a4c0b8684c0] corrupt input packet in stream 0
[rawvideo @ 0x5a4c0b872700] Invalid buffer size, packet size 45235 < expected frame_size 518400
[vist#0:0/rawvideo @ 0x5a4c0b872580] Error submitting packet to decoder: Invalid argument
[swscaler @ 0x5a4c0b88f480] deprecated pixel format used, make sure you did set range correctly
[vost#0:0/mjpeg @ 0x5a4c0b875600] No filtered frames for output stream, trying to initialize anyway.
Output #0, image2, to 'output.jpg':
  Metadata:
    encoder         : Lavf60.16.100
  Stream #0:0: Video: mjpeg, yuvj420p(pc, progressive), 720x480, q=2-31, 200 kb/s, 25 fps, 25 tbn
    Metadata:
      encoder         : Lavc60.31.102 mjpeg
    Side data:
      cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: N/A
[vist#0:0/rawvideo @ 0x5a4c0b872580] Decode error rate 1 exceeds maximum 0.666667
[out#0/image2 @ 0x5a4c0b8722c0] video:0kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
[out#0/image2 @ 0x5a4c0b8722c0] Output file is empty, nothing was encoded(check -ss / -t / -frames parameters if used)
frame=    0 fps=0.0 q=0.0 Lsize=N/A time=N/A bitrate=N/A speed=N/A    
Conversion failed!


    


    or similar errors.

    


    Question

    



    


    How can I extract the image from a video frame using ffmpeg ? Thank you

    


    A sample of the image file may be found here : github