Recherche avancée

Médias (0)

Mot : - Tags -/clipboard

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

Autres articles (75)

  • List of compatible distributions

    26 avril 2011, par

    The table below is the list of Linux distributions compatible with the automated installation script of MediaSPIP. Distribution nameVersion nameVersion number Debian Squeeze 6.x.x Debian Weezy 7.x.x Debian Jessie 8.x.x Ubuntu The Precise Pangolin 12.04 LTS Ubuntu The Trusty Tahr 14.04
    If you want to help us improve this list, you can provide us access to a machine whose distribution is not mentioned above or send the necessary fixes to add (...)

  • Les tâches Cron régulières de la ferme

    1er décembre 2010, par

    La gestion de la ferme passe par l’exécution à intervalle régulier de plusieurs tâches répétitives dites Cron.
    Le super Cron (gestion_mutu_super_cron)
    Cette tâche, planifiée chaque minute, a pour simple effet d’appeler le Cron de l’ensemble des instances de la mutualisation régulièrement. Couplée avec un Cron système sur le site central de la mutualisation, cela permet de simplement générer des visites régulières sur les différents sites et éviter que les tâches des sites peu visités soient trop (...)

  • Support audio et vidéo HTML5

    10 avril 2011

    MediaSPIP utilise les balises HTML5 video et audio pour la lecture de documents multimedia en profitant des dernières innovations du W3C supportées par les navigateurs modernes.
    Pour les navigateurs plus anciens, le lecteur flash Flowplayer est utilisé.
    Le lecteur HTML5 utilisé a été spécifiquement créé pour MediaSPIP : il est complètement modifiable graphiquement pour correspondre à un thème choisi.
    Ces technologies permettent de distribuer vidéo et son à la fois sur des ordinateurs conventionnels (...)

Sur d’autres sites (10687)

  • Getting a lot of Tail Silence when combining an image and audio into mp4 movie

    1er avril 2023, par Meryan

    As it can be seen from this snapshot the audio HELLO.mp3 combined with bitmap HELLO.jpg produced a movie HELLO_aac.mp4 that has a huge amount of tail silence

    


    enter image description here

    


    The command line I was helped to put together is the following

    


    ======================== 
IN_FILES=-i ".\HELLO.JPG" -i ".\HELLO.MP3"    
OUT_FILE=".\HELLO_aac.MP4"   
EXE="S:\_BINS\FFmpeg 4.2.1 20200112\bin\ffmpeg.exe"  
OPTIONS= -loop 1   -i ".\HELLO.JPG" -i ".\HELLO.MP3"    -vf "scale=-1:1080,pad=1920:1080:(1920-iw)/2:(1080-ih)/2,setsar=1"  -c:v libx264 -profile:v main -pix_fmt yuv420p -r 24 -video_track_timescale 24000    -c:a aac    -shortest -y ".\HELLO_aac.MP4"     
======================== 



    


    Here is the captured output from FFmpeg

    


    ffmpeg version git-2020-01-10-3d894db Copyright (c) 2000-2020 the FFmpeg developers
  built with gcc 9.2.1 (GCC) 20191125
  configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt --enable-amf
  libavutil      56. 38.100 / 56. 38.100
  libavcodec     58. 65.103 / 58. 65.103
  libavformat    58. 35.101 / 58. 35.101
  libavdevice    58.  9.103 / 58.  9.103
  libavfilter     7. 70.101 /  7. 70.101
  libswscale      5.  6.100 /  5.  6.100
  libswresample   3.  6.100 /  3.  6.100
  libpostproc    55.  6.100 / 55.  6.100
Input #0, image2, from '.\HELLO.JPG':
  Duration: 00:00:00.04, start: 0.000000, bitrate: 23923 kb/s
    Stream #0:0: Video: mjpeg (Baseline), yuvj420p(pc, bt470bg/unknown/unknown), 1600x1200 [SAR 120:120 DAR 4:3], 25 fps, 25 tbr, 25 tbn, 25 tbc
[mp3 @ 000002019015d4c0] Estimating duration from bitrate, this may be inaccurate
Input #1, mp3, from '.\HELLO.MP3':
  Metadata:
    genre           : Blues
    id3v2_priv.XMP  : <?xpacket begin="\xef\xbb\xbf" id="W5M0MpCehiHzreSzNTczkc9d"?>\x0a\x0a \x0a  s
    Stream #1:0: Audio: mp3, 24000 Hz, mono, fltp, 32 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (mjpeg (native) -> h264 (libx264))
  Stream #1:0 -> #0:1 (mp3 (mp3float) -> aac (native))
Press [q] to stop, [?] for help
[swscaler @ 0000020190b10380] deprecated pixel format used, make sure you did set range correctly
[swscaler @ 0000020190b10380] Warning: data is not aligned! This can lead to a speed loss
[libx264 @ 0000020190759300] using SAR=1/1
[libx264 @ 0000020190759300] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 0000020190759300] profile Main, level 4.0, 4:2:0, 8-bit
[libx264 @ 0000020190759300] 264 - core 158 - H.264/MPEG-4 AVC codec - Copyleft 2003-2019 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x1:0x111 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=34 lookahead_threads=5 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=24 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to '.\HELLO_aac.MP4':
  Metadata:
    encoder         : Lavf58.35.101
    Stream #0:0: Video: h264 (libx264) (avc1 / 0x31637661), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], q=-1--1, 24 fps, 24k tbn, 24 tbc
    Metadata:
      encoder         : Lavc58.65.103 libx264
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
    Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 24000 Hz, mono, fltp, 69 kb/s
    Metadata:
      encoder         : Lavc58.65.103 aac
frame=   69 fps=0.0 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A dup=0 drop=1 speed=   0x    
frame=   97 fps=0.0 q=-1.0 Lsize=     128kB time=00:00:03.91 bitrate= 267.1kbits/s dup=0 drop=2 speed=5.04x    
video:119kB audio:6kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 2.208101%
[libx264 @ 0000020190759300] frame I:1     Avg QP:12.88  size:103994
[libx264 @ 0000020190759300] frame P:24    Avg QP:14.05  size:   224
[libx264 @ 0000020190759300] frame B:72    Avg QP:12.67  size:   160
[libx264 @ 0000020190759300] consecutive B-frames:  1.0%  0.0%  0.0% 99.0%
[libx264 @ 0000020190759300] mb I  I16..4: 61.7%  0.0% 38.3%
[libx264 @ 0000020190759300] mb P  I16..4:  0.1%  0.0%  0.0%  P16..4:  0.5%  0.1%  0.0%  0.0%  0.0%    skip:99.3%
[libx264 @ 0000020190759300] mb B  I16..4:  0.0%  0.0%  0.0%  B16..8:  1.6%  0.0%  0.0%  direct: 0.0%  skip:98.4%  L0:81.1% L1:18.9% BI: 0.0%
[libx264 @ 0000020190759300] coded y,uvDC,uvAC intra: 34.5% 17.3% 15.6% inter: 0.0% 0.1% 0.0%
[libx264 @ 0000020190759300] i16 v,h,dc,p: 70% 19%  7%  3%
[libx264 @ 0000020190759300] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 40% 22% 12%  4%  5%  5%  3%  5%  4%
[libx264 @ 0000020190759300] i8c dc,h,v,p: 80%  8% 10%  2%
[libx264 @ 0000020190759300] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 0000020190759300] ref P L0: 97.6%  0.3%  1.5%  0.6%
[libx264 @ 0000020190759300] ref B L0:  1.8% 98.2%
[libx264 @ 0000020190759300] ref B L1: 99.9%  0.1%
[libx264 @ 0000020190759300] kb/s:239.28
[aac @ 000002019075bf40] Qavg: 8004.814
======================== 


    


    I have also tried the following command line

    


    "S:\_BINS\ffmpeg-2023-03-20\bin\ffmpeg.exe" -loop 1 -i "HELLO.JPG" -i "HELLO.MP3" -c:v libx264 -tune stillimage -c:a aac -b:a 192k -pix_fmt yuv420p -y -shortest "HELLO_aac.mp4"    


    


    With similar long dead tail silence ???

    


  • ffmpeg rtmp live stream to Azure Media Services

    18 mars 2015, par Pilskalns

    Somehow I got publishing Azure Media Services to work, except there is huge frame drop (almost every frame) with those settings :

    ffmpeg -i "http://stream01/hls/live/playlist-mid.m3u8" -strict -2 -c:a aac -b:a 192k
    -ar 44100 -r 25 -g 60 -keyint_min 60 -b:v 2000k -c:v libx264 -bufsize 2000k
    -maxrate 2000k -f flv "rtmp://publishurl.working.is/mystream1"

    + I can’t play URL from Azure.

    When I publish to local nginx-rtmp server, frame drop stays and despite it I can play it. So, I believe that frame drop is ffmpeg related not Azure. Processor is not overloaded, available bandwidth is excellent.

    When I try original settings from this URL (at very bottom), I this get additionaly this ffmpeg error Past duration 0.719994 too large

    Here’s more from output :

    c:\ffmpeg\bin>ffmpeg -i "http://stream01/hls/live/playlist-mid.m3u8" -strict -2 -c:a aac -b:a 192k -ar 44100 -r 25 -g 60 -keyint_min 60 -b:v 2000k -c:
    v libx264 -bufsize 1000k -maxrate 2000k -f flv "rtmp://********.channel.mediaservices.windows.net:1935/live/9590f0be/mystream1"
    ffmpeg version N-69972-g6c91afe Copyright (c) 2000-2015 the FFmpeg developers
     built with gcc 4.9.2 (GCC)
     configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnu
    tls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libfreetype --enable-libgme --enable-libgsm --enable-
    libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-l
    ibrtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --
    enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --ena
    ble-libxvid --enable-lzma --enable-decklink --enable-zlib
     libavutil      54. 19.100 / 54. 19.100
     libavcodec     56. 25.100 / 56. 25.100
     libavformat    56. 23.100 / 56. 23.100
     libavdevice    56.  4.100 / 56.  4.100
     libavfilter     5. 11.100 /  5. 11.100
     libswscale      3.  1.101 /  3.  1.101
     libswresample   1.  1.100 /  1.  1.100
     libpostproc    53.  3.100 / 53.  3.100
    Input #0, hls,applehttp, from 'http://stream01/hls/live/playlist-mid.m3u8':
     Duration: N/A, start: 3314.605633, bitrate: N/A
     Program 0
       Metadata:
         variant_bitrate : 1500000
       Stream #0:0: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p(tv), 854x480 [SAR 1:1 DAR 427:240], 50 fps, 50 tbr, 90k tbn, 100 tbc
       Metadata:
         variant_bitrate : 1500000
       Stream #0:1: Audio: aac (LC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 216 kb/s
       Metadata:
         variant_bitrate : 1500000
    [libx264 @ 0000000000306280] using SAR=1/1
    [libx264 @ 0000000000306280] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2
    [libx264 @ 0000000000306280] profile High, level 3.0
    [libx264 @ 0000000000306280] 264 - core 144 r2525 40bb568 - H.264/MPEG-4 AVC codec - Copyleft 2003-2014 - http://www.videolan.org/x264.html - options:
    cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 dead
    zone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_in
    tra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=60 keyint_min=31 scenecut=40 intra_refresh=0 rc_lookahea
    d=40 rc=cbr mbtree=1 bitrate=2000 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 vbv_maxrate=2000 vbv_bufsize=1000 nal_hrd=none filler=0 ip_ratio=1.
    40 aq=1:1.00
    Output #0, flv, to 'rtmp://*******.channel.mediaservices.windows.net:1935/live/37b4e25/mystream1':
     Metadata:
       encoder         : Lavf56.23.100
       Stream #0:0: Video: h264 (libx264) ([7][0][0][0] / 0x0007), yuv420p, 854x480 [SAR 1:1 DAR 427:240], q=-1--1, 2000 kb/s, 25 fps, 1k tbn, 25 tbc
       Metadata:
         variant_bitrate : 1500000
         encoder         : Lavc56.25.100 libx264
       Stream #0:1: Audio: aac ([10][0][0][0] / 0x000A), 44100 Hz, stereo, fltp, 192 kb/s
       Metadata:
         variant_bitrate : 1500000
         encoder         : Lavc56.25.100 aac
    Stream mapping:
     Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
     Stream #0:1 -> #0:1 (aac (native) -> aac (native))
    Press [q] to stop, [?] for help
    [flv @ 0000000000305820] Failed to update header with correct duration.1.4kbits/s dup=0 drop=10697
    [flv @ 0000000000305820] Failed to update header with correct filesize.
    frame=10714 fps= 24 q=-1.0 Lsize=  100583kB time=00:07:11.08 bitrate=1911.4kbits/s dup=0 drop=10701
    video:90024kB audio:10042kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.516478%
    [libx264 @ 0000000000306280] frame I:190   Avg QP:10.58  size: 72438
    [libx264 @ 0000000000306280] frame P:3406  Avg QP:14.32  size: 19296
    [libx264 @ 0000000000306280] frame B:7118  Avg QP:19.55  size:  1784
    [libx264 @ 0000000000306280] consecutive B-frames:  8.8%  4.4% 10.5% 76.3%
    [libx264 @ 0000000000306280] mb I  I16..4: 23.0% 20.2% 56.8%
    [libx264 @ 0000000000306280] mb P  I16..4:  2.7%  4.5%  5.2%  P16..4: 41.9% 11.6%  8.7%  0.0%  0.0%    skip:25.4%
    [libx264 @ 0000000000306280] mb B  I16..4:  0.1%  0.1%  0.2%  B16..8: 26.5%  2.2%  0.5%  direct: 3.2%  skip:67.1%  L0:51.0% L1:38.2% BI:10.8%
    [libx264 @ 0000000000306280] 8x8 transform intra:31.3% inter:36.6%
    [libx264 @ 0000000000306280] coded y,uvDC,uvAC intra: 80.5% 73.5% 51.1% inter: 16.1% 18.8% 5.8%
    [libx264 @ 0000000000306280] i16 v,h,dc,p: 21% 29% 27% 23%
    [libx264 @ 0000000000306280] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 22% 32% 19%  4%  4%  4%  5%  4%  7%
    [libx264 @ 0000000000306280] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 27% 30% 15%  4%  5%  5%  5%  4%  5%
    [libx264 @ 0000000000306280] i8c dc,h,v,p: 38% 30% 24%  8%
    [libx264 @ 0000000000306280] Weighted P-Frames: Y:1.8% UV:0.4%
    [libx264 @ 0000000000306280] ref P L0: 78.0%  8.5% 10.1%  3.3%  0.0%
    [libx264 @ 0000000000306280] ref B L0: 91.3%  7.9%  0.8%
    [libx264 @ 0000000000306280] ref B L1: 95.4%  4.6%
    [libx264 @ 0000000000306280] kb/s:1716.97
    Received signal 2: terminating.
  • How do I use the FFmpeg libraries to extract every nth frame from a video and save it as a small image file in C++ ?

    1er novembre 2022, par Panchs

    After experimenting with the examples on the FFmpeg documentation, I was finally able to create a short program that extracts every nth frame from a video. However, the output files that it produces are huge at over 15mb for each image. How can I change this to produce lower quality images ?

    


    The result I am trying to get is done easily on the command line with :

    


    ffmpeg -i [input video] -vf "select=not(mod(n\,10))" -fps_mode vfr img_%03d.jpg

    


    For a video with about 500 frames, this creates 50 images that are only about 800kb each ; how am would I be able to mimic this in my program ?

    


    My code consists of opening the input file, decoding the packets, then saving the frames :

    


    #include <cstdio>&#xA;#include <cstdlib>&#xA;#include <iostream>&#xA;&#xA;extern "C" {&#xA;#include <libavcodec></libavcodec>avcodec.h>&#xA;#include <libavformat></libavformat>avformat.h>&#xA;#include <libavfilter></libavfilter>buffersink.h>&#xA;#include <libavfilter></libavfilter>buffersrc.h>&#xA;#include <libavutil></libavutil>opt.h>&#xA;#include <libswscale></libswscale>swscale.h>&#xA;}&#xA;&#xA;static AVFormatContext *fmt_ctx;&#xA;static AVCodecContext *dec_ctx;&#xA;static int video_stream_index = -1;&#xA;&#xA;// OPEN THE INPUT FILE&#xA;static int open_input_file(const char *filename) {&#xA;    // INIT VARS AND FFMPEG OBJECTS&#xA;    int ret;&#xA;    const AVCodec *dec;&#xA;&#xA;    // OPEN INPUT FILE&#xA;    if((ret = avformat_open_input(&amp;fmt_ctx, filename, NULL, NULL)) &lt; 0) {&#xA;        printf("ERROR: failed to open input file\n");&#xA;        return ret;&#xA;    }&#xA;&#xA;    // FIND STREAM INFO BASED ON INPUT FILE&#xA;    if((ret = avformat_find_stream_info(fmt_ctx, NULL)) &lt; 0) {&#xA;        printf("ERROR: failed to find stream information\n");&#xA;        return ret;&#xA;    }&#xA;&#xA;    // FIND THE BEST VIDEO STREAM FOR THE INPUT FILE&#xA;    ret = av_find_best_stream(fmt_ctx, AVMEDIA_TYPE_VIDEO, -1, -1, &amp;dec, 0);&#xA;    if(ret &lt; 0) {&#xA;        printf("ERROR: failed to find a video stream in the input file\n");&#xA;        return ret;&#xA;    }&#xA;    video_stream_index = ret;&#xA;&#xA;    // ALLOCATE THE DECODING CONTEXT FOR THE INPUT FILE&#xA;    dec_ctx = avcodec_alloc_context3(dec);&#xA;    if(!dec_ctx) {&#xA;        printf("ERROR: failed to allocate decoding context\n");&#xA;        // CAN NOT ALLOCATE MEMORY ERROR&#xA;        return AVERROR(ENOMEM);&#xA;    }&#xA;    avcodec_parameters_to_context(dec_ctx, fmt_ctx->streams[video_stream_index]->codecpar);&#xA;&#xA;    // INIT THE VIDEO DECODER&#xA;    if((ret = avcodec_open2(dec_ctx, dec, NULL)) &lt; 0) {&#xA;        printf("ERROR: failed to open video decoder\n");&#xA;        return ret;&#xA;    }&#xA;&#xA;    return 0;&#xA;}&#xA;&#xA;// SAVE THE FILE&#xA;static void save(unsigned char *buf, int wrap, int x_size, int y_size, char *file_name) {&#xA;    // INIT THE EMPTY FILE&#xA;    FILE *file;&#xA;&#xA;    // OPEN AND WRITE THE IMAGE FILE&#xA;    file = fopen(file_name, "wb");&#xA;    fprintf(file, "P6\n%d %d\n%d\n", x_size, y_size, 255);&#xA;    for(int i = 0; i &lt; y_size; i&#x2B;&#x2B;) {&#xA;        fwrite(buf &#x2B; i * wrap, 1, x_size * 3, file);&#xA;    }&#xA;    fclose(file);&#xA;}&#xA;&#xA;// DECODE FRAME AND CONVERT IT TO AN RGB IMAGE&#xA;static void decode(AVCodecContext *cxt, AVFrame *frame, AVPacket *pkt,&#xA;                   const char *out_file_name, const char *file_ext, int mod=1) {&#xA;    // INIT A BLANK CHAR TO HOLD THE FILE NAME AND AN EMPTY INT TO HOLD FUNCTION RETURN VALUES&#xA;    char buf[1024];&#xA;    int ret;&#xA;&#xA;    // SEND PACKET TO DECODER&#xA;    ret = avcodec_send_packet(cxt, pkt);&#xA;    if(ret &lt; 0) {&#xA;        printf("ERROR: error sending packet for decoding\n");&#xA;        exit(1);&#xA;    }&#xA;&#xA;    // CREATE A SCALAR CONTEXT FOR CONVERSION&#xA;    SwsContext *sws_ctx = sws_getContext(dec_ctx->width, dec_ctx->height, dec_ctx->pix_fmt, dec_ctx->width,&#xA;                                         dec_ctx->height, AV_PIX_FMT_RGB24, SWS_BICUBIC, NULL, NULL, NULL);&#xA;&#xA;    // CREATE A NEW RGB FRAME FOR CONVERSION&#xA;    AVFrame* rgb_frame = av_frame_alloc();&#xA;    rgb_frame->format = AV_PIX_FMT_RGB24;&#xA;    rgb_frame->width = dec_ctx->width;&#xA;    rgb_frame->height = dec_ctx->height;&#xA;&#xA;    // ALLOCATE A NEW BUFFER FOR THE RGB CONVERSION FRAME&#xA;    av_frame_get_buffer(rgb_frame, 0);&#xA;&#xA;    // WHILE RETURN COMES BACK OKAY (FUNCTION RETURNS >= 0)...&#xA;    while(ret >= 0) {&#xA;        // GET FRAME BACK FROM DECODER&#xA;        ret = avcodec_receive_frame(cxt, frame);&#xA;        // IF "RESOURCE TEMP NOT AVAILABLE" OR "END OF FILE" ERROR...&#xA;        if(ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) {&#xA;            return;&#xA;        } else if(ret &lt; 0) {&#xA;            printf("ERROR: error during decoding\n");&#xA;            exit(1);&#xA;        }&#xA;&#xA;        // IF FRAME NUMBER IF THE (MOD)TH FRAME...&#xA;        if(cxt->frame_number % mod == 0){&#xA;            // OUTPUT WHICH FRAME IS BEING SAVED&#xA;            printf("saving frame %03d\n", cxt->frame_number);&#xA;            // REMOVES TEMPORARY BUFFERED DATA&#xA;            fflush(stdout);&#xA;&#xA;            // SCALE (CONVERT) THE OLD FRAME TO THE NEW RGB FRAME&#xA;            sws_scale(sws_ctx, frame->data, frame->linesize, 0, frame->height,&#xA;                      rgb_frame->data, rgb_frame->linesize);&#xA;&#xA;            // SET "BUF" TO THE OUTPUT FILE PATH (SAVES TO "out_file_name_###.file_ext")&#xA;            snprintf(buf, sizeof(buf), "%s_%03d.%s", out_file_name, cxt->frame_number, file_ext);&#xA;            // SAVE THE FRAME&#xA;            save(rgb_frame->data[0], rgb_frame->linesize[0], rgb_frame->width, rgb_frame->height, buf);&#xA;        }&#xA;    }&#xA;}&#xA;&#xA;int main() {&#xA;    // SIMULATE COMMAND LINE ARGUMENTS&#xA;    char argv0[] = "test";&#xA;    char argv1[] = "/User/Desktop/frames/test_video.mov";&#xA;    char *argv[] = {argv0, argv1, nullptr};&#xA;&#xA;    // INIT VARS AND FFMPEG OBJECTS&#xA;    int ret;&#xA;    AVPacket *packet;&#xA;    AVFrame *frame;&#xA;&#xA;    // ALLOCATE FRAME AND PACKET&#xA;    frame = av_frame_alloc();&#xA;    packet = av_packet_alloc();&#xA;    if (!frame || !packet) {&#xA;        fprintf(stderr, "Could not allocate frame or packet\n");&#xA;        exit(1);&#xA;    }&#xA;&#xA;    // IF FILE DOESN&#x27;T OPEN, GO TO THE END&#xA;    if((ret = open_input_file(argv[1])) &lt; 0) {&#xA;        goto end;&#xA;    }&#xA;    &#xA;    // READ ALL THE PACKETS - simple&#xA;    while(av_read_frame(fmt_ctx, packet) >= 0) {&#xA;        // IF PACKET INDEX MATCHES VIDEO INDEX...&#xA;        if (packet->stream_index == video_stream_index) {&#xA;            // SEND PACKET TO THE DECODER and SAVE&#xA;            std::string name = "/User/Desktop/frames/img";&#xA;            std::string ext = "bmp";&#xA;            decode(dec_ctx, frame, packet, name.c_str(), ext.c_str(), 5);&#xA;        }&#xA;&#xA;        // UNREFERENCE THE PACKET&#xA;        av_packet_unref(packet);&#xA;    }&#xA;&#xA;    // END MARKER&#xA;    end:&#xA;    avcodec_free_context(&amp;dec_ctx);&#xA;    avformat_close_input(&amp;fmt_ctx);&#xA;    av_frame_free(&amp;frame);&#xA;    av_packet_free(&amp;packet);&#xA;&#xA;    // FINAL ERROR CATCH&#xA;    if (ret &lt; 0 &amp;&amp; ret != AVERROR_EOF) {&#xA;        fprintf(stderr, "Error occurred: %s\n", av_err2str(ret));&#xA;        exit(1);&#xA;    }&#xA;&#xA;    exit(0);&#xA;}&#xA;</iostream></cstdlib></cstdio>

    &#xA;

    I am not sure how to go about producing images that are much smaller in size like the ones produced on the command line. I have a feeling that this is possible somehow during the conversion to RGB or the saving of the file but I can't seem to figure out how.

    &#xA;

    Also, is there any way that I could go about this much more efficiently ? On the command line, this finishes very quickly (no more than a second or two for a 9 sec. movie at 60 fps).

    &#xA;