Recherche avancée

Médias (91)

Autres articles (44)

  • Les formats acceptés

    28 janvier 2010, par

    Les commandes suivantes permettent d’avoir des informations sur les formats et codecs gérés par l’installation local de ffmpeg :
    ffmpeg -codecs ffmpeg -formats
    Les format videos acceptés en entrée
    Cette liste est non exhaustive, elle met en exergue les principaux formats utilisés : h264 : H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 m4v : raw MPEG-4 video format flv : Flash Video (FLV) / Sorenson Spark / Sorenson H.263 Theora wmv :
    Les formats vidéos de sortie possibles
    Dans un premier temps on (...)

  • Publier sur MédiaSpip

    13 juin 2013

    Puis-je poster des contenus à partir d’une tablette Ipad ?
    Oui, si votre Médiaspip installé est à la version 0.2 ou supérieure. Contacter au besoin l’administrateur de votre MédiaSpip pour le savoir

  • Supporting all media types

    13 avril 2011, par

    Unlike most software and media-sharing platforms, MediaSPIP aims to manage as many different media types as possible. The following are just a few examples from an ever-expanding list of supported formats : images : png, gif, jpg, bmp and more audio : MP3, Ogg, Wav and more video : AVI, MP4, OGV, mpg, mov, wmv and more text, code and other data : OpenOffice, Microsoft Office (Word, PowerPoint, Excel), web (html, CSS), LaTeX, Google Earth and (...)

Sur d’autres sites (6186)

  • FFMPEG RTSP stream to MPEG4/H264 file using libx264

    16 octobre 2020, par Phi

    Heyo folks,

    



    I'm attempting to transcode/remux an RTSP stream in H264 format into a MPEG4 container, containing just the H264 video stream. Basically, webcam output into a MP4 container.

    



    I can get a poorly coded MP4 produced, using this code :

    



    // Variables here for demo
AVFormatContext * video_file_output_format = nullptr;
AVFormatContext * rtsp_format_context = nullptr;
AVCodecContext * video_file_codec_context = nullptr;
AVCodecContext * rtsp_vidstream_codec_context = nullptr;
AVPacket packet = {0};
AVStream * video_file_stream = nullptr;
AVCodec * rtsp_decoder_codec = nullptr;
int errorNum = 0, video_stream_index = 0;
std::string outputMP4file = "D:\\somemp4file.mp4";

// begin
AVDictionary * opts = nullptr;
av_dict_set(&opts, "rtsp_transport", "tcp", 0);

if ((errorNum = avformat_open_input(&rtsp_format_context, uriANSI.c_str(), NULL, &opts)) < 0) {
    errOut << "Connection failed: avformat_open_input failed with error " << errorNum << ":\r\n" << ErrorRead(errorNum);
    TacticalAbort();
    return;
}

rtsp_format_context->max_analyze_duration = 50000;
if ((errorNum = avformat_find_stream_info(rtsp_format_context, NULL)) < 0) {
    errOut << "Connection failed: avformat_find_stream_info failed with error " << errorNum << ":\r\n" << ErrorRead(errorNum);
    TacticalAbort();
    return;
}

video_stream_index = errorNum = av_find_best_stream(rtsp_format_context, AVMEDIA_TYPE_VIDEO, -1, -1, NULL, 0);

if (video_stream_index < 0) {
    errOut << "Connection in unexpected state; made a connection, but there was no video stream.\r\n"
        "Attempts to find a video stream resulted in error " << errorNum << ": " << ErrorRead(errorNum);
    TacticalAbort();
    return;
}

rtsp_vidstream_codec_context = rtsp_format_context->streams[video_stream_index]->codec;

av_init_packet(&packet);

if (!(video_file_output_format = av_guess_format(NULL, outputMP4file.c_str(),  NULL))) {
    TacticalAbort();
    throw std::exception("av_guess_format");
}

if (!(rtsp_decoder_codec = avcodec_find_decoder(rtsp_vidstream_codec_context->codec_id))) {
    errOut << "Connection failed: connected, but avcodec_find_decoder returned null.\r\n"
        "Couldn't find codec with an AV_CODEC_ID value of " << rtsp_vidstream_codec_context->codec_id << ".";
    TacticalAbort();
    return;
}

video_file_format_context = avformat_alloc_context();
video_file_format_context->oformat = video_file_output_format;

if (strcpy_s(video_file_format_context->filename, sizeof(video_file_format_context->filename), outputMP4file.c_str())) {
    errOut << "Couldn't open video file: strcpy_s failed with error " << errno << ".";
    std::string log = errOut.str();
    TacticalAbort();
    throw std::exception("strcpy_s");
}

if (!(video_file_encoder_codec = avcodec_find_encoder(video_file_output_format->video_codec))) {
    TacticalAbort();
    throw std::exception("avcodec_find_encoder");
}

// MARKER ONE

if (!outputMP4file.empty() &&
    !(video_file_output_format->flags & AVFMT_NOFILE) &&
    (errorNum = avio_open2(&video_file_format_context->pb, outputMP4file.c_str(), AVIO_FLAG_WRITE, nullptr, &opts)) < 0) {
    errOut << "Couldn't open video file \"" << outputMP4file << "\" for writing : avio_open2 failed with error " << errorNum << ": " << ErrorRead(errorNum);
    TacticalAbort();
    return;
}

// Create stream in MP4 file
if (!(video_file_stream = avformat_new_stream(video_file_format_context, video_file_encoder_codec))) {
    TacticalAbort();
    return;
}

AVCodecContext * video_file_codec_context = video_file_stream->codec;

// MARKER TWO

// error -22/-21 in avio_open2 if this is skipped
if ((errorNum = avcodec_copy_context(video_file_codec_context, rtsp_vidstream_codec_context)) != 0) {
    TacticalAbort();
    throw std::exception("avcodec_copy_context");
}

//video_file_codec_context->codec_tag = 0;

/*
// MARKER 3 - is this not needed? Examples suggest not.
if ((errorNum = avcodec_open2(video_file_codec_context, video_file_encoder_codec, &opts)) < 0)
{
    errOut << "Couldn't open video file codec context: avcodec_open2 failed with error " << errorNum << ": " << ErrorRead(errorNum);
    std::string log = errOut.str();
    TacticalAbort();
    throw std::exception("avcodec_open2, video file");
}*/

//video_file_format_context->flags |= AVFMT_FLAG_GENPTS;
if (video_file_format_context->oformat->flags & AVFMT_GLOBALHEADER)
{
    video_file_codec_context->flags |= CODEC_FLAG_GLOBAL_HEADER;
}

if ((errorNum = avformat_write_header(video_file_format_context, &opts)) < 0) {
    errOut << "Couldn't open video file: avformat_write_header failed with error " << errorNum << ":\r\n" << ErrorRead(errorNum);
    std::string log = errOut.str();
    TacticalAbort();
    return;
}


    



    However, there are several issues :

    



      

    1. I can't pass any x264 options to the output file. The output H264 matches the input H264's profile/level - switching cameras to a different model switches H264 level.
    2. 


    3. The timing of the output file is off, noticeably.
    4. 


    5. The duration of the output file is off, massively. A few seconds of footage becomes hours, although playtime doesn't match. (FWIW, I'm using VLC to play them.)
    6. 


    



    Passing x264 options

    



    If I manually increment PTS per packet, and set DTS equal to PTS, it plays too fast, 2-3 seconds' worth of footage in one second playtime, and duration is hours long. The footage also blurs past several seconds, about 10 seconds' footage in a second.

    



    If I let FFMPEG decide (with or without GENPTS flag), the file has a variable frame rate (probably as expected), but it plays the whole file in an instant and has a long duration too (over forty hours for a few seconds). The duration isn't "real", as the file plays in an instant.

    



    At Marker One, I try to set the profile by passing options to avio_open2. The options are simply ignored by libx264. I've tried :

    



    av_dict_set(&opts, "vprofile", "main", 0);
av_dict_set(&opts, "profile", "main", 0); // error, missing '('
// FF_PROFILE_H264_MAIN equals 77, so I also tried
av_dict_set(&opts, "vprofile", "77", 0); 
av_dict_set(&opts, "profile", "77", 0);


    



    It does seem to read the profile setting, but it doesn't use them. At Marker Two, I tried to set it after the avio_open2, before avformat_write_header .

    



    // I tried all 4 av_dict_set from earlier, passing it to avformat_write_header.
// None had any effect, they weren't consumed.
av_opt_set(video_file_codec_context, "profile", "77", 0);
av_opt_set(video_file_codec_context, "profile", "main", 0);
video_file_codec_context->profile = FF_PROFILE_H264_MAIN;
av_opt_set(video_file_codec_context->priv_data, "profile", "77", 0);
av_opt_set(video_file_codec_context->priv_data, "profile", "main", 0);


    



    Messing with privdata made the program unstable, but I was trying anything at that point.
I'd like to solve issue 1 with passing settings, since I imagine it'd bottleneck any attempt to solve issues 2 or 3.

    



    I've been fiddling with this for the better part of a month now. I've been through dozens of documentation, Q&As, examples. It doesn't help that quite a few are outdated.

    



    Any help would be appreciated.

    



    Cheers

    


  • Announcing Piwik Community Meetup in Munich : Register now !

    5 mai 2014, par Piwik Core Team

    We’re excited to announce our second Piwik community Meetup ! This will be a unique opportunity to connect with other Piwik users, and meet the core team behind Piwik.

    Updated : presentation slides

    The Making Of The Analytics Platform Of The Future

    Piwik in Enterprise

    Piwik Analytics Platform

    Guest lecture : TV to Web Analytics

    Guest lecture : Oxid analytics with Piwik

    When and where is the meetup ? (update, see below)

    Location : Munich, Germany
    Date : Tuesday July 29th 2014
    Time : 5PM
    Language : German/English
    Cost : Free !

    Register now !

    Who can join ?

    All Piwik community members (users, translators, contributors) are warmly invited to join the meetup. Almost all of the core team will be present, we’re looking forward to meeting you !

    What to expect for the Piwik meetup ?

    The meetup will consist of three speakers giving quick 15-20 minute presentations followed by Q&A.

    • Discover some of the upcoming features
    • Learn tricks to make the most out of Piwik
    • Networking and socialising… and an after party in a local bar to continue the discussion !

    Who can join the meetup ?

    This meetup is open to all Piwik users and members of the community.

    • If you are using Piwik to improve your websites and apps, or generally curious about digital analytics and marketing
    • If you are interested in the platform, integrating your app with Piwik or building plugins, come meet with other developers and creators of Piwik

    Timing

    • Doors open at 17:00
    • Starts at 17:30
    • Ends at 20:00 – 20:30

    Schedule

    • 17:30 – Welcome speech (Peter Boehlke (german))
    • 17:40 – Piwik for governments & corporations – Piwik PRO case study (Maciej Zawadziński english)
    • 18:05 – Break (25 minutes) – Coffee, Tea, pastries and cold buffet (free)
    • 18:30 – Overview of the platform Piwik, custom data tracking, publishing on the new Marketplace (Thomas Steur (german))
    • 18:55 – Break (10 minutes)
    • 19:05Piwik users present interesting real world use cases (german)
      – TV-to-Web analytics (Jasper Sasse)
      – Piwik from a SEO’s perspective (Thomas Zeithaml)
      – Using the Piwik Framework to analyze Shop-Data (Joachim Barthel)
    • 19:30 – Break (10 minutes)
    • 19:40 – Next big features, milestones, future roadmap (Matthieu Aubry english)
    • 20:05 – Break (5 minutes)
    • 20:10 – Summary & end of the conference (german)
    • After party at a nearby bar or restaurant (open end)

    Call for Papers

    We would like to hear about how you use Piwik ! If you’d like to present your interesting use case on the conference (speaking time 5 to 7 minutes), please contact us at hello@piwik.org !

    Meetup location

    Munich Workstyle
    Landwehrstraße 61
    80336 München
    Location / Directions

    Parking space is limited : We recommend to use public transport !
    Stations nearby :

    - S-Bahn : Hauptbahnhof, Stachus (both 700m)

    - U-Bahn : Stachus (700m), Theresienwiese (400m)

    Beverage pricing

    - Mineral water : EUR 3,10 (0,75l)

    - Softdrinks / juices : EUR 2,10

    - Beer : EUR 2,80

    Munich Workstyle

    A special thank you to our sponsor Mayflower GmbH !

    Mayflower

    Register now

    Seats are limited, please register today to secure your seat :
    Register now !

  • How to trim the beggining of a video with ffmpeg without transconding the whole stream ?

    14 mai 2017, par Gabriel Diego

    To remove the first 10 seconds of a video without any transcoding I can use the following command :

    ffmpeg -i input.webm -vcodec copy -acodec copy -ss 10 output.webm

    The problem is that if the key frames are located at 8 seconds then at 12 seconds, the video will start from the 8th second. If I do the following I will get the correct timing, but the whole stream will be transcoded :

    ffmpeg -i input.webm -ss 10 output.webm

    Is there any way (using avcodec of ffmpeg) to transcode only the part from the 10th to the 12th second then copy the rest of the stream ?