Recherche avancée

Médias (1)

Mot : - Tags -/punk

Autres articles (58)

  • Les autorisations surchargées par les plugins

    27 avril 2010, par

    Mediaspip core
    autoriser_auteur_modifier() afin que les visiteurs soient capables de modifier leurs informations sur la page d’auteurs

  • Encoding and processing into web-friendly formats

    13 avril 2011, par

    MediaSPIP automatically converts uploaded files to internet-compatible formats.
    Video files are encoded in MP4, Ogv and WebM (supported by HTML5) and MP4 (supported by Flash).
    Audio files are encoded in MP3 and Ogg (supported by HTML5) and MP3 (supported by Flash).
    Where possible, text is analyzed in order to retrieve the data needed for search engine detection, and then exported as a series of image files.
    All uploaded files are stored online in their original format, so you can (...)

  • Dépôt de média et thèmes par FTP

    31 mai 2013, par

    L’outil MédiaSPIP traite aussi les média transférés par la voie FTP. Si vous préférez déposer par cette voie, récupérez les identifiants d’accès vers votre site MédiaSPIP et utilisez votre client FTP favori.
    Vous trouverez dès le départ les dossiers suivants dans votre espace FTP : config/ : dossier de configuration du site IMG/ : dossier des média déjà traités et en ligne sur le site local/ : répertoire cache du site web themes/ : les thèmes ou les feuilles de style personnalisées tmp/ : dossier de travail (...)

Sur d’autres sites (5891)

  • Getting shifted timestamps when encoding a fragmented h264 mp4 with ffmpeg

    14 septembre 2022, par Martin Castin

    I am trying to encode a fragmented h264 mp4 with ffmpeg. I tried the following command :

    


    ffmpeg -i input.mp4 -movflags +frag_keyframe+separate_moof+omit_tfhd_offset+empty_moov output.mp4


    


    It does give me a fragmented mp4 but the timestamps of the frames seem to be shifted by 0.04s when I read the video with mpv. The first frame has a timestamp of 0.04s instead of 0s, as in the input video (1920x1080, 50 fps). I encountered the problem both with ffmpeg 5.1 and ffmpeg 3.4.11.

    


    I tried to add several flags, as -avoid_negative_ts make_zero or -copyts -output_ts_offset -0.04, but it did not help.

    


    I am also trying to achieve this using the ffmpeg libav libraries in C++ but did not get to better result. Here are the code fragments I used.

    


     avformat_alloc_output_context2(&oc, NULL, NULL, filename);

 if (oc_->oformat->flags & AVFMT_GLOBALHEADER) {
    codecCtx_->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;
 }
...
 AVDictionary* opts = NULL;

 av_dict_set(&opts, "movflags", "frag_keyframe+separate_moof+omit_tfhd_offset+empty_moov", 0);

 ret = avformat_write_header(oc_, &opts);


    


    Do you know how to avoid this behaviour of shifted timestamps for fragmented mp4, either with ffmpeg or libav ?

    


    Edit : example videos and complete code example

    


    I also tried with the following ffmpeg build

    


    ffmpeg version 5.0.1-static https://johnvansickle.com/ffmpeg/  Copyright (c) 2000-2022 the FFmpeg developers
built with gcc 8 (Debian 8.3.0-6)
configuration: --enable-gpl --enable-version3 --enable-static --disable-debug --disable-ffplay --disable-indev=sndio --disable-outdev=sndio --cc=gcc --enable-fontconfig --enable-frei0r --enable-gnutls --enable-gmp --enable-libgme --enable-gray --enable-libaom --enable-libfribidi --enable-libass --enable-libvmaf --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librubberband --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libvorbis --enable-libopus --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libdav1d --enable-libxvid --enable-libzvbi --enable-libzimg
libavutil      57. 17.100 / 57. 17.100
libavcodec     59. 18.100 / 59. 18.100
libavformat    59. 16.100 / 59. 16.100
libavdevice    59.  4.100 / 59.  4.100
libavfilter     8. 24.100 /  8. 24.100
libswscale      6.  4.100 /  6.  4.100
libswresample   4.  3.100 /  4.  3.100
libpostproc    56.  3.100 / 56.  3.100


    


    and with the sintel trailer as input video, which is 24fps, and I thus get a timeshift of 83ms. Here is the output I get.

    


    Here is a complete code example, slightly adapted from the muxing.c ffmpeg example (audio removed and adapted for c++). This code shows exactly the same problem.

    


    You can just comment the line 383 (that is calling av_dict_set) to switch back to a not fragmented mp4 that will not have the timestamp shift.

    


    /*&#xA; * Copyright (c) 2003 Fabrice Bellard&#xA; *&#xA; * Permission is hereby granted, free of charge, to any person obtaining a copy&#xA; * of this software and associated documentation files (the "Software"), to deal&#xA; * in the Software without restriction, including without limitation the rights&#xA; * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell&#xA; * copies of the Software, and to permit persons to whom the Software is&#xA; * furnished to do so, subject to the following conditions:&#xA; *&#xA; * The above copyright notice and this permission notice shall be included in&#xA; * all copies or substantial portions of the Software.&#xA; *&#xA; * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR&#xA; * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,&#xA; * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL&#xA; * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER&#xA; * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,&#xA; * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN&#xA; * THE SOFTWARE.&#xA; */&#xA;&#xA;/**&#xA; * @file&#xA; * libavformat API example.&#xA; *&#xA; * Output a media file in any supported libavformat format. The default&#xA; * codecs are used.&#xA; * @example muxing.c&#xA; */&#xA;&#xA;#include <cstdlib>&#xA;#include <cstdio>&#xA;#include <cstring>&#xA;#include <cmath>&#xA;&#xA;extern "C"&#xA;{&#xA;#define __STDC_CONSTANT_MACROS&#xA;#include <libavutil></libavutil>avassert.h>&#xA;#include <libavutil></libavutil>channel_layout.h>&#xA;#include <libavutil></libavutil>opt.h>&#xA;#include <libavutil></libavutil>mathematics.h>&#xA;#include <libavutil></libavutil>timestamp.h>&#xA;#include <libavcodec></libavcodec>avcodec.h>&#xA;#include <libavformat></libavformat>avformat.h>&#xA;#include <libswscale></libswscale>swscale.h>&#xA;#include <libswresample></libswresample>swresample.h>&#xA;}&#xA;&#xA;#define STREAM_DURATION   10.0&#xA;#define STREAM_FRAME_RATE 25 /* 25 images/s */&#xA;#define STREAM_PIX_FMT    AV_PIX_FMT_YUV420P /* default pix_fmt */&#xA;&#xA;#define SCALE_FLAGS SWS_BICUBIC&#xA;&#xA;// a wrapper around a single output AVStream&#xA;typedef struct OutputStream {&#xA;  AVStream *st;&#xA;  AVCodecContext *enc;&#xA;&#xA;  /* pts of the next frame that will be generated */&#xA;  int64_t next_pts;&#xA;  int samples_count;&#xA;&#xA;  AVFrame *frame;&#xA;  AVFrame *tmp_frame;&#xA;&#xA;  AVPacket *tmp_pkt;&#xA;&#xA;  float t, tincr, tincr2;&#xA;&#xA;  struct SwsContext *sws_ctx;&#xA;  struct SwrContext *swr_ctx;&#xA;} OutputStream;&#xA;&#xA;static void log_packet(const AVFormatContext *fmt_ctx, const AVPacket *pkt)&#xA;{&#xA;  AVRational *time_base = &amp;fmt_ctx->streams[pkt->stream_index]->time_base;&#xA;&#xA;//  printf("pts:%s pts_time:%s dts:%s dts_time:%s duration:%s duration_time:%s stream_index:%d\n",&#xA;//         av_ts2str(pkt->pts), av_ts2timestr(pkt->pts, time_base),&#xA;//         av_ts2str(pkt->dts), av_ts2timestr(pkt->dts, time_base),&#xA;//         av_ts2str(pkt->duration), av_ts2timestr(pkt->duration, time_base),&#xA;//         pkt->stream_index);&#xA;}&#xA;&#xA;static int write_frame(AVFormatContext *fmt_ctx, AVCodecContext *c,&#xA;                       AVStream *st, AVFrame *frame, AVPacket *pkt)&#xA;{&#xA;  int ret;&#xA;&#xA;  // send the frame to the encoder&#xA;  ret = avcodec_send_frame(c, frame);&#xA;  if (ret &lt; 0) {&#xA;    fprintf(stderr, "Error sending a frame to the encoder");&#xA;    exit(1);&#xA;  }&#xA;&#xA;  while (ret >= 0) {&#xA;    ret = avcodec_receive_packet(c, pkt);&#xA;    if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF)&#xA;      break;&#xA;    else if (ret &lt; 0) {&#xA;      fprintf(stderr, "Error encoding a frame\n");&#xA;      exit(1);&#xA;    }&#xA;&#xA;    /* rescale output packet timestamp values from codec to stream timebase */&#xA;    av_packet_rescale_ts(pkt, c->time_base, st->time_base);&#xA;    pkt->stream_index = st->index;&#xA;&#xA;    /* Write the compressed frame to the media file. */&#xA;    log_packet(fmt_ctx, pkt);&#xA;    ret = av_interleaved_write_frame(fmt_ctx, pkt);&#xA;    /* pkt is now blank (av_interleaved_write_frame() takes ownership of&#xA;     * its contents and resets pkt), so that no unreferencing is necessary.&#xA;     * This would be different if one used av_write_frame(). */&#xA;    if (ret &lt; 0) {&#xA;      fprintf(stderr, "Error while writing output packet\n");&#xA;      exit(1);&#xA;    }&#xA;  }&#xA;&#xA;  return ret == AVERROR_EOF ? 1 : 0;&#xA;}&#xA;&#xA;/* Add an output stream. */&#xA;static void add_stream(OutputStream *ost, AVFormatContext *oc,&#xA;                       const AVCodec **codec,&#xA;                       enum AVCodecID codec_id)&#xA;{&#xA;  AVCodecContext *c;&#xA;  int i;&#xA;&#xA;  /* find the encoder */&#xA;  *codec = avcodec_find_encoder(codec_id);&#xA;  if (!(*codec)) {&#xA;    fprintf(stderr, "Could not find encoder for &#x27;%s&#x27;\n",&#xA;            avcodec_get_name(codec_id));&#xA;    exit(1);&#xA;  }&#xA;&#xA;  ost->tmp_pkt = av_packet_alloc();&#xA;  if (!ost->tmp_pkt) {&#xA;    fprintf(stderr, "Could not allocate AVPacket\n");&#xA;    exit(1);&#xA;  }&#xA;&#xA;  ost->st = avformat_new_stream(oc, NULL);&#xA;  if (!ost->st) {&#xA;    fprintf(stderr, "Could not allocate stream\n");&#xA;    exit(1);&#xA;  }&#xA;  ost->st->id = oc->nb_streams-1;&#xA;  c = avcodec_alloc_context3(*codec);&#xA;  if (!c) {&#xA;    fprintf(stderr, "Could not alloc an encoding context\n");&#xA;    exit(1);&#xA;  }&#xA;  ost->enc = c;&#xA;&#xA;  switch ((*codec)->type) {&#xA;    case AVMEDIA_TYPE_VIDEO:&#xA;      c->codec_id = codec_id;&#xA;&#xA;      c->bit_rate = 400000;&#xA;      /* Resolution must be a multiple of two. */&#xA;      c->width    = 352;&#xA;      c->height   = 288;&#xA;      /* timebase: This is the fundamental unit of time (in seconds) in terms&#xA;       * of which frame timestamps are represented. For fixed-fps content,&#xA;       * timebase should be 1/framerate and timestamp increments should be&#xA;       * identical to 1. */&#xA;      ost->st->time_base = (AVRational){ 1, STREAM_FRAME_RATE };&#xA;      c->time_base       = ost->st->time_base;&#xA;&#xA;      c->gop_size      = 12; /* emit one intra frame every twelve frames at most */&#xA;      c->pix_fmt       = STREAM_PIX_FMT;&#xA;      if (c->codec_id == AV_CODEC_ID_MPEG2VIDEO) {&#xA;        /* just for testing, we also add B-frames */&#xA;        c->max_b_frames = 2;&#xA;      }&#xA;      if (c->codec_id == AV_CODEC_ID_MPEG1VIDEO) {&#xA;        /* Needed to avoid using macroblocks in which some coeffs overflow.&#xA;         * This does not happen with normal video, it just happens here as&#xA;         * the motion of the chroma plane does not match the luma plane. */&#xA;        c->mb_decision = 2;&#xA;      }&#xA;      break;&#xA;&#xA;    default:&#xA;      break;&#xA;  }&#xA;&#xA;  /* Some formats want stream headers to be separate. */&#xA;  if (oc->oformat->flags &amp; AVFMT_GLOBALHEADER)&#xA;    c->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;&#xA;}&#xA;&#xA;/**************************************************************/&#xA;/* video output */&#xA;&#xA;static AVFrame *alloc_picture(enum AVPixelFormat pix_fmt, int width, int height)&#xA;{&#xA;  AVFrame *picture;&#xA;  int ret;&#xA;&#xA;  picture = av_frame_alloc();&#xA;  if (!picture)&#xA;    return NULL;&#xA;&#xA;  picture->format = pix_fmt;&#xA;  picture->width  = width;&#xA;  picture->height = height;&#xA;&#xA;  /* allocate the buffers for the frame data */&#xA;  ret = av_frame_get_buffer(picture, 0);&#xA;  if (ret &lt; 0) {&#xA;    fprintf(stderr, "Could not allocate frame data.\n");&#xA;    exit(1);&#xA;  }&#xA;&#xA;  return picture;&#xA;}&#xA;&#xA;static void open_video(AVFormatContext *oc, const AVCodec *codec,&#xA;                       OutputStream *ost, AVDictionary *opt_arg)&#xA;{&#xA;  int ret;&#xA;  AVCodecContext *c = ost->enc;&#xA;  AVDictionary *opt = NULL;&#xA;&#xA;  av_dict_copy(&amp;opt, opt_arg, 0);&#xA;&#xA;  /* open the codec */&#xA;  ret = avcodec_open2(c, codec, &amp;opt);&#xA;  av_dict_free(&amp;opt);&#xA;  if (ret &lt; 0) {&#xA;    fprintf(stderr, "Could not open video codec\n");&#xA;    exit(1);&#xA;  }&#xA;&#xA;  /* allocate and init a re-usable frame */&#xA;  ost->frame = alloc_picture(c->pix_fmt, c->width, c->height);&#xA;  if (!ost->frame) {&#xA;    fprintf(stderr, "Could not allocate video frame\n");&#xA;    exit(1);&#xA;  }&#xA;&#xA;  /* If the output format is not YUV420P, then a temporary YUV420P&#xA;   * picture is needed too. It is then converted to the required&#xA;   * output format. */&#xA;  ost->tmp_frame = NULL;&#xA;  if (c->pix_fmt != AV_PIX_FMT_YUV420P) {&#xA;    ost->tmp_frame = alloc_picture(AV_PIX_FMT_YUV420P, c->width, c->height);&#xA;    if (!ost->tmp_frame) {&#xA;      fprintf(stderr, "Could not allocate temporary picture\n");&#xA;      exit(1);&#xA;    }&#xA;  }&#xA;&#xA;  /* copy the stream parameters to the muxer */&#xA;  ret = avcodec_parameters_from_context(ost->st->codecpar, c);&#xA;  if (ret &lt; 0) {&#xA;    fprintf(stderr, "Could not copy the stream parameters\n");&#xA;    exit(1);&#xA;  }&#xA;}&#xA;&#xA;/* Prepare a dummy image. */&#xA;static void fill_yuv_image(AVFrame *pict, int frame_index,&#xA;                           int width, int height)&#xA;{&#xA;  int x, y, i;&#xA;&#xA;  i = frame_index;&#xA;&#xA;  /* Y */&#xA;  for (y = 0; y &lt; height; y&#x2B;&#x2B;)&#xA;    for (x = 0; x &lt; width; x&#x2B;&#x2B;)&#xA;      pict->data[0][y * pict->linesize[0] &#x2B; x] = x &#x2B; y &#x2B; i * 3;&#xA;&#xA;  /* Cb and Cr */&#xA;  for (y = 0; y &lt; height / 2; y&#x2B;&#x2B;) {&#xA;    for (x = 0; x &lt; width / 2; x&#x2B;&#x2B;) {&#xA;      pict->data[1][y * pict->linesize[1] &#x2B; x] = 128 &#x2B; y &#x2B; i * 2;&#xA;      pict->data[2][y * pict->linesize[2] &#x2B; x] = 64 &#x2B; x &#x2B; i * 5;&#xA;    }&#xA;  }&#xA;}&#xA;&#xA;static AVFrame *get_video_frame(OutputStream *ost)&#xA;{&#xA;  AVCodecContext *c = ost->enc;&#xA;&#xA;  /* check if we want to generate more frames */&#xA;  if (av_compare_ts(ost->next_pts, c->time_base,&#xA;                    STREAM_DURATION, (AVRational){ 1, 1 }) > 0)&#xA;    return NULL;&#xA;&#xA;  /* when we pass a frame to the encoder, it may keep a reference to it&#xA;   * internally; make sure we do not overwrite it here */&#xA;  if (av_frame_make_writable(ost->frame) &lt; 0)&#xA;    exit(1);&#xA;&#xA;  if (c->pix_fmt != AV_PIX_FMT_YUV420P) {&#xA;    /* as we only generate a YUV420P picture, we must convert it&#xA;     * to the codec pixel format if needed */&#xA;    if (!ost->sws_ctx) {&#xA;      ost->sws_ctx = sws_getContext(c->width, c->height,&#xA;                                    AV_PIX_FMT_YUV420P,&#xA;                                    c->width, c->height,&#xA;                                    c->pix_fmt,&#xA;                                    SCALE_FLAGS, NULL, NULL, NULL);&#xA;      if (!ost->sws_ctx) {&#xA;        fprintf(stderr,&#xA;                "Could not initialize the conversion context\n");&#xA;        exit(1);&#xA;      }&#xA;    }&#xA;    fill_yuv_image(ost->tmp_frame, ost->next_pts, c->width, c->height);&#xA;    sws_scale(ost->sws_ctx, (const uint8_t * const *) ost->tmp_frame->data,&#xA;              ost->tmp_frame->linesize, 0, c->height, ost->frame->data,&#xA;              ost->frame->linesize);&#xA;  } else {&#xA;    fill_yuv_image(ost->frame, ost->next_pts, c->width, c->height);&#xA;  }&#xA;&#xA;  ost->frame->pts = ost->next_pts&#x2B;&#x2B;;&#xA;&#xA;  return ost->frame;&#xA;}&#xA;&#xA;/*&#xA; * encode one video frame and send it to the muxer&#xA; * return 1 when encoding is finished, 0 otherwise&#xA; */&#xA;static int write_video_frame(AVFormatContext *oc, OutputStream *ost)&#xA;{&#xA;  return write_frame(oc, ost->enc, ost->st, get_video_frame(ost), ost->tmp_pkt);&#xA;}&#xA;&#xA;static void close_stream(AVFormatContext *oc, OutputStream *ost)&#xA;{&#xA;  avcodec_free_context(&amp;ost->enc);&#xA;  av_frame_free(&amp;ost->frame);&#xA;  av_frame_free(&amp;ost->tmp_frame);&#xA;  av_packet_free(&amp;ost->tmp_pkt);&#xA;  sws_freeContext(ost->sws_ctx);&#xA;  swr_free(&amp;ost->swr_ctx);&#xA;}&#xA;&#xA;/**************************************************************/&#xA;/* media file output */&#xA;&#xA;int main(int argc, char **argv)&#xA;{&#xA;  OutputStream video_st = { 0 }, audio_st = { 0 };&#xA;  const AVOutputFormat *fmt;&#xA;  const char *filename;&#xA;  AVFormatContext *oc;&#xA;  const AVCodec *audio_codec, *video_codec;&#xA;  int ret;&#xA;  int have_video = 0, have_audio = 0;&#xA;  int encode_video = 0, encode_audio = 0;&#xA;  AVDictionary *opt = NULL;&#xA;  int i;&#xA;&#xA;  if (argc &lt; 2) {&#xA;    printf("usage: %s output_file\n"&#xA;           "API example program to output a media file with libavformat.\n"&#xA;           "This program generates a synthetic audio and video stream, encodes and\n"&#xA;           "muxes them into a file named output_file.\n"&#xA;           "The output format is automatically guessed according to the file extension.\n"&#xA;           "Raw images can also be output by using &#x27;%%d&#x27; in the filename.\n"&#xA;           "\n", argv[0]);&#xA;    return 1;&#xA;  }&#xA;&#xA;  filename = argv[1];&#xA;&#xA;  av_dict_set(&amp;opt, "movflags", "frag_keyframe&#x2B;separate_moof&#x2B;omit_tfhd_offset&#x2B;empty_moov", 0);&#xA;&#xA;  /* allocate the output media context */&#xA;  avformat_alloc_output_context2(&amp;oc, NULL, NULL, filename);&#xA;  if (!oc) {&#xA;    printf("Could not deduce output format from file extension: using MPEG.\n");&#xA;    avformat_alloc_output_context2(&amp;oc, NULL, "mpeg", filename);&#xA;  }&#xA;  if (!oc)&#xA;    return 1;&#xA;&#xA;  fmt = oc->oformat;&#xA;&#xA;  /* Add the audio and video streams using the default format codecs&#xA;   * and initialize the codecs. */&#xA;  if (fmt->video_codec != AV_CODEC_ID_NONE) {&#xA;    add_stream(&amp;video_st, oc, &amp;video_codec, fmt->video_codec);&#xA;    have_video = 1;&#xA;    encode_video = 1;&#xA;  }&#xA;&#xA;  /* Now that all the parameters are set, we can open the audio and&#xA;   * video codecs and allocate the necessary encode buffers. */&#xA;  if (have_video)&#xA;    open_video(oc, video_codec, &amp;video_st, opt);&#xA;&#xA;&#xA;  av_dump_format(oc, 0, filename, 1);&#xA;&#xA;  /* open the output file, if needed */&#xA;  if (!(fmt->flags &amp; AVFMT_NOFILE)) {&#xA;    ret = avio_open(&amp;oc->pb, filename, AVIO_FLAG_WRITE);&#xA;    if (ret &lt; 0) {&#xA;      fprintf(stderr, "Could not open &#x27;%s&#x27;\n", filename);&#xA;      return 1;&#xA;    }&#xA;  }&#xA;&#xA;  /* Write the stream header, if any. */&#xA;  ret = avformat_write_header(oc, &amp;opt);&#xA;  if (ret &lt; 0) {&#xA;    fprintf(stderr, "Error occurred when opening output file\n");&#xA;    return 1;&#xA;  }&#xA;&#xA;  while (encode_video || encode_audio) {&#xA;    /* select the stream to encode */&#xA;    if (encode_video &amp;&amp;&#xA;        (!encode_audio || av_compare_ts(video_st.next_pts, video_st.enc->time_base,&#xA;                                        audio_st.next_pts, audio_st.enc->time_base) &lt;= 0)) {&#xA;      encode_video = !write_video_frame(oc, &amp;video_st);&#xA;    }&#xA;  }&#xA;&#xA;  av_write_trailer(oc);&#xA;&#xA;  /* Close each codec. */&#xA;  if (have_video)&#xA;    close_stream(oc, &amp;video_st);&#xA;  if (have_audio)&#xA;    close_stream(oc, &amp;audio_st);&#xA;&#xA;  if (!(fmt->flags &amp; AVFMT_NOFILE))&#xA;    /* Close the output file. */&#xA;    avio_closep(&amp;oc->pb);&#xA;&#xA;  /* free the stream */&#xA;  avformat_free_context(oc);&#xA;&#xA;  return 0;&#xA;}&#xA;</cmath></cstring></cstdio></cstdlib>

    &#xA;

  • MPEG2 Video decode displaying bad artefacts

    30 août 2022, par beepboop_i_am_robot

    I have a video from a client (dumped from an RTP stream, in MPEG2 format), which displays terribly in all video players I throw at it (VLC, FFPlay, Media Player Classic, MPC-HC).

    &#xA;

    bbbb.raw

    &#xA;

    The output from ffprobe,

    &#xA;

    .\ffprobe.exe -i .\bbbb.raw -hide_banner&#xA;Input #0, mpegvideo, from &#x27;.\bbbb.raw&#x27;:&#xA;  Duration: N/A, bitrate: N/A&#xA;  Stream #0:0: Video: mpeg2video (Main), yuv420p(tv, top first), 720x480 [SAR 8:9 DAR 4:3], Closed Captions, 29.97 fps, 59.94 tbr, 1200k tbn&#xA;    Side data:&#xA;      cpb: bitrate max/min/avg: 3596000/0/0 buffer size: 1835008 vbv_delay: N/A&#xA;

    &#xA;

    The footage through ffplay looks like this,

    &#xA;

    ffplay_01.png&#xA;ffplay_02.png&#xA;ffplay_03.png

    &#xA;

    The footage through VLC looks like this,

    &#xA;

    vlc_01.png&#xA;vlc_02.png

    &#xA;

    ffplay generates the following logging,

    &#xA;

    .\ffplay.exe -i .\bbbb.mpeg -hide_banner&#xA;Input #0, mpegvideo, from &#x27;.\bbbb.mpeg&#x27;:q=    0KB sq=    0B f=0/0&#xA;  Duration: N/A, bitrate: N/A&#xA;  Stream #0:0: Video: mpeg2video (Main), yuv420p(tv, top first), 720x480 [SAR 8:9 DAR 4:3], Closed Captions, 29.97 fps, 59.94 tbr, 1200k tbn&#xA;    Side data:&#xA;      cpb: bitrate max/min/avg: 3596000/0/0 buffer size: 1835008 vbv_delay: N/A&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 7 11&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 4 13&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 2 19&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 9 15&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 13 6&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 0 7&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 3 9&#xA;[mpeg2video @ 00000246c56851c0] Invalid mb type in I-frame at 1 23&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 14 8&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 12 18&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 4 22&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 35 1&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 12 28&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 9 29&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 21 12&#xA;[mpeg2video @ 00000246c56851c0] mb incr damaged&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 13 20&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 38 16&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 12 2&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 25 10&#xA;[mpeg2video @ 00000246c56851c0] Invalid mb type in I-frame at 13 26&#xA;[mpeg2video @ 00000246c56851c0] Invalid mb type in I-frame at 9 27&#xA;[mpeg2video @ 00000246c56851c0] Warning MVs not available&#xA;[mpeg2video @ 00000246c56851c0] concealing 990 DC, 990 AC, 990 MV errors in I frame&#xA;[mpeg2video @ 00000246c56851c0] mb incr damaged&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 18 15&#xA;[mpeg2video @ 00000246c56851c0] Invalid mb type in P-frame at 41 19&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 29 27&#xA;[mpeg2video @ 00000246c56851c0] Warning MVs not available&#xA;[mpeg2video @ 00000246c56851c0] concealing 182 DC, 182 AC, 182 MV errors in P frame&#xA;[mpeg2video @ 00000246c56851c0] Invalid mb type in B-frame at 43 12&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 37 0&#xA;[mpeg2video @ 00000246c56851c0] mb incr damaged&#xA;[mpeg2video @ 00000246c56851c0] Invalid mb type in B-frame at 40 5&#xA;[mpeg2video @ 00000246c56851c0] Warning MVs not available&#xA;[mpeg2video @ 00000246c56851c0] concealing 180 DC, 180 AC, 180 MV errors in B frame&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 13 2&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 21 7&#xA;[mpeg2video @ 00000246c56851c0] invalid cbp 0 at 41 12&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 24 22&#xA;[mpeg2video @ 00000246c56851c0] invalid cbp 0 at 22 27&#xA;[mpeg2video @ 00000246c56851c0] Warning MVs not available&#xA;[mpeg2video @ 00000246c56851c0] concealing 226 DC, 226 AC, 226 MV errors in P frame&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 38 17&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 43 11&#xA;[mpeg2video @ 00000246c56851c0] end mismatch left=888 B3C3A at 0 30&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 41 23&#xA;[mpeg2video @ 00000246c56851c0] Warning MVs not available&#xA;[mpeg2video @ 00000246c56851c0] concealing 182 DC, 182 AC, 182 MV errors in B frame&#xA;[mpeg2video @ 00000246c56851c0] Invalid mb type in P-frame at 41 18&#xA;[mpeg2video @ 00000246c56851c0] mb incr damaged&#xA;[mpeg2video @ 00000246c56851c0] end mismatch left=95 4DC505 at 0 30&#xA;[mpeg2video @ 00000246c56851c0] Warning MVs not available&#xA;[mpeg2video @ 00000246c56851c0] concealing 136 DC, 136 AC, 136 MV errors in P frame&#xA;[mpeg2video @ 00000246c56851c0] slice mismatch&#xA;    Last message repeated 1 times&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 8 25&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 33 17&#xA;[mpeg2video @ 00000246c56851c0] Warning MVs not available0B f=0/0&#xA;[mpeg2video @ 00000246c56851c0] concealing 180 DC, 180 AC, 180 MV errors in B frame&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 0 6&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 0 8&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 13 9&#xA;[mpeg2video @ 00000246c56851c0] Invalid mb type in I-frame at 21 13&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 35 0&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 22 11&#xA;[mpeg2video @ 00000246c56851c0] slice mismatch&#xA;[mpeg2video @ 00000246c56851c0] Invalid mb type in I-frame at 32 15&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 35 17&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 19 24&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 30 19&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 28 21&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 9 3&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 13 29&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 44 27&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 12 7&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 3 10&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 42 14&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 12 1&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 12 16&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 22 18&#xA;[mpeg2video @ 00000246c56851c0] slice mismatch&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 2 20&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 30 22&#xA;[mpeg2video @ 00000246c56851c0] Warning MVs not available&#xA;[mpeg2video @ 00000246c56851c0] concealing 1125 DC, 1125 AC, 1125 MV errors in I frame&#xA;[mpeg2video @ 00000246c56851c0] invalid cbp 0 at 42 0    0B f=0/0&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 30 15&#xA;[mpeg2video @ 00000246c56851c0] slice mismatch&#xA;[mpeg2video @ 00000246c56851c0] Invalid mb type in B-frame at 16 10&#xA;[mpeg2video @ 00000246c56851c0] slice mismatch&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 16 28&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 36 20&#xA;[mpeg2video @ 00000246c56851c0] Warning MVs not available&#xA;[mpeg2video @ 00000246c56851c0] concealing 315 DC, 315 AC, 315 MV errors in B frame&#xA;[mpeg2video @ 00000246c56851c0] slice mismatch&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 9 21&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 24 11&#xA;[mpeg2video @ 00000246c56851c0] mb incr damaged&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 20 25&#xA;[mpeg2video @ 00000246c56851c0] Warning MVs not available0B f=0/0&#xA;[mpeg2video @ 00000246c56851c0] concealing 228 DC, 228 AC, 228 MV errors in P frame&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 38 2&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 5 8&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 21 28&#xA;[mpeg2video @ 00000246c56851c0] Warning MVs not available0B f=0/0&#xA;[mpeg2video @ 00000246c56851c0] concealing 137 DC, 137 AC, 137 MV errors in B frame&#xA;[mpeg2video @ 00000246c56851c0] Invalid mb type in P-frame at 40 14&#xA;[mpeg2video @ 00000246c56851c0] Invalid mb type in P-frame at 22 25&#xA;[mpeg2video @ 00000246c56851c0] Warning MVs not available0B f=0/0&#xA;[mpeg2video @ 00000246c56851c0] concealing 139 DC, 139 AC, 139 MV errors in P frame&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 16 0&#xA;[mpeg2video @ 00000246c56851c0] slice mismatch&#xA;    Last message repeated 2 times&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 33 20&#xA;[mpeg2video @ 00000246c56851c0] Warning MVs not available&#xA;[mpeg2video @ 00000246c56851c0] concealing 227 DC, 227 AC, 227 MV errors in B frame&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 24 4   0B f=0/0&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 29 16&#xA;[mpeg2video @ 00000246c56851c0] end mismatch left=4 8 at 0 30&#xA;[mpeg2video @ 00000246c56851c0] Warning MVs not available&#xA;[mpeg2video @ 00000246c56851c0] concealing 229 DC, 229 AC, 229 MV errors in P frame&#xA;[mpeg2video @ 00000246c56851c0] mb incr damagedKB sq=    0B f=0/0&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 40 22&#xA;[mpeg2video @ 00000246c56851c0] Warning MVs not available&#xA;[mpeg2video @ 00000246c56851c0] concealing 90 DC, 90 AC, 90 MV errors in B frame&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 9 0f=0/0&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 9 2&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 6 15&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 3 11&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 33 9&#xA;[mpeg2video @ 00000246c56851c0] Invalid mb type in I-frame at 41 4&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 33 5&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 8 18&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 20 7&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 22 14&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 15 23&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 16 22&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 9 20&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 3 28&#xA;[mpeg2video @ 00000246c56851c0] slice mismatch&#xA;[mpeg2video @ 00000246c56851c0] Invalid mb type in I-frame at 26 3&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 34 16&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 44 8&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 1 29&#xA;[mpeg2video @ 00000246c56851c0] Invalid mb type in I-frame at 29 25&#xA;[mpeg2video @ 00000246c56851c0] Warning MVs not available&#xA;[mpeg2video @ 00000246c56851c0] concealing 900 DC, 900 AC, 900 MV errors in I frame&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 38 6&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 40 1&#xA;[mpeg2video @ 00000246c56851c0] invalid cbp -1 at 43 16&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 37 21&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 11 27&#xA;[mpeg2video @ 00000246c56851c0] Warning MVs not available0B f=0/0&#xA;[mpeg2video @ 00000246c56851c0] concealing 227 DC, 227 AC, 227 MV errors in B frame&#xA;[mpeg2video @ 00000246c56851c0] Invalid mb type in P-frame at 42 7&#xA;[mpeg2video @ 00000246c56851c0] Invalid mb type in P-frame at 10 2&#xA;overread 8&#xA;[mpeg2video @ 00000246c56851c0] Warning MVs not available0B f=0/0&#xA;[mpeg2video @ 00000246c56851c0] concealing 812 DC, 812 AC, 812 MV errors in P frame&#xA;[mpeg2video @ 00000246c56851c0] mb incr damaged&#xA;[mpeg2video @ 00000246c56851c0] slice mismatch&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 12 26&#xA;[mpeg2video @ 00000246c56851c0] Warning MVs not available0B f=0/0&#xA;[mpeg2video @ 00000246c56851c0] concealing 149 DC, 149 AC, 149 MV errors in B frame&#xA;[mpeg2video @ 00000246c56851c0] slice mismatch&#xA;[mpeg2video @ 00000246c56851c0] Invalid mb type in P-frame at 18 9&#xA;[mpeg2video @ 00000246c56851c0] invalid cbp 0 at 22 14&#xA;[mpeg2video @ 00000246c56851c0] invalid cbp -1 at 10 20&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 9 26&#xA;[mpeg2video @ 00000246c56851c0] Warning MVs not available0B f=0/0&#xA;[mpeg2video @ 00000246c56851c0] concealing 226 DC, 226 AC, 226 MV errors in P frame&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 5 2&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 5 14&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 27 7&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 43 26&#xA;[mpeg2video @ 00000246c56851c0] Warning MVs not available0B f=0/0&#xA;[mpeg2video @ 00000246c56851c0] concealing 180 DC, 180 AC, 180 MV errors in B frame&#xA;[mpeg2video @ 00000246c56851c0] slice below image (109 >= 30)=0/0&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 7 4    0B f=0/0&#xA;overread 5&#xA;[mpeg2video @ 00000246c56851c0] Warning MVs not available&#xA;[mpeg2video @ 00000246c56851c0] concealing 451 DC, 451 AC, 451 MV errors in B frame&#xA;[mpeg2video @ 00000246c56851c0] Invalid mb type in I-frame at 23 0&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 41 1&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 23 2&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 5 3&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 6 14&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 30 12&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 2 28&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 34 10&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 8 23&#xA;[mpeg2video @ 00000246c56851c0] Invalid mb type in I-frame at 10 19&#xA;[mpeg2video @ 00000246c56851c0] Invalid mb type in I-frame at 11 21&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 30 22&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 35 24&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 44 17&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 14 16&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 15 4=0/0&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 26 6&#xA;[mpeg2video @ 00000246c56851c0] Invalid mb type in I-frame at 6 7&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 24 26&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 4 25&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 35 29&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 16 27&#xA;[mpeg2video @ 00000246c56851c0] Warning MVs not available&#xA;[mpeg2video @ 00000246c56851c0] concealing 990 DC, 990 AC, 990 MV errors in I frame&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 35 5&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 41 16&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 42 10&#xA;[mpeg2video @ 00000246c56851c0] slice mismatch&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 23 25&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 14 29&#xA;[mpeg2video @ 00000246c56851c0] Warning MVs not available&#xA;[mpeg2video @ 00000246c56851c0] concealing 275 DC, 275 AC, 275 MV errors in B frame&#xA;[mpeg2video @ 00000246c56851c0] Invalid mb type in P-frame at 1 15&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 33 27&#xA;[mpeg2video @ 00000246c56851c0] Warning MVs not available&#xA;[mpeg2video @ 00000246c56851c0] concealing 140 DC, 140 AC, 140 MV errors in P frame&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 2 1    0B f=0/0&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 30 5&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 33 12&#xA;overread 8&#xA;[mpeg2video @ 00000246c56851c0] Warning MVs not available0B f=0/0&#xA;[mpeg2video @ 00000246c56851c0] concealing 495 DC, 495 AC, 495 MV errors in B frame&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 14 7&#xA;[mpeg2video @ 00000246c56851c0] Invalid mb type in P-frame at 29 18&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 20 26&#xA;[mpeg2video @ 00000246c56851c0] Invalid mb type in P-frame at 24 22&#xA;[mpeg2video @ 00000246c56851c0] Warning MVs not available0B f=0/0&#xA;[mpeg2video @ 00000246c56851c0] concealing 181 DC, 181 AC, 181 MV errors in P frame&#xA;[mpeg2video @ 00000246c56851c0] Invalid mb type in B-frame at 27 6&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 8 17&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 43 11&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 43 1&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 17 25&#xA;[mpeg2video @ 00000246c56851c0] Warning MVs not available0B f=0/0&#xA;[mpeg2video @ 00000246c56851c0] concealing 270 DC, 270 AC, 270 MV errors in B frame&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 0 15&#xA;[mpeg2video @ 00000246c56851c0] slice mismatch&#xA;[mpeg2video @ 00000246c56851c0] invalid cbp -1 at 11 7&#xA;[mpeg2video @ 00000246c56851c0] mb incr damaged&#xA;    Last message repeated 1 times&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 6 11&#xA;[mpeg2video @ 00000246c56851c0] invalid cbp 0 at 36 12&#xA;[mpeg2video @ 00000246c56851c0] Invalid mb type in P-frame at 12 15&#xA;[mpeg2video @ 00000246c56851c0] Invalid mb type in P-frame at 6 16&#xA;[mpeg2video @ 00000246c56851c0] Invalid mb type in P-frame at 9 17&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 1 18&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 11 22&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 23 22&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 10 28&#xA;[mpeg2video @ 00000246c56851c0] Invalid mb type in P-frame at 8 29&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 3 4    0B f=0/0&#xA;[mpeg2video @ 00000246c56851c0] invalid cbp -1 at 5 9&#xA;[mpeg2video @ 00000246c56851c0] slice mismatch&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 7 13&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 24 1&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 18 1&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 29 23&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 44 26&#xA;[mpeg2video @ 00000246c56851c0] Invalid mb type in P-frame at 12 27&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 6 14&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 28 19&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 10 20&#xA;[mpeg2video @ 00000246c56851c0] Invalid mb type in P-frame at 13 8&#xA;[mpeg2video @ 00000246c56851c0] Warning MVs not available&#xA;[mpeg2video @ 00000246c56851c0] concealing 1260 DC, 1260 AC, 1260 MV errors in P frame&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 36 2&#xA;[mpeg2video @ 00000246c56851c0] slice mismatch&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 25 27&#xA;[mpeg2video @ 00000246c56851c0] Warning MVs not available0B f=0/0&#xA;[mpeg2video @ 00000246c56851c0] concealing 180 DC, 180 AC, 180 MV errors in B frame&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 6 4&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 30 5&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 8 6&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 5 8&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 9 12&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 0 1&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 33 13&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 12 17&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 30 16&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 5 28&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 34 29&#xA;[mpeg2video @ 00000246c56851c0] slice mismatch&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 11 21&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 13 19&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 32 24&#xA;[mpeg2video @ 00000246c56851c0] Invalid mb type in I-frame at 1 25&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 9 2f=0/0&#xA;[mpeg2video @ 00000246c56851c0] Invalid mb type in I-frame at 33 1&#xA;[mpeg2video @ 00000246c56851c0] Invalid mb type in I-frame at 15 14&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 3 18&#xA;[mpeg2video @ 00000246c56851c0] slice mismatch&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 15 22&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 7 20&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 36 26&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 25 3&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 25 27&#xA;[mpeg2video @ 00000246c56851c0] Warning MVs not available&#xA;[mpeg2video @ 00000246c56851c0] concealing 1215 DC, 1215 AC, 1215 MV errors in I frame&#xA;[mpeg2video @ 00000246c56851c0] Invalid mb type in B-frame at 26 10&#xA;[mpeg2video @ 00000246c56851c0] Invalid mb type in B-frame at 1 16&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 44 23&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 30 20&#xA;[mpeg2video @ 00000246c56851c0] Warning MVs not available&#xA;[mpeg2video @ 00000246c56851c0] concealing 182 DC, 182 AC, 182 MV errors in B frame&#xA;[mpeg2video @ 00000246c56851c0] slice mismatch6KB sq=    0B f=0/0&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 6 9&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 12 19&#xA;[mpeg2video @ 00000246c56851c0] invalid cbp -1 at 3 27&#xA;[mpeg2video @ 00000246c56851c0] invalid cbp 0 at 37 28&#xA;[mpeg2video @ 00000246c56851c0] Warning MVs not available&#xA;[mpeg2video @ 00000246c56851c0] concealing 226 DC, 226 AC, 226 MV errors in P frame&#xA;[mpeg2video @ 00000246c56851c0] invalid cbp -1 at 42 9   0B f=0/0&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 38 0&#xA;[mpeg2video @ 00000246c56851c0] slice mismatch&#xA;    Last message repeated 1 times&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 32 29  0B f=0/0&#xA;[mpeg2video @ 00000246c56851c0] Warning MVs not available&#xA;[mpeg2video @ 00000246c56851c0] concealing 272 DC, 272 AC, 272 MV errors in B frame&#xA;[mpeg2video @ 00000246c56851c0] slice mismatch&#xA;[mpeg2video @ 00000246c56851c0] Invalid mb type in P-frame at 2 23&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 31 28&#xA;[mpeg2video @ 00000246c56851c0] Warning MVs not available&#xA;[mpeg2video @ 00000246c56851c0] concealing 135 DC, 135 AC, 135 MV errors in P frame&#xA;[mpeg2video @ 00000246c56851c0] slice mismatch&#xA;    Last message repeated 1 times&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 8 24&#xA;[mpeg2video @ 00000246c56851c0] invalid cbp 0 at 39 28&#xA;[mpeg2video @ 00000246c56851c0] mb incr damagedKB sq=    0B f=0/0&#xA;[mpeg2video @ 00000246c56851c0] Warning MVs not available&#xA;[mpeg2video @ 00000246c56851c0] concealing 225 DC, 225 AC, 225 MV errors in B frame&#xA;[mpeg2video @ 00000246c56851c0] slice mismatch&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 40 17&#xA;[mpeg2video @ 00000246c56851c0] end mismatch left=587 450598 at 0 30&#xA;[mpeg2video @ 00000246c56851c0] Warning MVs not available0B f=0/0&#xA;[mpeg2video @ 00000246c56851c0] concealing 180 DC, 180 AC, 180 MV errors in P frame&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 41 8&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 37 26&#xA;[mpeg2video @ 00000246c56851c0] Invalid mb type in B-frame at 0 29&#xA;[mpeg2video @ 00000246c56851c0] Warning MVs not available&#xA;[mpeg2video @ 00000246c56851c0] concealing 135 DC, 135 AC, 135 MV errors in B frame&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 2 6f=0/0&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 13 4&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 36 2&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 11 1&#xA;[mpeg2video @ 00000246c56851c0] Invalid mb type in I-frame at 35 11&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 40 9&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 13 19&#xA;[mpeg2video @ 00000246c56851c0] Invalid mb type in I-frame at 42 13&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 14 26&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 28 28&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 22 22&#xA;[mpeg2video @ 00000246c56851c0] mb incr damaged&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 11 23&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 39 7&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 37 10&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 27 20&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 30 27&#xA;[mpeg2video @ 00000246c56851c0] Invalid mb type in I-frame at 8 29&#xA;[mpeg2video @ 00000246c56851c0] skipped MB in I-frame at 25 25&#xA;[mpeg2video @ 00000246c56851c0] Warning MVs not available&#xA;[mpeg2video @ 00000246c56851c0] concealing 900 DC, 900 AC, 900 MV errors in I frame&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 38 0   0B f=0/0&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 12 21&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 34 28&#xA;[mpeg2video @ 00000246c56851c0] slice mismatch&#xA;[mpeg2video @ 00000246c56851c0] slice mismatch9KB sq=    0B f=0/0&#xA;[mpeg2video @ 00000246c56851c0] Warning MVs not available&#xA;[mpeg2video @ 00000246c56851c0] concealing 229 DC, 229 AC, 229 MV errors in B frame&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 40 0&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 12 11&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 30 27&#xA;[mpeg2video @ 00000246c56851c0] end mismatch left=7025 131C07 at 0 30&#xA;[mpeg2video @ 00000246c56851c0] Warning MVs not available0B f=0/0&#xA;[mpeg2video @ 00000246c56851c0] concealing 184 DC, 184 AC, 184 MV errors in P frame&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 15 4&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 44 0&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 38 13&#xA;[mpeg2video @ 00000246c56851c0] slice mismatch&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 2 29&#xA;[mpeg2video @ 00000246c56851c0] Warning MVs not available0B f=0/0&#xA;[mpeg2video @ 00000246c56851c0] concealing 225 DC, 225 AC, 225 MV errors in B frame&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 43 2&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 28 8&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 14 19&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 23 28&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 8 14&#xA;[mpeg2video @ 00000246c56851c0] mb incr damaged&#xA;[mpeg2video @ 00000246c56851c0] end mismatch left=228 7355F3 at 0 30&#xA;[mpeg2video @ 00000246c56851c0] Warning MVs not available&#xA;[mpeg2video @ 00000246c56851c0] concealing 318 DC, 318 AC, 318 MV errors in P frame&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 4 20   0B f=0/0&#xA;[mpeg2video @ 00000246c56851c0] ac-tex damaged at 33 27&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 37 29&#xA;[mpeg2video @ 00000246c56851c0] Warning MVs not available&#xA;[mpeg2video @ 00000246c56851c0] concealing 137 DC, 137 AC, 137 MV errors in B frame&#xA;[mpeg2video @ 00000246c56851c0] slice mismatch&#xA;[mpeg2video @ 00000246c56851c0] 00 motion_type at 16 19&#xA;...&#xA;

    &#xA;

    Are there any decoders or setting which might help in producing a clear decoding of the video ?

    &#xA;

    Is there anything obviously wrong with the raw dump file ?

    &#xA;

  • The Ultimate List of Alternatives to Google Products

    2 août 2022, par Erin — Privacy

    For many businesses, Google products can play an integral part in the productivity, function and even success of the company. This is because Google has designed their digital ecosystem to infiltrate every aspect of your work and personal life at low-to-no cost.

    On the surface, this seems like a no-brainer. Why not have a cost-effective and seamlessly connected tech stack ? It’s the complete package. 

    From Gmail to Google Analytics, it becomes hard to untangle yourself from this intricate web Google has managed to spin. But like a web, you know there’s also a catch.

    This leads us to the big question… Why stop ?

    In this blog, we’ll cover :

    Why de-Google ?

    Google products are convenient and seemingly free. However, in recent years, Google’s name has become synonymous with privacy breaches, data leaks and illegal under the General Data Protection Regulation (GDPR).

    As their track record shows a glaring disregard for data protection, a growing list of EU member countries like Austria, France, Denmark and Italy have banned Google products, such as Google Analytics, Google Workspace and Google Chromebook.

    Google offers free products and services, but not out of altruism. There’s a trade-off. By using Google’s “free” products, your customers’ and your own online activity becomes a commodity that can be sold to advertisers.

    When the risks of using Google products are considered, it becomes clear the need to plot a pathway to de-Google your business. If you’re wondering how in the world to uncoil from this web, fortunately, there are plenty of privacy-friendly, secure alternatives to Google products that you can choose.

    Disclaimer : Below, we’ve tried our best to provide a comprehensive list of alternatives to Google products for businesses, but because you know your business best, we’d also encourage you to do your own research to ensure the tool will suit your unique needs.

    Best Google alternative tools for business

    Overall business tools

    Google Workspace alternatives

    Google Workspace isn’t GDPR compliant by default, so businesses are at risk of fines and reputational damage. More EU countries are reaching the same conclusion that Google products are violating EU law. Data Protection Authorities from Norway and Denmark have deemed Google Workspace illegal in accordance with the GDPR. 

    Nextcloud

    Nextcloud is an open-source and self-hosted productivity platform that offers a suite of services to replace the major features found in Google Workspace, such as Google Drive, Calendar, Docs, Forms and Tasks. 

    You can share files and collaborate without worrying about data being shared with unauthorised individuals or companies. As a self-hosted suite, you’re in full control of where your data is, who has access to it and can comply with the strictest of data protection legislations.

    Nextcloud dashboard
    Zoho

    Zoho is a Google Workspace alternative built on the same principles as Google’s productivity suite. It offers a suite of online office tools, including email, calendar and task management, but with an emphasis on privacy protection. Zoho doesn’t rely on advertising revenue to support their business which means your personal data will never be sold or used for targeted ads. 

    With over 75 million users globally, Zoho offers data encryption at rest and at transit, multi-factor authentication and complies with strict security standards set by HIPAA, the Cloud Security Alliance and the GDPR.

    Zoho dashboard

    Gmail alternatives

    Google only encrypts emails via STARTTLS. In other words, your data isn’t end-to-end encrypted and can be decrypted by them at any time. Gmail also has a history of allowing third-party app developers that work with Gmail to access private and personal Gmail messages for their own market research purposes.

    ProtonMail

    ProtonMail is a secure, open-source email service that provides end-to-end encryption, so only the sender and receiver can access the messages. Proton deliberately doesn’t possess the key needed to decrypt any part of the message, so you know your sensitive business information is always private. 

    To protect users from digital surveillance, they also provide enhanced tracking protections and don’t rely on ads, so your data isn’t mined for advertising purposes. Not only that, you can also sync ProtonMail with a host of other Google alternative products, such as Proton Calendar and Proton Drive.

    Proton Mail
    Mailfence

    Mailfence is a highly secure communications and planning platform that offers a complete email suite, as well as, Documents, a Calendar and Groups. It provides end-to-end encryption and comes with a built-in data loss prevention system that prevents unauthorised access to your sensitive information. 

    Mailfence is completely ad-free and promises to never commercialise its databases or share data with third parties for targeted ads.

    Mailfence
    Tutanota

    Tutanota is an open-source email service known as one of the first to offer end-to-end encryption. It boasts a user-friendly interface and offers a fast, simple and secure email service that works on web and mobile platforms. Stringent security, in addition to TOTP and U2F for two-factor authentication means you control who has access to your email and messages. 

    It requires no phone number or personal information to register for a free account. In addition, Tutanota doesn’t earn money through ads, its servers are based in Europe and it is fully GDPR compliant.

    Google Calendar alternatives

    Calendars can contain a lot of personal information (who you are meeting, location, contact info, etc.), which is well worth keeping private. 

    Proton Calendar

    With Proton Calendar all event details – participants, locations, event names, descriptions and notes are end-to-end encrypted. It has a clean and easy-to-use interface, and you get a full set of advanced features to replace Google Calendar, such as the ability to create events and reminders, add multiple calendars and set up repeating events. You can easily sync all your calendars between mobile and desktop apps.

    Mailfence Calendar

    Mailfence Calendar lets you manage, schedule and track your events and meetings. Similar to Google Calendar, you can invite people to events using their Mailfence email IDs, but it doesn’t track your location or email address.

    Tutanota Calendar

    Tutanota Calendar offers built-in encryption, so no one else can decrypt and read your information.

    You can keep track of your appointments and meetings in a secure environment that only you have access to. You get features, such as day/week/month view, all-day events, recurring events, upcoming events view and shared calendars. You can also sync it with other apps such as Outlook.

    Tutanota calendar event
    Nextcloud Calendar app

    Nextcloud also offers a Calendar app which easily syncs events from different devices with your Nextcloud account. You can integrate it with other Nextcloud apps like Contacts, Talk and Tasks.

    Nextcloud calendar

    Google Drive alternatives

    The GDPR emphasises end-to-end encryption as a safeguard against data leaks, but Google Drive isn’t end-to-end encrypted, so Google has access to the data on its servers. 

    In their privacy policy, they also state that this data can be analysed for advertising purposes, so although you’re using “free” Cloud storage, users need to be aware that they’re paying for this by giving Google access to any and all data stored in Google Drive.

    Proton Drive

    Proton Drive is a secure and private Cloud storage service that provides you with an easy-to-use, customisable and secure file management system.

    It uses end-to-end encryption to secure your data and keep it safe from prying eyes. As you have full control over your data, you can decide how long it’s stored and who has access to it. You can also choose how much of your information is shared with other users.

    Proton Drive
    Nextcloud

    Nextcloud works on your own server, so you can access and share your data wherever you are. It’s a file hosting service that lets you store files, sync them across your devices and collaborate with others on projects. 

    It also provides encryption for all the files that you store on its servers, so you can rest assured that no one can see your information without your permission.

    Nextcloud Drive
    Syncthing

    Syncthing is a free, open-source file synchronisation program that allows you to store and access your files wherever you are. It’s designed to be fast, secure and easy to use, making it a great alternative to Google Drive. 

    With Syncthing, you can sync files across multiple computers and mobile devices at once. So if you create, delete or modify files on one machine, they will automatically be replicated on other devices. Data is saved directly to a location you choose, so you can securely backup your data without needing a third-party cloud service.

    Google Docs alternatives

    Google states they can “collect information” from Google-hosted content such as Docs by means of automated scanning. 

    Not only does this stoke spying fears, it also raises concerns over who holds power over your content. If they look through your docs and decide that you’ve violated their terms of service, you can get locked out of your Google Docs – as was the case when a National Geographic crime reporter had her story “frozen” by Google.

    LibreOffice

    LibreOffice is a free, open-source office suite with all the features you need to create and edit documents, presentations and spreadsheets. It’s compatible with many different languages and all Microsoft Office file formats. 

    Unlike Google Docs, LibreOffice doesn’t store your documents on the Cloud. As it runs on your own computer, you maintain complete control and the data is kept as private and as secure as you wish. LibreOffice also has an online version that works with most web browsers and can be used on Windows, Mac and Linux operating systems. 

    The open-source nature ensures security as the code is constantly improved and scouted for vulnerabilities.

    Nextcloud Office

    Like Google Docs, Nextcloud Office lets you create new documents and spreadsheets and collaborate with teammates or colleagues. But unlike Google Docs, Nextcloud doesn’t collect any data on who is using its platform, or what they’re doing on it. You can even encrypt the files you store in Nextcloud, so no one else can see them unless you give them access to your account.

    Nextcloud Office

    Google Keep alternative

    Standard Notes

    Standard Notes is an open-source online notebook app that offers a variety of useful features, such as tasks, to-dos and spreadsheets. 

    Unlike Google Keep, which has access to your notes, Standard Notes is end-to-end encrypted, which protects all your information and keeps it securely synced across all your devices. Standard Notes supports text, images and audio notes. As open-source software, they value transparency and trust and don’t rely on tracking or intrusive ads.

    Standard notes dashboard

    Google Chrome alternatives

    Google Chrome is notorious for stalking users and collecting information for their own gains. Their browser fuels their data gathering infrastructure by being able to collect info about your search history, location, personal data and product interaction data for “personalisation” purposes – essentially to build a profile of you to sell to advertisers.

    Firefox

    Firefox is one of the most secure browsers for privacy and is trusted by 220 million users. It easily compares with Chrome in terms of ease of use and performance. 

    On top of that it offers enhanced privacy protections, so you get a browser that doesn’t stalk you and isn’t riddled with ads.

    Firefox