Recherche avancée

Médias (3)

Mot : - Tags -/image

Autres articles (84)

  • Mise à jour de la version 0.1 vers 0.2

    24 juin 2013, par

    Explications des différents changements notables lors du passage de la version 0.1 de MediaSPIP à la version 0.3. Quelles sont les nouveautés
    Au niveau des dépendances logicielles Utilisation des dernières versions de FFMpeg (>= v1.2.1) ; Installation des dépendances pour Smush ; Installation de MediaInfo et FFprobe pour la récupération des métadonnées ; On n’utilise plus ffmpeg2theora ; On n’installe plus flvtool2 au profit de flvtool++ ; On n’installe plus ffmpeg-php qui n’est plus maintenu au (...)

  • 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 ;

  • Ecrire une actualité

    21 juin 2013, par

    Présentez les changements dans votre MédiaSPIP ou les actualités de vos projets sur votre MédiaSPIP grâce à la rubrique actualités.
    Dans le thème par défaut spipeo de MédiaSPIP, les actualités sont affichées en bas de la page principale sous les éditoriaux.
    Vous pouvez personnaliser le formulaire de création d’une actualité.
    Formulaire de création d’une actualité Dans le cas d’un document de type actualité, les champs proposés par défaut sont : Date de publication ( personnaliser la date de publication ) (...)

Sur d’autres sites (9732)

  • FFmpeg wrong output duration after av_seek_frame

    18 septembre 2022, par Gogogo

    I try to transcode a video and also cut it, but in the output file, I get the wrong duration for the file(video duration is correct). It happens when I seek the video, as an example, if I try cut from 60000 to 63000 ms I will get :
Format : WebM
Format version : Version 2
File size : 17.6 KiB
Duration : 1 min 4 s
Overall bit rate : 2 232 b/s
Writing application : Lavf59.31.100
Writing library : Lavf59.31.100

    


    Video
ID : 1
Format : VP9
Codec ID : V_VP9
Duration : 2 s 961 ms
Width : 100 pixels
Height : 100 pixels
Display aspect ratio : 1.000
Frame rate mode : Constant
Frame rate : 24.000 FPS
Default : No
Forced : No

    


    Here is my code, what I am doing wrong ?

    


     namespace {&#xA;    &#xA;    constexpr auto maxDurationMs = 3000;&#xA;    constexpr auto maxFileSizeByte = 100000;&#xA;    &#xA;    struct StreamingParams {&#xA;      std::string output_extension;&#xA;      std::string muxer_opt_key;&#xA;      std::string muxer_opt_value;&#xA;      std::string video_codec;&#xA;      std::string codec_priv_key;&#xA;      std::string codec_priv_value;&#xA;    };&#xA;    &#xA;    struct StreamingContext {&#xA;      AVFormatContext* avfc = nullptr;&#xA;      AVCodec* video_avc = nullptr;&#xA;      AVStream* video_avs = nullptr;&#xA;      AVCodecContext* video_avcc = nullptr;&#xA;      int video_index = 0;&#xA;      std::string filename;&#xA;      ~StreamingContext() {}&#xA;    };&#xA;    &#xA;    struct StreamingContextDeleter {&#xA;      void operator()(StreamingContext* context) {&#xA;        if (context) {&#xA;          auto* avfc = &amp;context->avfc;&#xA;          auto* avcc = &amp;context->video_avcc;&#xA;          if (avfc)&#xA;            avformat_close_input(avfc);&#xA;          if (avcc)&#xA;            avcodec_free_context(avcc);&#xA;          if (context->avfc)&#xA;            avformat_free_context(context->avfc);&#xA;        }&#xA;      }&#xA;    };&#xA;    &#xA;    struct AVFrameDeleter {&#xA;      void operator()(AVFrame* frame) {&#xA;        if (frame)&#xA;          av_frame_free(&amp;frame);&#xA;      }&#xA;    };&#xA;    &#xA;    struct AVPacketDeleter {&#xA;      void operator()(AVPacket* packet) {&#xA;        if (packet)&#xA;          av_packet_free(&amp;packet);&#xA;      }&#xA;    };&#xA;    &#xA;    struct SwsContextDeleter {&#xA;      void operator()(SwsContext* context) {&#xA;        if (context)&#xA;          sws_freeContext(context);&#xA;      }&#xA;    };&#xA;    &#xA;    struct AVDictionaryDeleter {&#xA;      void operator()(AVDictionary* dictionary) {&#xA;        if (dictionary)&#xA;          av_dict_free(&amp;dictionary);&#xA;      }&#xA;    };&#xA;    &#xA;    int fill_stream_info(AVStream* avs, AVCodec** avc, AVCodecContext** avcc) {&#xA;      *avc = const_cast(avcodec_find_decoder(avs->codecpar->codec_id));&#xA;      if (!*avc) return -1;&#xA;&#xA;      *avcc = avcodec_alloc_context3(*avc);&#xA;      if (!*avcc)  return -1;&#xA;      if (avcodec_parameters_to_context(*avcc, avs->codecpar) &lt; 0) return -1;&#xA;      if (avcodec_open2(*avcc, *avc, nullptr) &lt; 0) return -1;&#xA;&#xA;      return 0;&#xA;    }&#xA;    &#xA;    int open_media(const char* in_filename, AVFormatContext** avfc) {&#xA;      *avfc = avformat_alloc_context();&#xA;      if (!*avfc) return -1;&#xA;      if (avformat_open_input(avfc, in_filename, nullptr, nullptr) != 0) return -1;&#xA;      if (avformat_find_stream_info(*avfc, nullptr) &lt; 0) return -1;&#xA;    &#xA;      return 0;&#xA;    }&#xA;    &#xA;    int prepare_decoder(std::shared_ptr<streamingcontext> sc) {&#xA;      for (int i = 0; i &lt; sc->avfc->nb_streams; i&#x2B;&#x2B;) {&#xA;        if (sc->avfc->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {&#xA;          sc->video_avs = sc->avfc->streams[i];&#xA;          sc->video_index = i;&#xA;    &#xA;          if (fill_stream_info(sc->video_avs, &amp;sc->video_avc, &amp;sc->video_avcc)) return -1;&#xA;        }&#xA;      }&#xA;    &#xA;      return 0;&#xA;    }&#xA;    &#xA;    int prepare_video_encoder(std::shared_ptr<streamingcontext> sc,&#xA;                              AVCodecContext* decoder_ctx,&#xA;                              AVRational input_framerate,&#xA;                              const StreamingParams&amp; sp) {&#xA;      sc->video_avs = avformat_new_stream(sc->avfc, nullptr);&#xA;    &#xA;      sc->video_avc = const_cast(&#xA;          avcodec_find_encoder_by_name(sp.video_codec.c_str()));&#xA;      if (!sc->video_avc) return -1;&#xA;    &#xA;      sc->video_avcc = avcodec_alloc_context3(sc->video_avc);&#xA;      if (!sc->video_avcc) return -1;&#xA;    &#xA;      av_opt_set(sc->video_avcc->priv_data, "preset", "fast", 0);&#xA;&#xA;      sc->video_avcc->height = 100;&#xA;      sc->video_avcc->width = 100;&#xA;      sc->video_avcc->sample_aspect_ratio = decoder_ctx->sample_aspect_ratio;&#xA;      if (sc->video_avc->pix_fmts)&#xA;        sc->video_avcc->pix_fmt = sc->video_avc->pix_fmts[0];&#xA;      else&#xA;        sc->video_avcc->pix_fmt = decoder_ctx->pix_fmt;&#xA;    &#xA;      constexpr int64_t maxBitrate = maxFileSizeByte / (maxDurationMs / 1000.0) - 1;&#xA;    &#xA;      sc->video_avcc->bit_rate = maxBitrate;&#xA;      sc->video_avcc->rc_buffer_size = decoder_ctx->rc_buffer_size;&#xA;      sc->video_avcc->rc_max_rate = maxBitrate;&#xA;      sc->video_avcc->rc_min_rate = maxBitrate;&#xA;      sc->video_avcc->time_base = av_inv_q(input_framerate);&#xA;      sc->video_avs->time_base = sc->video_avcc->time_base;&#xA;    &#xA;      if (avcodec_open2(sc->video_avcc, sc->video_avc, nullptr) &lt; 0) return -1;&#xA;      avcodec_parameters_from_context(sc->video_avs->codecpar, sc->video_avcc);&#xA;    &#xA;      return 0;&#xA;    }&#xA;    &#xA;    int encode_video(std::shared_ptr<streamingcontext> decoder,&#xA;                     std::shared_ptr<streamingcontext> encoder,&#xA;                     AVFrame* input_frame) {&#xA;      if (input_frame)&#xA;        input_frame->pict_type = AV_PICTURE_TYPE_NONE;&#xA;    &#xA;      AVPacket* output_packet = av_packet_alloc();&#xA;      if (!output_packet) return -1;&#xA;    &#xA;      int response = avcodec_send_frame(encoder->video_avcc, input_frame);&#xA;    &#xA;      while (response >= 0) {&#xA;        response = avcodec_receive_packet(encoder->video_avcc, output_packet);&#xA;        if (response == AVERROR(EAGAIN) || response == AVERROR_EOF) {&#xA;          break;&#xA;        } else if (response &lt; 0) return -1;&#xA;    &#xA;        output_packet->stream_index = decoder->video_index;&#xA;        output_packet->duration = encoder->video_avs->time_base.den /&#xA;                                  encoder->video_avs->time_base.num /&#xA;                                  decoder->video_avs->avg_frame_rate.num *&#xA;                                  decoder->video_avs->avg_frame_rate.den;&#xA;    &#xA;        av_packet_rescale_ts(output_packet, decoder->video_avs->time_base,&#xA;                             encoder->video_avs->time_base);&#xA;    &#xA;        response = av_interleaved_write_frame(encoder->avfc, output_packet);&#xA;        if (response != 0) return -1;&#xA;      }&#xA;      av_packet_unref(output_packet);&#xA;      av_packet_free(&amp;output_packet);&#xA;      return 0;&#xA;    }&#xA;    &#xA;    int transcode_video(std::shared_ptr<streamingcontext> decoder,&#xA;                        std::shared_ptr<streamingcontext> encoder,&#xA;                        AVPacket* input_packet,&#xA;                        AVFrame* input_frame) {&#xA;      int response = avcodec_send_packet(decoder->video_avcc, input_packet);&#xA;      if (response &lt; 0) return response;&#xA;&#xA;    &#xA;      while (response >= 0) {&#xA;        response = avcodec_receive_frame(decoder->video_avcc, input_frame);&#xA;        if (response == AVERROR(EAGAIN) || response == AVERROR_EOF) {&#xA;          break;&#xA;        } else if (response &lt; 0) return response;&#xA;    &#xA;        if (response >= 0) {&#xA;          if (encode_video(decoder, encoder, input_frame)) return -1;&#xA;        }&#xA;        av_frame_unref(input_frame);&#xA;      }&#xA;    &#xA;      return 0;&#xA;    }&#xA;    &#xA;    }  // namespace&#xA;    &#xA;    &#xA;    int VideoToGifConverter::convert(VideoProp input, QString output) {&#xA;      StreamingParams sp;&#xA;      sp.output_extension = ".webm";&#xA;      sp.video_codec = "libvpx-vp9";&#xA;    &#xA;      auto inputStd = input.path.toStdString();&#xA;      auto outputStd =&#xA;          (output &#x2B; &#x27;/&#x27; &#x2B; QUuid::createUuid().toString(QUuid::StringFormat::Id128))&#xA;              .toStdString() &#x2B;&#xA;          sp.output_extension;&#xA;    &#xA;      auto decoder = std::shared_ptr<streamingcontext>(new StreamingContext,&#xA;                                                       StreamingContextDeleter{});&#xA;      auto encoder = std::shared_ptr<streamingcontext>(new StreamingContext,&#xA;                                                       StreamingContextDeleter{});&#xA;    &#xA;      encoder->filename = std::move(outputStd);&#xA;      decoder->filename = std::move(inputStd);&#xA;    &#xA;      if (open_media(decoder->filename.c_str(), &amp;decoder->avfc))&#xA;        return -1;&#xA;      if (prepare_decoder(decoder))&#xA;        return -1;&#xA;    &#xA;      avformat_alloc_output_context2(&amp;encoder->avfc, nullptr, nullptr,&#xA;                                     encoder->filename.c_str());&#xA;      if (!encoder->avfc) return -1;&#xA;    &#xA;      AVRational input_framerate =&#xA;          av_guess_frame_rate(decoder->avfc, decoder->video_avs, nullptr);&#xA;      prepare_video_encoder(encoder, decoder->video_avcc, input_framerate, sp);&#xA;    &#xA;      if (encoder->avfc->oformat->flags &amp; AVFMT_GLOBALHEADER)&#xA;        encoder->avfc->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;&#xA;&#xA;      if (!(encoder->avfc->oformat->flags &amp; AVFMT_NOFILE)) {&#xA;        if (avio_open(&amp;encoder->avfc->pb, encoder->filename.c_str(),&#xA;                      AVIO_FLAG_WRITE) &lt; 0) return -1;&#xA;      }&#xA;    &#xA;      AVDictionary* muxer_opts = nullptr;&#xA;    &#xA;      if (!sp.muxer_opt_key.empty() &amp;&amp; !sp.muxer_opt_value.empty()) {&#xA;        av_dict_set(&amp;muxer_opts, sp.muxer_opt_key.c_str(),&#xA;                    sp.muxer_opt_value.c_str(), 0);&#xA;      }&#xA;    &#xA;      if (avformat_write_header(encoder->avfc, &amp;muxer_opts) &lt; 0) return -1;&#xA;    &#xA;      auto inputFrame = std::unique_ptr(av_frame_alloc());&#xA;      if (!inputFrame) return -1;&#xA;    &#xA;      auto inputPacket =&#xA;          std::unique_ptr(av_packet_alloc());&#xA;      if (!inputPacket) return -1;&#xA;    &#xA;      auto** streams = decoder->avfc->streams;&#xA;    &#xA;      const auto fps = static_cast<double>(&#xA;                           streams[inputPacket->stream_index]->avg_frame_rate.num) /&#xA;                       streams[inputPacket->stream_index]->avg_frame_rate.den;&#xA;      const size_t beginFrame = input.beginPosMs * fps / 1000;&#xA;      const size_t endFrame = input.endPosMs * fps / 1000;&#xA;      const auto totalFrames = endFrame - beginFrame;&#xA;    &#xA;      size_t count = 0;&#xA;    &#xA;      int64_t startTime =&#xA;          av_rescale_q(input.beginPosMs * AV_TIME_BASE / 1000, {1, AV_TIME_BASE},&#xA;                       decoder->video_avs->time_base);&#xA;    &#xA;      av_seek_frame(decoder->avfc, inputPacket->stream_index, startTime, 0);&#xA;      avcodec_flush_buffers(decoder->video_avcc);&#xA;    &#xA;      while (count &lt; totalFrames &amp;&amp;&#xA;             av_read_frame(decoder->avfc, inputPacket.get()) >= 0) {&#xA;        if (streams[inputPacket->stream_index]->codecpar->codec_type ==&#xA;            AVMEDIA_TYPE_VIDEO) {&#xA;          if (transcode_video(decoder, encoder, inputPacket.get(), inputFrame.get())) {&#xA;            return -1;&#xA;          }&#xA;          &#x2B;&#x2B;count;&#xA;        }&#xA;        av_packet_unref(inputPacket.get());&#xA;      }&#xA;    &#xA;      if (encode_video(decoder, encoder, nullptr, nullptr)) return -1;&#xA;        &#xA;      av_write_trailer(encoder->avfc);&#xA;    &#xA;      return 0;&#xA;    }&#xA;</double></streamingcontext></streamingcontext></streamingcontext></streamingcontext></streamingcontext></streamingcontext></streamingcontext></streamingcontext>

    &#xA;

  • ffmpeg very big duration and very small fps with mpeg4 rtsp input

    16 septembre 2014, par Xuch

    I’m trying to dump video from network camera to HDD with ffmpeg libraries. It’s fine working with h264 rtsp input, but with mpeg4 rtsp I’ve got corrupted video file : its duration more than 3000 hours and invalid fps but in fact duration is 300 seconds.

    At start I doing (var ’Index’ contain index valid video stream from input rtsp) :

    ofmt = av_guess_format(NULL, FullPath().c_str(), NULL);
    Ofcx = avformat_alloc_context();
    Ofcx->oformat = ofmt;
    avio_open2(&amp;Ofcx->pb, FullPath().c_str(), AVIO_FLAG_WRITE, NULL, NULL);
    Ost = avformat_new_stream(Ofcx, Ifcx->streams[Index]->codec->codec);
    avcodec_copy_context(Ost->codec, Ifcx->streams[Index]->codec);
    Ost->sample_aspect_ratio.num = Iccx->sample_aspect_ratio.num;
    Ost->sample_aspect_ratio.den = Iccx->sample_aspect_ratio.den;
    Ost->r_frame_rate = Ist->r_frame_rate;
    Ost->avg_frame_rate = Ist->avg_frame_rate;
    Ost->time_base = Ist->time_base;
    Ost->codec->time_base = Ost->time_base;
    avformat_write_header(Ofcx, NULL);
    Ost->codec->ticks_per_frame = Iccx->ticks_per_frame;
    Ost->codec->sample_aspect_ratio.num = Iccx->sample_aspect_ratio.num;

    And next srtart dumping cycle :

    int FfPipeline::DumpCycle()
    {
     AVPacket pkt;
     int index = GetVideoIndex();

     av_init_packet(&amp;pkt);

     av_read_play(Ifcx);

     while((av_read_frame(Ifcx, &amp;pkt) >= 0) &amp;&amp; (!IsNeedStop()))
       {
         if (pkt.stream_index == index)    // Then packet is video
           {
             if ((IsWaitingKeyframe()) &amp;&amp; !(pkt.flags &amp; AV_PKT_FLAG_KEY))
               {
                 av_free_packet(&amp;pkt);
                 continue;
               }

             if (IsWaitingKeyframe())
               {
                 ClearWaitingKeyframeFlag();

                 pkt.pts = pkt.dts = AV_NOPTS_VALUE;

                 SetStartTimestamp();
                 SetRecState(REC_WRITING);
               }

             pkt.stream_index = Ost->id;   // Need to be remove in next time??

             Ofcx->streams[index]->avg_frame_rate = Ifcx->streams[index]->avg_frame_rate;

             pkt.pts = av_rescale_q(pkt.pts, Ifcx->streams[index]->codec->time_base, Ofcx->streams[index]->time_base);
             pkt.dts = av_rescale_q(pkt.dts, Ifcx->streams[index]->codec->time_base, Ofcx->streams[index]->time_base);

             pkt.pts *= Ifcx->streams[index]->codec->ticks_per_frame;
             pkt.dts *= Ifcx->streams[index]->codec->ticks_per_frame;

             av_interleaved_write_frame(Ofcx, &amp;pkt);
           }
         av_free_packet(&amp;pkt);
         av_init_packet(&amp;pkt);
       }

     // Now we stopping
     av_free_packet(&amp;pkt);
     av_read_pause(Ifcx);

     av_write_trailer(Ofcx);

     avio_close(Ofcx->pb);

     avformat_close_input(&amp;Ifcx);
     avformat_free_context(Ofcx);

     AddEndClipToDb();

     Ifcx = NULL;
     Ofcx = NULL;

     return 0;
    }
    • Input stream :
      ’rtsp ://192.168.0.15:554/axis-media/media.amp ?videocodec=mpeg4&fps=25&resolution=800x600&audio=0’
    • Output file : test_out.mkv

    I’m trying various output format but result was fully equal - very big duration and very small fps.

    Please tell me in what direction I need seek ?

    Thanks a big !

    P.S. dump_format() :

    Input #0, rtsp, from 'rtsp://192.168.0.11:554/mpeg4/media.amp?resolution=800x600&amp;audio=0':
     Metadata:
       title           : Media Presentation
     Duration: N/A, start: 0.133344, bitrate: N/A
       Stream #0:0: Video: mpeg4 (Advanced Simple Profile), yuv420p, 640x480 [SAR 1:1 DAR 4:3], 100 fps, 100 tbr, 90k tbn, 100 tbc
    Output #0, matroska, to '/me':
     Metadata:
       encoder         : Lavf53.32.100
       Stream #0:0: Video: mpeg4 (FMP4 / 0x34504D46), yuv420p, 640x480 [SAR 1:1 DAR 4:3], q=2-31, 100 fps, 100 tbr, 1k tbn, 90k tbc
  • Filter out voice frequency with FFMpeg

    9 août 2022, par shrw

    Using ffmpeg can i filter out the voice frequency ?&#xA;I checked the voice frequency is somewhere in 300 Hz to 3000 Hz.&#xA;i just want the music from a mp3 file !

    &#xA;