Recherche avancée

Médias (91)

Autres articles (105)

  • Configurer la prise en compte des langues

    15 novembre 2010, par

    Accéder à la configuration et ajouter des langues prises en compte
    Afin de configurer la prise en compte de nouvelles langues, il est nécessaire de se rendre dans la partie "Administrer" du site.
    De là, dans le menu de navigation, vous pouvez accéder à une partie "Gestion des langues" permettant d’activer la prise en compte de nouvelles langues.
    Chaque nouvelle langue ajoutée reste désactivable tant qu’aucun objet n’est créé dans cette langue. Dans ce cas, elle devient grisée dans la configuration et (...)

  • Taille des images et des logos définissables

    9 février 2011, par

    Dans beaucoup d’endroits du site, logos et images sont redimensionnées pour correspondre aux emplacements définis par les thèmes. L’ensemble des ces tailles pouvant changer d’un thème à un autre peuvent être définies directement dans le thème et éviter ainsi à l’utilisateur de devoir les configurer manuellement après avoir changé l’apparence de son site.
    Ces tailles d’images sont également disponibles dans la configuration spécifique de MediaSPIP Core. La taille maximale du logo du site en pixels, on permet (...)

  • Emballe médias : à quoi cela sert ?

    4 février 2011, par

    Ce plugin vise à gérer des sites de mise en ligne de documents de tous types.
    Il crée des "médias", à savoir : un "média" est un article au sens SPIP créé automatiquement lors du téléversement d’un document qu’il soit audio, vidéo, image ou textuel ; un seul document ne peut être lié à un article dit "média" ;

Sur d’autres sites (4587)

  • OpenCV VideoWriter using ffmpeg with "Could not open codec 'libx264'" Error

    19 avril, par user2262504

    I am new to OpenCV, and I want write Mat images into video using VideoWriter on Ubuntu 12.04. But when constructing VideoWriter, errors came out.

    



    It seems that OpenCV invoke ffmpeg API using default parameters and ffmpeg invoke x264 using its default parameters. Then these setting is broken for libx264. Thus the "Could not open codec 'libx264'" error.

    



    Anyone has ideas to solve this problem ?

    



    More specifically :

    



      

    1. anyone knows where and how OpenCV invoke ffmpeg API ?
    2. 


    3. how to change ffmpeg default settings using code, hopefull, can be easily embeded into OpenCV ?
    4. 


    5. will changes of default in ffmpeg be carried to libx264 ?
    6. 


    



    Errors :

    



    1. Uising CV_FOURCC(&#x27;H&#x27;, &#x27;2&#x27;, &#x27;6&#x27;, &#x27;4&#x27;)&#xA;[libx264 @ 0x255de40] broken ffmpeg default settings detected&#xA;[libx264 @ 0x255de40] use an encoding preset (e.g. -vpre medium)&#xA;[libx264 @ 0x255de40] preset usage: -vpre <speed> -vpre <profile>&#xA;[libx264 @ 0x255de40] speed presets are listed in x264 --help&#xA;[libx264 @ 0x255de40] profile is optional; x264 defaults to high&#xA;Could not open codec &#x27;libx264&#x27;: Unspecified error&#xA;&#xA;2. Using FOURCC = -1 to invoke user customized codec&#xA;OpenCV Error: Unsupported format or combination of formats (Gstreamer Opencv &#xA;backend doesn&#x27;t support this codec acutally.) in CvVideoWriter_GStreamer::open, &#xA;file /home/XXX/Downloads/opencv-2.4.8/modules/highgui/src/cap_gstreamer.cpp, &#xA;line 505 terminate called after throwing an instance of &#x27;cv::Exception&#x27;&#xA;what():  /home/XXX/Downloads/opencv-2.4.8/modules/highgui/src/cap_gstreamer.cpp:&#xA;505: error: (-210) Gstreamer Opencv backend doesn&#x27;t support this codec acutally.&#xA;in function CvVideoWriter_GStreamer::open&#xA;</profile></speed>

    &#xA;&#xA;

    Codes :

    &#xA;&#xA;

    int main(int argc, char *argv[])&#xA;{&#xA;    VideoWriter outputVideo;&#xA;    bool fourcc_on = true; //switch on / off different error&#xA;    if (fourcc_on)&#xA;        outputVideo.open("outVideo.avi", CV_FOURCC(&#x27;H&#x27;, &#x27;2&#x27;, &#x27;6&#x27;, &#x27;4&#x27;), 25, Size(100, 100), true);&#xA;    else&#xA;        outputVideo.open("outVideo.avi", -1, 25, Size(100, 100), true);&#xA;&#xA;    if (!outputVideo.isOpened())&#xA;    {&#xA;        cout  &lt;&lt; "Could not open the output video for write" &lt;&lt; endl;&#xA;        return -1;&#xA;    }&#xA;    return 0;&#xA;}&#xA;

    &#xA;&#xA;

    OpenCV Configuration :

    &#xA;&#xA;

    -- Detected version of GNU GCC: 46 (406)&#xA;-- Found OpenEXR: /usr/lib/libIlmImf.so&#xA;-- Looking for linux/videodev.h&#xA;-- Looking for linux/videodev.h - not found&#xA;-- Looking for linux/videodev2.h&#xA;-- Looking for linux/videodev2.h - found&#xA;-- Looking for sys/videoio.h&#xA;-- Looking for sys/videoio.h - not found&#xA;-- Looking for libavformat/avformat.h&#xA;-- Looking for libavformat/avformat.h - found&#xA;-- Looking for ffmpeg/avformat.h&#xA;-- Looking for ffmpeg/avformat.h - not found&#xA;-- Could NOT find JNI (missing:  JAVA_INCLUDE_PATH JAVA_INCLUDE_PATH2 JAVA_AWT_INCLUDE_PATH) &#xA;-- &#xA;-- General configuration for OpenCV 2.4.8 =====================================&#xA;--   Version control:               unknown&#xA;-- &#xA;--   Platform:&#xA;--     Host:                        Linux 3.8.0-38-generic x86_64&#xA;--     CMake:                       2.8.7&#xA;--     CMake generator:             Unix Makefiles&#xA;--     CMake build tool:            /usr/bin/make&#xA;--     Configuration:               RELEASE&#xA;-- &#xA;--   C/C&#x2B;&#x2B;:&#xA;--     Built as dynamic libs?:      YES&#xA;--     C&#x2B;&#x2B; Compiler:                /usr/bin/c&#x2B;&#x2B;  (ver 4.6)&#xA;--     C&#x2B;&#x2B; flags (Release):         -fsigned-char -W -Wall -Werror=return-type -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -msse -msse2 -msse3 -ffunction-sections -O3 -DNDEBUG  -DNDEBUG&#xA;--     C&#x2B;&#x2B; flags (Debug):           -fsigned-char -W -Wall -Werror=return-type -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -msse -msse2 -msse3 -ffunction-sections -g  -O0 -DDEBUG -D_DEBUG&#xA;--     C Compiler:                  /usr/bin/gcc&#xA;--     C flags (Release):           -fsigned-char -W -Wall -Werror=return-type -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -msse -msse2 -msse3 -ffunction-sections -O3 -DNDEBUG  -DNDEBUG&#xA;--     C flags (Debug):             -fsigned-char -W -Wall -Werror=return-type -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -msse -msse2 -msse3 -ffunction-sections -g  -O0 -DDEBUG -D_DEBUG&#xA;--     Linker flags (Release):      &#xA;--     Linker flags (Debug):        &#xA;--     Precompiled headers:         YES&#xA;-- &#xA;--   OpenCV modules:&#xA;--     To be built:                 core flann imgproc highgui features2d calib3d ml video legacy objdetect photo gpu ocl nonfree contrib python stitching superres ts videostab&#xA;--     Disabled:                    world&#xA;--     Disabled by dependency:      -&#xA;--     Unavailable:                 androidcamera dynamicuda java&#xA;-- &#xA;--   GUI: &#xA;--     QT:                          NO&#xA;--     GTK&#x2B; 2.x:                    YES (ver 2.24.10)&#xA;--     GThread :                    YES (ver 2.32.4)&#xA;--     GtkGlExt:                    NO&#xA;--     OpenGL support:              NO&#xA;-- &#xA;--   Media I/O: &#xA;--     ZLib:                        /usr/lib/x86_64-linux-gnu/libz.so (ver 1.2.3.4)&#xA;--     JPEG:                        /usr/lib/x86_64-linux-gnu/libjpeg.so (ver )&#xA;--     PNG:                         /usr/lib/x86_64-linux-gnu/libpng.so (ver 1.2.46)&#xA;--     TIFF:                        /usr/lib/x86_64-linux-gnu/libtiff.so (ver 42 - 3.9.5)&#xA;--     JPEG 2000:                   /usr/lib/x86_64-linux-gnu/libjasper.so (ver 1.900.1)&#xA;--     OpenEXR:                     /usr/lib/libImath.so /usr/lib/libIlmImf.so /usr/lib/libIex.so /usr/lib/libHalf.so /usr/lib/libIlmThread.so (ver 1.6.1)&#xA;-- &#xA;--   Video I/O:&#xA;--     DC1394 1.x:                  NO&#xA;--     DC1394 2.x:                  YES (ver 2.2.0)&#xA;--     FFMPEG:                      YES&#xA;--       codec:                     YES (ver 55.58.105)&#xA;--       format:                    YES (ver 55.37.101)&#xA;--       util:                      YES (ver 52.78.100)&#xA;--       swscale:                   YES (ver 2.6.100)&#xA;--       gentoo-style:              YES&#xA;--     GStreamer:                   &#xA;--       base:                      YES (ver 0.10.36)&#xA;--       app:                       YES (ver 0.10.36)&#xA;--       video:                     YES (ver 0.10.36)&#xA;--     OpenNI:                      NO&#xA;--     OpenNI PrimeSensor Modules:  NO&#xA;--     PvAPI:                       NO&#xA;--     GigEVisionSDK:               NO&#xA;--     UniCap:                      NO&#xA;--     UniCap ucil:                 NO&#xA;--     V4L/V4L2:                    Using libv4l (ver 1.0.1)&#xA;--     XIMEA:                       NO&#xA;--     Xine:                        NO&#xA;-- &#xA;--   Other third-party libraries:&#xA;--     Use IPP:                     NO&#xA;--     Use Eigen:                   NO&#xA;--     Use TBB:                     NO&#xA;--     Use OpenMP:                  NO&#xA;--     Use GCD                      NO&#xA;--     Use Concurrency              NO&#xA;--     Use C=:                      NO&#xA;--     Use Cuda:                    NO&#xA;--     Use OpenCL:                  YES&#xA;-- &#xA;--   OpenCL:&#xA;--     Version:                     dynamic&#xA;--     Include path:                /home/shixudongleo/Downloads/opencv-2.4.8/3rdparty/include/opencl/1.2&#xA;--     Use AMD FFT:                 NO&#xA;--     Use AMD BLAS:                NO&#xA;-- &#xA;--   Python:&#xA;--     Interpreter:                 /usr/bin/python (ver 2.7.3)&#xA;--     Libraries:                   /usr/lib/libpython2.7.so&#xA;--     numpy:                       /usr/lib/python2.7/dist-packages/numpy/core/include (ver 1.6.1)&#xA;--     packages path:               lib/python2.7/dist-packages&#xA;-- &#xA;--   Java:&#xA;--     ant:                         NO&#xA;--     JNI:                         NO&#xA;--     Java tests:                  NO&#xA;-- &#xA;--   Documentation:&#xA;--     Build Documentation:         NO&#xA;--     Sphinx:                      NO&#xA;--     PdfLaTeX compiler:           /usr/bin/pdflatex&#xA;-- &#xA;--   Tests and samples:&#xA;--     Tests:                       YES&#xA;--     Performance tests:           YES&#xA;--     C/C&#x2B;&#x2B; Examples:              NO&#xA;-- &#xA;--   Install path:                  /usr/local&#xA;-- &#xA;--   cvconfig.h is in:              /home/shixudongleo/Downloads/opencv-2.4.8/build&#xA;-- -----------------------------------------------------------------&#xA;-- &#xA;-- Configuring done&#xA;-- Generating done&#xA;-- Build files have been written to: /home/XXX/Downloads/opencv-2.4.8/build&#xA;

    &#xA;&#xA;

    FFMPEG

    &#xA;&#xA;

    ffmpeg is enable to support OpenCV and libx264 is enabled when compiling ffmpeg.&#xA;By using ffmpeg command line, libx264 is running normally.

    &#xA;&#xA;

    $ ffmpeg -i test.avi -vcodec libx264 test.mp4&#xA;ffmpeg -i test.avi -vcodec libx264 test.mp4 > ~/Downloads/ffmpeg_log.txt&#xA;ffmpeg version 2.2.git Copyright (c) 2000-2014 the FFmpeg developers&#xA;  built on Apr 24 2014 16:39:51 with gcc 4.6 (Ubuntu/Linaro 4.6.3-1ubuntu5)&#xA;  configuration: --enable-gpl --enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-nonfree --enable-postproc --enable-version3 --enable-x11grab --enable-shared --enable-pic&#xA;  libavutil      52. 78.100 / 52. 78.100&#xA;  libavcodec     55. 58.105 / 55. 58.105&#xA;  libavformat    55. 37.101 / 55. 37.101&#xA;  libavdevice    55. 13.100 / 55. 13.100&#xA;  libavfilter     4.  4.100 /  4.  4.100&#xA;  libswscale      2.  6.100 /  2.  6.100&#xA;  libswresample   0. 18.100 /  0. 18.100&#xA;  libpostproc    52.  3.100 / 52.  3.100&#xA;Input #0, avi, from &#x27;test.avi&#x27;:&#xA;  Duration: 00:00:03.73, start: 0.000000, bitrate: 1757 kb/s&#xA;    Stream #0:0: Video: msvideo1 (CRAM / 0x4D415243), rgb555le, 320x240, 1781 kb/s, 15 tbr, 15 tbn, 15 tbc&#xA;    Metadata:&#xA;      title           : julius.avi Video #1&#xA;File &#x27;test.mp4&#x27; already exists. Overwrite ? [y/N] y&#xA;No pixel format specified, yuv444p for H.264 encoding chosen.&#xA;Use -pix_fmt yuv420p for compatibility with outdated media players.&#xA;[libx264 @ 0x25d08e0] using cpu capabilities: none!&#xA;[libx264 @ 0x25d08e0] profile High 4:4:4 Predictive, level 1.2, 4:4:4 8-bit&#xA;[libx264 @ 0x25d08e0] 264 - core 142 - 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 deadzone=21,11 fast_pskip=1 chroma_qp_offset=4 threads=12 lookahead_threads=1 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=15 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&#xA;Output #0, mp4, to &#x27;test.mp4&#x27;:&#xA;  Metadata:&#xA;    encoder         : Lavf55.37.101&#xA;    Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv444p, 320x240, q=-1--1, 15360 tbn, 15 tbc&#xA;    Metadata:&#xA;      title           : julius.avi Video #1&#xA;Stream mapping:&#xA;  Stream #0:0 -> #0:0 (msvideo1 -> libx264)&#xA;Press [q] to stop, [?] for help&#xA;frame=   56 fps=0.0 q=-1.0 Lsize=     321kB time=00:00:03.60 bitrate= 731.0kbits/s    &#xA;video:320kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.409949%&#xA;[libx264 @ 0x25d08e0] frame I:3     Avg QP:15.36  size:  7975&#xA;[libx264 @ 0x25d08e0] frame P:38    Avg QP:26.05  size:  6230&#xA;[libx264 @ 0x25d08e0] frame B:15    Avg QP:28.25  size:  4418&#xA;[libx264 @ 0x25d08e0] consecutive B-frames: 46.4% 53.6%  0.0%  0.0%&#xA;[libx264 @ 0x25d08e0] mb I  I16..4:  1.4% 72.8% 25.8%&#xA;[libx264 @ 0x25d08e0] mb P  I16..4:  1.6%  5.7% 15.1%  P16..4:  7.6%  6.3%  7.4%  0.0%  0.0%    skip:56.3%&#xA;[libx264 @ 0x25d08e0] mb B  I16..4:  0.2%  1.0%  2.0%  B16..8: 13.3%  7.8%  8.7%  direct: 8.3%  skip:58.8%  L0:34.9% L1:36.6% BI:28.5%&#xA;[libx264 @ 0x25d08e0] 8x8 transform intra:37.7% inter:2.3%&#xA;[libx264 @ 0x25d08e0] coded y,u,v intra: 52.1% 42.1% 30.1% inter: 19.6% 9.2% 5.2%&#xA;[libx264 @ 0x25d08e0] i16 v,h,dc,p: 56% 17% 24%  2%&#xA;[libx264 @ 0x25d08e0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 10% 16% 68%  1%  1%  1%  1%  1%  1%&#xA;[libx264 @ 0x25d08e0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 19% 18% 28%  5%  6%  5%  7%  5%  6%&#xA;[libx264 @ 0x25d08e0] Weighted P-Frames: Y:31.6% UV:21.1%&#xA;[libx264 @ 0x25d08e0] ref P L0: 70.5%  9.0% 12.1%  6.5%  2.0%&#xA;[libx264 @ 0x25d08e0] ref B L0: 91.3%  8.7%&#xA;[libx264 @ 0x25d08e0] kb/s:700.56&#xA;

    &#xA;

  • lavf/mp3dec : avoid printing useless message in default log level

    8 mars 2016, par Moritz Barsnick
    lavf/mp3dec : avoid printing useless message in default log level
    

    "Skipping 0 bytes of junk" is useless to the user, and essentially
    indicates a NOP. At 0 bytes, this message is now pushed back to
    the verbose log level.

    Signed-off-by : Moritz Barsnick <barsnick@gmx.net>

    • [DH] libavformat/mp3dec.c
  • "moov atom not found" when using av_interleaved_write_frame but not avio_write

    9 octobre 2017, par icStatic

    I am attempting to put together a class that can take arbitrary frames and construct a video from it using the ffmpeg 3.3.3 API. I’ve been struggling to find a good example for this as the examples still seem to be using deprecated functions, so I’ve attempted to patch this using the documentation in the headers and by referring to a few github repos that seem to be using the new version.

    If I use av_interleaved_write_frame to write the encoded packets to the output then ffprobe outputs the following :

    [mov,mp4,m4a,3gp,3g2,mj2 @ 0000000002760120] moov atom not found0
    X:\Diagnostics.mp4: Invalid data found when processing input

    ffplay is unable to play the file generated using this method.

    If I instead swap it out for a call to avio_write, ffprobe instead outputs :

    Input #0, h264, from 'X:\Diagnostics.mp4':
     Duration: N/A, bitrate: N/A
       Stream #0:0: Video: h264 (Main), yuv420p(progressive), 672x380 [SAR 1:1 DAR 168:95], 25 fps, 25 tbr, 1200k tbn, 50 tbc

    ffplay can mostly play this file until it gets towards the end, when it outputs :

    Input #0, h264, from 'X:\Diagnostics.mp4':    0KB sq=    0B f=0/0
     Duration: N/A, bitrate: N/A
       Stream #0:0: Video: h264 (Main), yuv420p(progressive), 672x380 [SAR 1:1 DAR 168:95], 25 fps, 25 tbr, 1200k tbn, 50 tbc
    [h264 @ 000000000254ef80] error while decoding MB 31 22, bytestream -65
    [h264 @ 000000000254ef80] concealing 102 DC, 102 AC, 102 MV errors in I frame
       nan M-V:    nan fd=   1 aq=    0KB vq=    0KB sq=    0B f=0/0

    VLC cannot play files from either method. The second method’s file displays a single black frame then hides the video output. The first does not display anything. Neither of them give a video duration.

    Does anyone have any ideas what’s happening here ? I assume my solution is close to working as I’m getting a good chunk of valid frames coming through.

    Code :

    void main()
    {
       OutputStream Stream( "Output.mp4", 672, 380, 25, true );
       Stream.Initialize();

       int i = 100;
       while( i-- )
       {
           //... Generate a frame

           Stream.WriteFrame( Frame );
       }
       Stream.CloseFile();
    }

    OutputStream::OutputStream( const std::string&amp; Path, unsigned int Width, unsigned int Height, int Framerate, bool IsBGR )
    : Stream()
    , FrameIndex( 0 )
    {
       auto&amp; ID = *m_InternalData;

       ID.Path = Path;

       ID.Width = Width;
       ID.Height= Height;
       ID.Framerate.num = Framerate;
       ID.Framerate.den = 1;

       ID.PixelFormat = IsBGR ? AV_PIX_FMT_BGR24 : AV_PIX_FMT_RGB24;
       ID.CodecID = AV_CODEC_ID_H264;
       ID.CodecTag = 0;

       ID.AspectRatio.num = 1;
       ID.AspectRatio.den = 1;
    }

    CameraStreamError OutputStream::Initialize()
    {
       av_log_set_callback( &amp;InputStream::LogCallback );
       av_register_all();
       avformat_network_init();

       auto&amp; ID = *m_InternalData;

       av_init_packet( &amp;ID.Packet );

       int Result = avformat_alloc_output_context2( &amp;ID.FormatContext, nullptr, nullptr, ID.Path.c_str() );
       if( Result &lt; 0 || !ID.FormatContext )
       {
           STREAM_ERROR( UnknownError );
       }

       AVCodec* Encoder = avcodec_find_encoder( ID.CodecID );

       if( !Encoder )
       {
           STREAM_ERROR( NoH264Support );
       }

       AVStream* OutStream = avformat_new_stream( ID.FormatContext, Encoder );
       if( !OutStream )
       {
           STREAM_ERROR( UnknownError );
       }

       ID.CodecContext = avcodec_alloc_context3( Encoder );
       if( !ID.CodecContext )
       {
           STREAM_ERROR( NoH264Support );
       }

       ID.CodecContext->time_base = av_inv_q(ID.Framerate);

       {
           AVCodecParameters* CodecParams = OutStream->codecpar;

           CodecParams->width = ID.Width;
           CodecParams->height = ID.Height;
           CodecParams->format = AV_PIX_FMT_YUV420P;
           CodecParams->codec_id = ID.CodecID;
           CodecParams->codec_type = AVMEDIA_TYPE_VIDEO;
           CodecParams->profile = FF_PROFILE_H264_MAIN;
           CodecParams->level = 40;

           Result = avcodec_parameters_to_context( ID.CodecContext, CodecParams );
           if( Result &lt; 0 )
           {
               STREAM_ERROR( EncoderCreationError );
           }
       }

       if( ID.IsVideo )
       {
           ID.CodecContext->width = ID.Width;
           ID.CodecContext->height = ID.Height;
           ID.CodecContext->sample_aspect_ratio = ID.AspectRatio;
           ID.CodecContext->time_base = av_inv_q(ID.Framerate);

           if( Encoder->pix_fmts )
           {
               ID.CodecContext->pix_fmt = Encoder->pix_fmts[0];
           }
           else
           {
               ID.CodecContext->pix_fmt = ID.PixelFormat;
           }
       }
       //Snip

       Result = avcodec_open2( ID.CodecContext, Encoder, nullptr );
       if( Result &lt; 0 )
       {
           STREAM_ERROR( EncoderCreationError );
       }

       Result = avcodec_parameters_from_context( OutStream->codecpar, ID.CodecContext );
       if( Result &lt; 0 )
       {
           STREAM_ERROR( EncoderCreationError );
       }

       if( ID.FormatContext->oformat->flags &amp; AVFMT_GLOBALHEADER )
       {
           ID.CodecContext->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;
       }

       OutStream->time_base = ID.CodecContext->time_base;
       OutStream->avg_frame_rate= av_inv_q(OutStream->time_base);

       if( !( ID.FormatContext->oformat->flags &amp; AVFMT_NOFILE ) )
       {
           Result = avio_open( &amp;ID.FormatContext->pb, ID.Path.c_str(), AVIO_FLAG_WRITE );
           if( Result &lt; 0 )
           {
               STREAM_ERROR( FileNotWriteable );
           }
       }

       Result = avformat_write_header( ID.FormatContext, nullptr );
       if( Result &lt; 0 )
       {
           STREAM_ERROR( WriteFailed );
       }

       ID.Output = std::make_unique( ID.CodecContext->width, ID.CodecContext->height, ID.CodecContext->pix_fmt );

       ID.ConversionContext = sws_getCachedContext(
           ID.ConversionContext,
           ID.Width,
           ID.Height,
           ID.PixelFormat,
           ID.CodecContext->width,
           ID.CodecContext->height,
           ID.CodecContext->pix_fmt,
           SWS_BICUBIC,
           NULL,
           NULL,
           NULL );

       return CameraStreamError::Success;
    }

    CameraStreamError OutputStream::WriteFrame( FFMPEG::Frame* Frame )
    {
       auto&amp; ID = *m_InternalData;

       ID.Output->Prepare();

       int OutputSliceSize = sws_scale( m_InternalData->ConversionContext, Frame->GetFrame()->data, Frame->GetFrame()->linesize, 0, Frame->GetHeight(), ID.Output->GetFrame()->data, ID.Output->GetFrame()->linesize );

       ID.Output->GetFrame()->pts = ID.CodecContext->frame_number;

       int Result = avcodec_send_frame( GetData().CodecContext, ID.Output->GetFrame() );
       if( Result == AVERROR(EAGAIN) )
       {
           CameraStreamError ResultErr = SendAll();
           if( ResultErr != CameraStreamError::Success )
           {
               return ResultErr;
           }
           Result = avcodec_send_frame( GetData().CodecContext, ID.Output->GetFrame() );
       }

       if( Result == 0 )
       {
           CameraStreamError ResultErr = SendAll();
           if( ResultErr != CameraStreamError::Success )
           {
               return ResultErr;
           }
       }

       FrameIndex++;

       return CameraStreamError::Success;
    }

    CameraStreamError OutputStream::SendAll( void )
    {
       auto&amp; ID = *m_InternalData;

       int Result;
       do
       {
           AVPacket TempPacket = {};
           av_init_packet( &amp;TempPacket );

           Result = avcodec_receive_packet( GetData().CodecContext, &amp;TempPacket );
           if( Result == 0 )
           {
               av_packet_rescale_ts( &amp;TempPacket, ID.CodecContext->time_base, ID.FormatContext->streams[0]->time_base );

               TempPacket.stream_index = ID.FormatContext->streams[0]->index;

               //avio_write( ID.FormatContext->pb, TempPacket.data, TempPacket.size );
               Result = av_interleaved_write_frame( ID.FormatContext, &amp;TempPacket );
               if( Result &lt; 0 )
               {
                   STREAM_ERROR( WriteFailed );
               }

               av_packet_unref( &amp;TempPacket );
           }
           else if( Result != AVERROR(EAGAIN) )
           {
               continue;
           }
           else if( Result != AVERROR_EOF )
           {
               break;
           }
           else if( Result &lt; 0 )
           {
               STREAM_ERROR( WriteFailed );
           }
       } while ( Result == 0);

       return CameraStreamError::Success;
    }

    CameraStreamError OutputStream::CloseFile()
    {
       auto&amp; ID = *m_InternalData;

       while( true )
       {
           //Flush
           int Result = avcodec_send_frame( ID.CodecContext, nullptr );
           if( Result == 0 )
           {
               CameraStreamError StrError = SendAll();
               if( StrError != CameraStreamError::Success )
               {
                   return StrError;
               }
           }
           else if( Result == AVERROR_EOF )
           {
               break;
           }
           else
           {
               STREAM_ERROR( WriteFailed );
           }
       }

       int Result = av_write_trailer( ID.FormatContext );
       if( Result &lt; 0 )
       {
           STREAM_ERROR( WriteFailed );
       }

       if( !(ID.FormatContext->oformat->flags&amp; AVFMT_NOFILE) )
       {
           Result = avio_close( ID.FormatContext->pb );
           if( Result &lt; 0 )
           {
               STREAM_ERROR( WriteFailed );
           }
       }

       return CameraStreamError::Success;
    }

    Note I’ve simplified a few things and inlined a few bits that were elsewhere. I’ve also removed all the shutdown code as anything that happens after the file is closed is irrelevant.

    Full repo here : https://github.com/IanNorris/Witness If you clone this the issue is with the ’Diagnostics’ output, the Output file is fine. There are two hardcoded paths to X :.