Recherche avancée

Médias (91)

Autres articles (72)

  • Qu’est ce qu’un éditorial

    21 juin 2013, par

    Ecrivez votre de point de vue dans un article. Celui-ci sera rangé dans une rubrique prévue à cet effet.
    Un éditorial est un article de type texte uniquement. Il a pour objectif de ranger les points de vue dans une rubrique dédiée. Un seul éditorial est placé à la une en page d’accueil. Pour consulter les précédents, consultez la rubrique dédiée.
    Vous pouvez personnaliser le formulaire de création d’un éditorial.
    Formulaire de création d’un éditorial Dans le cas d’un document de type éditorial, les (...)

  • Personnaliser en ajoutant son logo, sa bannière ou son image de fond

    5 septembre 2013, par

    Certains thèmes prennent en compte trois éléments de personnalisation : l’ajout d’un logo ; l’ajout d’une bannière l’ajout d’une image de fond ;

  • Gestion des droits de création et d’édition des objets

    8 février 2011, par

    Par défaut, beaucoup de fonctionnalités sont limitées aux administrateurs mais restent configurables indépendamment pour modifier leur statut minimal d’utilisation notamment : la rédaction de contenus sur le site modifiables dans la gestion des templates de formulaires ; l’ajout de notes aux articles ; l’ajout de légendes et d’annotations sur les images ;

Sur d’autres sites (15193)

  • "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& Path, unsigned int Width, unsigned int Height, int Framerate, bool IsBGR )
    : Stream()
    , FrameIndex( 0 )
    {
       auto& 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( &InputStream::LogCallback );
       av_register_all();
       avformat_network_init();

       auto& ID = *m_InternalData;

       av_init_packet( &ID.Packet );

       int Result = avformat_alloc_output_context2( &ID.FormatContext, nullptr, nullptr, ID.Path.c_str() );
       if( Result < 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 < 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 < 0 )
       {
           STREAM_ERROR( EncoderCreationError );
       }

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

       if( ID.FormatContext->oformat->flags & 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 & AVFMT_NOFILE ) )
       {
           Result = avio_open( &ID.FormatContext->pb, ID.Path.c_str(), AVIO_FLAG_WRITE );
           if( Result < 0 )
           {
               STREAM_ERROR( FileNotWriteable );
           }
       }

       Result = avformat_write_header( ID.FormatContext, nullptr );
       if( Result < 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& 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& ID = *m_InternalData;

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

           Result = avcodec_receive_packet( GetData().CodecContext, &TempPacket );
           if( Result == 0 )
           {
               av_packet_rescale_ts( &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, &TempPacket );
               if( Result < 0 )
               {
                   STREAM_ERROR( WriteFailed );
               }

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

       return CameraStreamError::Success;
    }

    CameraStreamError OutputStream::CloseFile()
    {
       auto& 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 < 0 )
       {
           STREAM_ERROR( WriteFailed );
       }

       if( !(ID.FormatContext->oformat->flags& AVFMT_NOFILE) )
       {
           Result = avio_close( ID.FormatContext->pb );
           if( Result < 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 :.

  • avformat/dashenc : Set VP9 codec string with profile, level and bitdepth

    23 avril 2018, par Karthick Jeyapal
    avformat/dashenc : Set VP9 codec string with profile, level and bitdepth
    

    Otherwise some versions of chrome browser returns "codec not supported" error

    • [DH] libavformat/dashenc.c
  • ffmpeg says : "option framerate not found"

    29 novembre 2018, par Jason

    Good afternoon.

    I’ve been trying to use ffmpeg to split a .mpeg into a sequence of .jpeg images. Please note that this is the inverse problem of the one specified here, but the problem I’m facing is not the same as the problem the author of that thread is facing.

    Specifically, I have tried all the following mpeg codecs available in my ffmpeg installation :

    DEV D  ffv1            FFmpeg video codec #1
    DEVSD  ffvhuff         Huffyuv FFmpeg variant
    DEVSDT mpeg1video      MPEG-1 video
    D V DT mpeg1video_vdpau MPEG-1 video (VDPAU acceleration)
    D V D  mpeg2_crystalhd MPEG-2 Video (CrystalHD acceleration)
    DEVSDT mpeg2video      MPEG-2 video
    DEVSDT mpeg4           MPEG-4 part 2
    D V D  mpeg4_crystalhd MPEG-4 Part 2 (CrystalHD acceleration)
    D V DT mpeg4_vdpau     MPEG-4 part 2 (VDPAU)
    D VSDT mpegvideo       MPEG-1 video
    D V DT mpegvideo_vdpau MPEG-1/2 video (VDPAU acceleration)
    D VSDT mpegvideo_xvmc  MPEG-1/2 video XvMC (X-Video Motion Compensation)
    DEVSD  msmpeg4         MPEG-4 part 2 Microsoft variant version 3
    D V D  msmpeg4_crystalhd MPEG-4 Part 2 Microsoft variant version 3 (CrystalHD acceleration)
    D VSD  msmpeg4v1       MPEG-4 part 2 Microsoft variant version 1
    DEVSD  msmpeg4v2       MPEG-4 part 2 Microsoft variant version 2

    I’ve tried supplying ffmpeg with all different codecs to try to split an input .mpeg video file with 2548 frames into 2548 .jpegs, by using the -vcodec option :

    ffmpeg -r 2548 -i frames.mpeg frames_%06d.jpg -vcodec $codec

    where $codec is any codec among the ones listed above, e.g. ffv1, mpeg4, etc. However, all my efforts result in the following error :

    [NULL @ 0x1948f20] Value 4707126720094797824.000000 for parameter 'probesize' out of range
    [NULL @ 0x1948f20] Value 4707126720094797824.000000 for parameter 'analyzeduration' out of range
    [NULL @ 0x1948f20] Value 4697254411347427328.000000 for parameter 'indexmem' out of range
    [NULL @ 0x1948f20] Value 4703785510416416768.000000 for parameter 'rtbufsize' out of range
    [NULL @ 0x1948f20] Value -4616189618054758400.000000 for parameter 'fpsprobesize' out of range
    [NULL @ 0x1948f20] Value 4607182418800017408.000000 for parameter 'f_err_detect' out of     range
    [NULL @ 0x1948f20] Value 4607182418800017408.000000 for parameter 'err_detect' out of range
    Option framerate not found.  

    Which is weird, because I’ve actually specified the frame rate parameter through the -r switch. I googled a bit and it appears that this error was mentioned approximately a year and a half ago on the ffmpeg bug tracker but that information makes little sense to me because it’s relevant to the devs. Curiously, if I interchange the position of the parameters and put -r after -i or even after -vcodec, the error message changes to :

    [NULL @ 0x24abf20] Value 4707126720094797824.000000 for parameter 'probesize' out of range
    [NULL @ 0x24abf20] Value 4707126720094797824.000000 for parameter 'analyzeduration' out of range
    [NULL @ 0x24abf20] Value 4697254411347427328.000000 for parameter 'indexmem' out of range
    [NULL @ 0x24abf20] Value 4703785510416416768.000000 for parameter 'rtbufsize' out of range
    [NULL @ 0x24abf20] Value -4616189618054758400.000000 for parameter 'fpsprobesize' out of  range
    [NULL @ 0x24abf20] Value 4607182418800017408.000000 for parameter 'f_err_detect' out of  range
    [NULL @ 0x24abf20] Value 4607182418800017408.000000 for parameter 'err_detect' out of range
    [NULL @ 0x24b23c0] Value 4686111960511545344.000000 for parameter 'b' out of range
    [NULL @ 0x24b23c0] Value 4683532506232782848.000000 for parameter 'ab' out of range
    [NULL @ 0x24b23c0] Value 4705844345939427328.000000 for parameter 'bt' out of range
    [NULL @ 0x24b23c0] Value 4617315517961601024.000000 for parameter 'me_method' out of range
    [NULL @ 0x24b23c0] Value 4622945017495814144.000000 for parameter 'g' out of range
    [NULL @ 0x24b23c0] Value 4611686018427387904.000000 for parameter 'qmin' out of range
    [NULL @ 0x24b23c0] Value 4629418941960159232.000000 for parameter 'qmax' out of range
    [NULL @ 0x24b23c0] Value 4613937818241073152.000000 for parameter 'qdiff' out of range
    [NULL @ 0x24b23c0] Value -4616189618054758400.000000 for parameter 'wpredp' out of range
    [NULL @ 0x24b23c0] Value 4607182418800017408.000000 for parameter 'bug' out of range
    [NULL @ 0x24b23c0] Value 4607182418800017408.000000 for parameter 'er' out of range
    [NULL @ 0x24b23c0] Value 4607182418800017408.000000 for parameter 'err_detect' out of range
    [NULL @ 0x24b23c0] Value 4613937818241073152.000000 for parameter 'ec' out of range
    [NULL @ 0x24b23c0] Value 4620693217682128896.000000 for parameter 'ildctcmp' out of range
    [NULL @ 0x24b23c0] Value 4620693217682128896.000000 for parameter 'subq' out of range
    [NULL @ 0x24b23c0] Value 4696837138094751744.000000 for parameter 'ibias' out of range
    [NULL @ 0x24b23c0] Value 4696837138094751744.000000 for parameter 'pbias' out of range
    [NULL @ 0x24b23c0] Value 4642507528377204736.000000 for parameter 'lmin' out of range
    [NULL @ 0x24b23c0] Value 4660262442142531584.000000 for parameter 'lmax' out of range
    [NULL @ 0x24b23c0] Value 4696130710463840256.000000 for parameter 'flags2' out of range
    [NULL @ 0x24b23c0] Value 4607182418800017408.000000 for parameter 'threads' out of range
    [NULL @ 0x24b23c0] Value 4620693217682128896.000000 for parameter 'nssew' out of range
    [NULL @ 0x24b23c0] Value -4586705114244317184.000000 for parameter 'profile' out of range
    [NULL @ 0x24b23c0] Value -4586705114244317184.000000 for parameter 'level' out of range
    [NULL @ 0x24b23c0] Value 4623507967449235456.000000 for parameter 'skipcmp' out of range
    [NULL @ 0x24b23c0] Value 4642507528377204736.000000 for parameter 'mblmin' out of range
    [NULL @ 0x24b23c0] Value 4660262442142531584.000000 for parameter 'mblmax' out of range
    [NULL @ 0x24b23c0] Value 4643211215818981376.000000 for parameter 'mepc' out of range
    [NULL @ 0x24b23c0] Value 4607182418800017408.000000 for parameter 'bidir_refine' out of range
    [NULL @ 0x24b23c0] Value -4616189618054758400.000000 for parameter 'cqp' out of range
    [NULL @ 0x24b23c0] Value 4627730092099895296.000000 for parameter 'keyint_min' out of range
    [NULL @ 0x24b23c0] Value 4607182418800017408.000000 for parameter 'refs' out of range
    [NULL @ 0x24b23c0] Value -4616189618054758400.000000 for parameter 'directpred' out of range
    [NULL @ 0x24b23c0] Value 4618441417868443648.000000 for parameter 'sc_factor' out of range
    [NULL @ 0x24b23c0] Value 4643211215818981376.000000 for parameter 'mv0_threshold' out of range
    [NULL @ 0x24b23c0] Value 4630826316843712512.000000 for parameter 'b_sensitivity' out of range
    [NULL @ 0x24b23c0] Value -4616189618054758400.000000 for parameter 'compression_level' out of range
    [NULL @ 0x24b23c0] Value -4616189618054758400.000000 for parameter 'min_prediction_order' out of range
    [NULL @ 0x24b23c0] Value -4616189618054758400.000000 for parameter 'max_prediction_order' out of range
    [NULL @ 0x24b23c0] Value -4616189618054758400.000000 for parameter 'prediction_order_method' out of range
    [NULL @ 0x24b23c0] Value -4616189618054758400.000000 for parameter 'min_partition_order' out of range
    [NULL @ 0x24b23c0] Value -4616189618054758400.000000 for parameter 'max_partition_order' out of range
    [NULL @ 0x24b23c0] Value 4607182418800017408.000000 for parameter 'ticks_per_frame' out of range
    [NULL @ 0x24b23c0] Value 4611686018427387904.000000 for parameter 'color_primaries' out of range
    [NULL @ 0x24b23c0] Value 4611686018427387904.000000 for parameter 'color_trc' out of range
    [NULL @ 0x24b23c0] Value 4611686018427387904.000000 for parameter 'colorspace' out of range
    [NULL @ 0x24b23c0] Value -4616189618054758400.000000 for parameter 'aq_mode' out of range
    [NULL @ 0x24b23c0] Value -4616189618054758400.000000 for parameter 'rc_lookahead' out of range
    [NULL @ 0x24b23c0] Value -4616189618054758400.000000 for parameter 'lpc_type' out of range
    [NULL @ 0x24b23c0] Value -4616189618054758400.000000 for parameter 'lpc_passes' out of range
    [NULL @ 0x24b23c0] Value 4613937818241073152.000000 for parameter 'thread_type' out of range
    [NULL @ 0x24b23c0] Value -4616189618054758400.000000 for parameter 'request_sample_fmt' out of range
    frames.mpeg: could not find codec parameters

    I’m at a loss as to what to do with this problem, and am looking for some assistance.

    Kind regards,

    Jason