Recherche avancée

Médias (1)

Mot : - Tags -/Christian Nold

Autres articles (53)

  • La sauvegarde automatique de canaux SPIP

    1er avril 2010, par

    Dans le cadre de la mise en place d’une plateforme ouverte, il est important pour les hébergeurs de pouvoir disposer de sauvegardes assez régulières pour parer à tout problème éventuel.
    Pour réaliser cette tâche on se base sur deux plugins SPIP : Saveauto qui permet une sauvegarde régulière de la base de donnée sous la forme d’un dump mysql (utilisable dans phpmyadmin) mes_fichiers_2 qui permet de réaliser une archive au format zip des données importantes du site (les documents, les éléments (...)

  • Script d’installation automatique de MediaSPIP

    25 avril 2011, par

    Afin de palier aux difficultés d’installation dues principalement aux dépendances logicielles coté serveur, un script d’installation "tout en un" en bash a été créé afin de faciliter cette étape sur un serveur doté d’une distribution Linux compatible.
    Vous devez bénéficier d’un accès SSH à votre serveur et d’un compte "root" afin de l’utiliser, ce qui permettra d’installer les dépendances. Contactez votre hébergeur si vous ne disposez pas de cela.
    La documentation de l’utilisation du script d’installation (...)

  • Support de tous types de médias

    10 avril 2011

    Contrairement à beaucoup de logiciels et autres plate-formes modernes de partage de documents, MediaSPIP a l’ambition de gérer un maximum de formats de documents différents qu’ils soient de type : images (png, gif, jpg, bmp et autres...) ; audio (MP3, Ogg, Wav et autres...) ; vidéo (Avi, MP4, Ogv, mpg, mov, wmv et autres...) ; contenu textuel, code ou autres (open office, microsoft office (tableur, présentation), web (html, css), LaTeX, Google Earth) (...)

Sur d’autres sites (7687)

  • FFmpeg avcodec_open2 throws -22 ("Invalid Argument")

    14 avril 2023, par stupidbutseeking

    I got stuck trying to write a simple video conversion using C++ and ffmpeg.

    


    When trying to convert a video using FFmpeg, calling avcodec_open2 fails with the code "-22" which seems to be an "Invalid Argument"-error.

    


    I can't figure out why it fails, nor what the invalid argument is. In the following snippet I create the output codec and pass its context the information from the source (code further down below).

    


    The check for the "outputCodec" works and does not throw an error. As far as I know an "AVDictionary"-argument is optional. So I guess the reason for the error is the context.

    


        const AVCodec* outputCodec = avcodec_find_encoder_by_name(codecName.c_str());

    if (!outputCodec)
    {
        std::cout << "Zielformat-Codec nicht gefunden" << std::endl;
        return -1;
    }

    AVCodecContext* outputCodecContext = avcodec_alloc_context3(outputCodec);
    outputCodecContext->bit_rate = bitRate;
    outputCodecContext->width = inputCodecContext->width;
    outputCodecContext->height = inputCodecContext->height;
    outputCodecContext->pix_fmt = outputCodec->pix_fmts[0];
    outputCodecContext->time_base = inputCodecContext->time_base;

    **int errorCode = avcodec_open2(outputCodecContext, outputCodec, NULL); //THIS RETURNS -22**
    if (errorCode != 0)
    {
        std::cout << "Fehler beim Öffnen des Zielformat-Codecs" << std::endl;
        return -1;
    }


    


    Here is the code for getting the input file & context :

    


        std::string inputFilename = "input_video.mp4";
    std::string outputFilename = "output.avi";
    std::string codecName = "mpeg4";
    int bitRate = 400000;

    AVFormatContext* inputFormatContext = NULL;
    if (avformat_open_input(&inputFormatContext, inputFilename.c_str(), NULL, NULL) != 0)
    {
        std::cout << "Fehler beim Öffnen der Eingabedatei" << std::endl;
        return -1;
    }

    [Do Video Stream Search)

    AVCodecParameters* inputCodecParameters = inputFormatContext->streams[videoStreamIndex]->codecpar;
    const AVCodec* inputCodec = avcodec_find_decoder(inputCodecParameters->codec_id);
    AVCodecContext* inputCodecContext = avcodec_alloc_context3(inputCodec);
    if (avcodec_parameters_to_context(inputCodecContext, inputCodecParameters) != 0)
    {
        std::cout << "Fehler beim Setzen des Eingabecodecs" << std::endl;
        return -1;
    }
    if (avcodec_open2(inputCodecContext, inputCodec, NULL) != 0)
    {
        std::cout << "Fehler beim Öffnen des Eingabecodecs" << std::endl;
        return -1;
    }


    


    The purpose was simply to get started with ffmpeg in an own C++ project.

    


    If it is of any need, I downloaded the ffmpeg libs from here. I used the gpl shared ones. The architecture is win x64. I referenced them through the project properties (additional libraries and so on).

    


    I tried to convert a .mp4 video to an .avi video with an "mpeg4" compression.
I also tried other compressions like "libx264" but none worked.

    


    I searched for the problem on stackoverflow but could not find the exact same problem. While its purpose is different this post is about the same error code when calling avcodec_open2. But its solution is not working for me. I inspected the watch for the "outputContext" while running the code and the codec_id, codec_type and format is set. I use the time_base from the input file. According to my understanding, this should be equal to the source. So I can not find out what I am missing.

    


    Thanks in advance and sorry for my english.

    


    And for completion, here is the whole method :

    


    int TestConvert()
{
    std::string inputFilename = "input_video.mp4";
    std::string outputFilename = "output.avi";
    std::string codecName = "mpeg4";
    int bitRate = 400000;

    AVFormatContext* inputFormatContext = NULL;
    if (avformat_open_input(&inputFormatContext, inputFilename.c_str(), NULL, NULL) != 0)
    {
        std::cout << "Fehler beim Öffnen der Eingabedatei" << std::endl;
        return -1;
    }

    int videoStreamIndex = -1;
    for (unsigned int i = 0; i < inputFormatContext->nb_streams; i++)
    {
        if (inputFormatContext->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO)
        {
            videoStreamIndex = i;
            break;
        }
    }

    AVCodecParameters* inputCodecParameters = inputFormatContext->streams[videoStreamIndex]->codecpar;
    const AVCodec* inputCodec = avcodec_find_decoder(inputCodecParameters->codec_id);
    AVCodecContext* inputCodecContext = avcodec_alloc_context3(inputCodec);
    if (avcodec_parameters_to_context(inputCodecContext, inputCodecParameters) != 0)
    {
        std::cout << "Fehler beim Setzen des Eingabecodecs" << std::endl;
        return -1;
    }
    if (avcodec_open2(inputCodecContext, inputCodec, NULL) != 0)
    {
        std::cout << "Fehler beim Öffnen des Eingabecodecs" << std::endl;
        return -1;
    }

    const AVCodec* outputCodec = avcodec_find_encoder_by_name(codecName.c_str());

    if (!outputCodec)
    {
        std::cout << "Zielformat-Codec nicht gefunden" << std::endl;
        return -1;
    }

    AVCodecContext* outputCodecContext = avcodec_alloc_context3(outputCodec);
    outputCodecContext->bit_rate = bitRate;
    outputCodecContext->width = inputCodecContext->width;
    outputCodecContext->height = inputCodecContext->height;
    outputCodecContext->pix_fmt = outputCodec->pix_fmts[0];
    outputCodecContext->time_base = inputCodecContext->time_base;

    int errorCode = avcodec_open2(outputCodecContext, outputCodec, NULL);
    if (errorCode != 0)
    {
        std::cout << "Fehler beim Öffnen des Zielformat-Codecs" << std::endl;
        return -1;
    }

    AVFormatContext* outputFormatContext = NULL;
    if (avformat_alloc_output_context2(&outputFormatContext, NULL, NULL, outputFilename.c_str()) != 0)
    {
        std::cout << "Fehler beim Erstellen des Ausgabe-Formats" << std::endl;
        return -1;
    }

    AVStream* outputVideoStream = avformat_new_stream(outputFormatContext, outputCodec);
    if (outputVideoStream == NULL)
    {
        std::cout << "Fehler beim Hinzufügen des Video-Streams zum Ausgabe-Format" << std::endl;
        return -1;
    }
    outputVideoStream->id = outputFormatContext->nb_streams - 1;
    AVCodecParameters* outputCodecParameters = outputVideoStream->codecpar;
    if (avcodec_parameters_from_context(outputCodecParameters, outputCodecContext) != 0)
    {
        std::cout << "Fehler beim Setzen des Ausgabe-Codecs" << std::endl;
        return -1;
    }

    if (!(outputFormatContext->oformat->flags & AVFMT_NOFILE))
    {
        if (avio_open(&outputFormatContext->pb, outputFilename.c_str(), AVIO_FLAG_WRITE) != 0)
        {
            std::cout << "Fehler beim Öffnen der Ausgabedatei" << std::endl;
            return -1;
        }
    }

    if (avformat_write_header(outputFormatContext, NULL) != 0)
    {
        std::cout << "Fehler beim Schreiben des Ausgabe-Formats in die Ausgabedatei" << std::endl;
        return -1;
    }

    AVPacket packet;
    int response;
    AVFrame* frame = av_frame_alloc();
    AVFrame* outputFrame = av_frame_alloc();
    while (av_read_frame(inputFormatContext, &packet) == 0)
    {
        if (packet.stream_index == videoStreamIndex)
        {
            response = avcodec_send_packet(inputCodecContext, &packet);
            while (response >= 0)
            {
                response = avcodec_receive_frame(inputCodecContext, frame);
                if (response == AVERROR(EAGAIN) || response == AVERROR_EOF)
                {
                    break;
                }
                else if (response < 0)
                {
                    std::cout << "Fehler beim Dekodieren des Video-Pakets" << std::endl;
                    return -1;
                }

                struct SwsContext* swsContext = sws_getContext(inputCodecContext->width, inputCodecContext->height, inputCodecContext->pix_fmt, outputCodecContext->width, outputCodecContext->height, outputCodecContext->pix_fmt, SWS_BILINEAR, NULL, NULL, NULL); if (!swsContext)
                {
                    std::cout << "Fehler beim Erstellen des SwsContext" << std::endl;
                    return -1;
                }
                sws_scale(swsContext, frame->data, frame->linesize, 0, inputCodecContext->height, outputFrame->data, outputFrame->linesize);
                sws_freeContext(swsContext);

                outputFrame->pts = frame->pts;
                outputFrame->pkt_dts = frame->pkt_dts;
                //outputFrame->pkt_duration = frame->pkt_duration;
                response = avcodec_send_frame(outputCodecContext, outputFrame);
                while (response >= 0)
                {
                    response = avcodec_receive_packet(outputCodecContext, &packet);
                    if (response == AVERROR(EAGAIN) || response == AVERROR_EOF)
                    {
                        break;
                    }
                    else if (response < 0)
                    {
                        std::cout << "Fehler beim Kodieren des Ausgabe-Frames" << std::endl;
                        return -1;
                    }

                    packet.stream_index = outputVideoStream->id;
                    av_packet_rescale_ts(&packet, outputCodecContext->time_base, outputVideoStream->time_base);
                    if (av_interleaved_write_frame(outputFormatContext, &packet) != 0)
                    {
                        std::cout << "Fehler beim Schreiben des Ausgabe-Pakets" << std::endl;
                        return -1;
                    }
                    av_packet_unref(&packet);
                }
            }
        }
        av_packet_unref(&packet);
    }

    av_write_trailer(outputFormatContext);
    avcodec_free_context(&inputCodecContext);
    avcodec_free_context(&outputCodecContext);
    avformat_close_input(&inputFormatContext);
    avformat_free_context(inputFormatContext);
    avformat_free_context(outputFormatContext);
    av_frame_free(&frame);
    av_frame_free(&outputFrame);

    return 0;

}


    


  • Using Accord.Video.FFMPEG, I get "parameter is not valid exception". How can I solve it ?

    31 mai 2023, par Sheron Blumental

    I want to extract all the frames from an MP4 video file and display them on a PictureBox.

    


    The original code comes from this Q&A : How can I time the presentation and extraction of frames from a video file ?

    


    The exception happens after clicking the start button on the line :

    


    var frame = videoReader.ReadVideoFrame();


    


    The message

    


    System.ArgumentException&#xA;  HResult=0x80070057&#xA;  Message=Parameter is not valid.&#xA;  Source=System.Drawing&#xA;  StackTrace:&#xA;   at System.Drawing.Bitmap..ctor(Int32 width, Int32 height, PixelFormat format)&#xA;   at Accord.Video.FFMPEG.VideoFileReader.DecodeVideoFrame(BitmapData bitmapData)&#xA;   at Accord.Video.FFMPEG.VideoFileReader.readVideoFrame(Int32 frameIndex, BitmapData output)&#xA;   at Accord.Video.FFMPEG.VideoFileReader.ReadVideoFrame()&#xA;   at Extract_Frames.Form1.<getvideoframesasync>d__15.MoveNext() in D:\Csharp Projects\Extract Frames\Form1.cs:line 114&#xA;   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)&#xA;   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)&#xA;   at System.Runtime.CompilerServices.TaskAwaiter.GetResult()&#xA;   at Extract_Frames.Form1.d__17.MoveNext() in D:\Csharp Projects\Extract Frames\Form1.cs:line 151&#xA;</getvideoframesasync>

    &#xA;

    The full code

    &#xA;

    using Accord.IO;&#xA;using Accord.Video;&#xA;using Accord.Video.FFMPEG;&#xA;using System;&#xA;using System.Collections.Generic;&#xA;using System.ComponentModel;&#xA;using System.Data;&#xA;using System.Drawing;&#xA;using System.IO;&#xA;using System.Linq;&#xA;using System.Reflection;&#xA;using System.Reflection.Emit;&#xA;using System.Text;&#xA;using System.Threading;&#xA;using System.Threading.Tasks;&#xA;using System.Windows.Forms;&#xA;&#xA;namespace Extract_Frames&#xA;{&#xA;    public partial class Form1 : Form&#xA;    {&#xA;        Bitmap frame = null;&#xA;        Graphics frameGraphics = null;&#xA;        bool isVideoRunning = false;&#xA;        IProgress<bitmap> videoProgress = null;&#xA;        private CancellationTokenSource cts = null;&#xA;        private readonly object syncRoot = new object();&#xA;        private static long pause = 0;&#xA;        private int frameRate = 0;&#xA;        private List<bitmap> frames = new List<bitmap>();&#xA;        string fileName;&#xA;&#xA;        public Form1()&#xA;        {&#xA;            InitializeComponent();&#xA;&#xA;        }&#xA;&#xA;        private void Form1_Load(object sender, EventArgs e)&#xA;        {&#xA;&#xA;        }&#xA;&#xA;        private void StopPlayback(bool cancel)&#xA;        {&#xA;            lock (syncRoot)&#xA;            {&#xA;                if (cancel) cts?.Cancel();&#xA;                cts?.Dispose();&#xA;                cts = null;&#xA;            }&#xA;        }&#xA;&#xA;        int counter =1;&#xA;        private void Updater(Bitmap videoFrame)&#xA;        {&#xA;            frames.Add(videoFrame);&#xA;&#xA;            label1.Text = "Current Frame Number : " &#x2B; counter;&#xA;            trackBar1.Value = counter;&#xA;            counter&#x2B;&#x2B;;&#xA;&#xA;            //Size size = new Size(videoFrame.Width, videoFrame.Height);&#xA;            //pictureBox1.ClientSize = size;&#xA;            using (videoFrame) frameGraphics.DrawImage(videoFrame, Point.Empty);&#xA;&#xA;            pictureBox1.Invalidate();&#xA;        }&#xA;&#xA;        private async Task GetVideoFramesAsync(IProgress<bitmap> updater, string fileName, int intervalMs, CancellationToken token = default)&#xA;        {&#xA;            using (var videoReader = new VideoFileReader())&#xA;            {&#xA;                if (token.IsCancellationRequested) return;&#xA;                videoReader.Open(fileName);&#xA;&#xA;                videoReader.ReadVideoFrame(1);&#xA;                trackBar1.Value = 1;&#xA;&#xA;                label1.Text = "Current Frame Number : " &#x2B; counter.ToString();&#xA;&#xA;                while (true)&#xA;                {&#xA;                    if (Interlocked.Read(ref pause) == 0)&#xA;                    {&#xA;                        var frame = videoReader.ReadVideoFrame();&#xA;&#xA;                        if (token.IsCancellationRequested || frame is null) break;&#xA;                        updater.Report(frame);&#xA;                    }&#xA;                    await Task.Delay(frameRate).ConfigureAwait(false);&#xA;                }&#xA;            }&#xA;        }&#xA;&#xA;        private void trackBar2_Scroll(object sender, EventArgs e)&#xA;        {&#xA;            frameRate = trackBar2.Value / 25;&#xA;        }&#xA;&#xA;        private async void buttonStart_Click(object sender, EventArgs e)&#xA;        {&#xA;            string fileName = textBox1.Text;&#xA;&#xA;            if (isVideoRunning) return;&#xA;            isVideoRunning = true;&#xA;&#xA;            using (var videoReader = new VideoFileReader())&#xA;            {&#xA;                videoReader.Open(fileName);&#xA;                frame = new Bitmap(videoReader.Width &#x2B; 2, videoReader.Height &#x2B; 2);&#xA;                trackBar1.Maximum = (int)videoReader.FrameCount;&#xA;            }&#xA;&#xA;            videoProgress = new Progress<bitmap>((bitmap) => Updater(bitmap));&#xA;            cts = new CancellationTokenSource();&#xA;            pictureBox1.Image = frame;&#xA;            try&#xA;            {&#xA;                frameGraphics = Graphics.FromImage(frame);&#xA;                // Set the fame rate to 25 frames per second&#xA;                //int frameRate = 1000 / 25;&#xA;                await GetVideoFramesAsync(videoProgress, fileName, frameRate, cts.Token);&#xA;            }&#xA;            finally&#xA;            {&#xA;                frameGraphics?.Dispose();&#xA;                StopPlayback(false);&#xA;                isVideoRunning = false;&#xA;            }&#xA;        }&#xA;&#xA;        private void buttonPause_Click(object sender, EventArgs e)&#xA;        {&#xA;            if (pause == 0)&#xA;            {&#xA;                buttonPause.Text = "Resume";&#xA;                Interlocked.Increment(ref pause);&#xA;            }&#xA;            else&#xA;            {&#xA;                Interlocked.Decrement(ref pause);&#xA;                buttonPause.Text = "Pause";&#xA;            }&#xA;        }&#xA;&#xA;        private void buttonStop_Click(object sender, EventArgs e)&#xA;        {&#xA;            StopPlayback(true);&#xA;        }&#xA;&#xA;        protected override void OnFormClosing(FormClosingEventArgs e)&#xA;        {&#xA;            if (isVideoRunning) StopPlayback(true);&#xA;            pictureBox1.Image?.Dispose();&#xA;            base.OnFormClosing(e);&#xA;        }&#xA;&#xA;        private void pictureBox1_Paint(object sender, PaintEventArgs e)&#xA;        {&#xA;            ControlPaint.DrawBorder(e.Graphics, pictureBox1.ClientRectangle, Color.Red, ButtonBorderStyle.Solid);&#xA;        }&#xA;&#xA;        private void trackBar1_Scroll(object sender, EventArgs e)&#xA;        {&#xA;            pictureBox1.Image = frames[trackBar1.Value];&#xA;        }&#xA;&#xA;        private void button1_Click(object sender, EventArgs e)&#xA;        {&#xA;            using (OpenFileDialog openFileDialog = new OpenFileDialog())&#xA;            {&#xA;                openFileDialog.InitialDirectory = "c:\\";&#xA;                openFileDialog.Filter = "video files (*.mp4)|*.mp4|All files (*.*)|*.*";&#xA;                openFileDialog.FilterIndex = 2;&#xA;                openFileDialog.RestoreDirectory = true;&#xA;&#xA;                if (openFileDialog.ShowDialog() == DialogResult.OK)&#xA;                {&#xA;                    // Get the path of specified file&#xA;                    textBox1.Text = openFileDialog.FileName;&#xA;                }&#xA;            }&#xA;        }&#xA;    }&#xA;}&#xA;</bitmap></bitmap></bitmap></bitmap></bitmap>

    &#xA;

  • Ffmpeg error "avcodec_send_frame" return "invalid argument"

    17 octobre 2023, par Paulo Coutinho

    I have a problem in function avcodec_send_frame throwing error Error sending frame for encoding: Invalid argument (-22). I already search, check, recheck and nothing. It is near the ffmpeg examples. Can anyone help me ? Thanks.

    &#xA;

    This is my code :

    &#xA;

    static void callbackAddSubtitle(const Message &amp;m, const Response r)&#xA;{&#xA;    try&#xA;    {&#xA;        av_log_set_level(AV_LOG_DEBUG);&#xA;&#xA;        spdlog::debug("[Mapping :: callbackAddSubtitle] Adding subtitle...");&#xA;&#xA;        auto inputOpt = m.get("input");&#xA;        auto outputOpt = m.get("output");&#xA;&#xA;        if (!inputOpt.has_value() || !outputOpt.has_value())&#xA;        {&#xA;            r(std::string{"INVALID-PARAMS"});&#xA;            return;&#xA;        }&#xA;&#xA;        const std::string &amp;input = inputOpt.value();&#xA;        const std::string &amp;output = outputOpt.value();&#xA;&#xA;        // initialize input&#xA;        spdlog::debug("[Mapping :: callbackAddSubtitle] Initializing input video...");&#xA;&#xA;        AVFormatContext *inputFormatCtx = avformat_alloc_context();&#xA;        if (avformat_open_input(&amp;inputFormatCtx, input.c_str(), nullptr, nullptr) != 0)&#xA;        {&#xA;            spdlog::error("Failed to open input");&#xA;            r(std::string{"ERROR-OPEN-INPUT"});&#xA;            return;&#xA;        }&#xA;&#xA;        if (avformat_find_stream_info(inputFormatCtx, nullptr) &lt; 0)&#xA;        {&#xA;            spdlog::error("Failed to find stream information");&#xA;            avformat_close_input(&amp;inputFormatCtx);&#xA;            r(std::string{"ERROR-FIND-STREAM"});&#xA;            return;&#xA;        }&#xA;&#xA;        int videoStreamIndex = av_find_best_stream(inputFormatCtx, AVMEDIA_TYPE_VIDEO, -1, -1, nullptr, 0);&#xA;        if (videoStreamIndex &lt; 0)&#xA;        {&#xA;            spdlog::error("Could not find a video stream");&#xA;            r(std::string{"ERROR-FIND-VIDEO-STREAM"});&#xA;            return;&#xA;        }&#xA;&#xA;        AVRational timeBase = inputFormatCtx->streams[videoStreamIndex]->time_base;&#xA;&#xA;        AVCodecParameters *inputCodecPar = inputFormatCtx->streams[videoStreamIndex]->codecpar;&#xA;        const AVCodec *inputCodec = avcodec_find_decoder(inputCodecPar->codec_id);&#xA;        AVCodecContext *inputCodecCtx = avcodec_alloc_context3(inputCodec);&#xA;&#xA;        avcodec_parameters_to_context(inputCodecCtx, inputCodecPar);&#xA;        avcodec_open2(inputCodecCtx, inputCodec, nullptr);&#xA;&#xA;        // initialize input audio&#xA;        spdlog::debug("[Mapping :: callbackAddSubtitle] Initializing input audio...");&#xA;&#xA;        int audioStreamIndex = av_find_best_stream(inputFormatCtx, AVMEDIA_TYPE_AUDIO, -1, -1, nullptr, 0);&#xA;        if (audioStreamIndex &lt; 0)&#xA;        {&#xA;            spdlog::error("Could not find an audio stream");&#xA;            r(std::string{"ERROR-FIND-AUDIO-STREAM"});&#xA;            return;&#xA;        }&#xA;&#xA;        AVCodecParameters *inputAudioCodecPar = inputFormatCtx->streams[audioStreamIndex]->codecpar;&#xA;        const AVCodec *inputAudioCodec = avcodec_find_decoder(inputAudioCodecPar->codec_id);&#xA;        AVCodecContext *inputAudioCodecCtx = avcodec_alloc_context3(inputAudioCodec);&#xA;&#xA;        avcodec_parameters_to_context(inputAudioCodecCtx, inputAudioCodecPar);&#xA;        avcodec_open2(inputAudioCodecCtx, inputAudioCodec, nullptr);&#xA;&#xA;        // initialize output video&#xA;        spdlog::debug("[Mapping :: callbackAddSubtitle] Initializing output video...");&#xA;&#xA;        AVFormatContext *outputFormatCtx = nullptr;&#xA;        avformat_alloc_output_context2(&amp;outputFormatCtx, nullptr, nullptr, output.c_str());&#xA;        AVStream *outputStream = avformat_new_stream(outputFormatCtx, nullptr);&#xA;&#xA;        AVCodecContext *outputCodecCtx = avcodec_alloc_context3(inputCodec);&#xA;        avcodec_parameters_to_context(outputCodecCtx, inputCodecPar);&#xA;        int retOutVideo = avcodec_open2(outputCodecCtx, inputCodec, nullptr);&#xA;&#xA;        if (retOutVideo &lt; 0)&#xA;        {&#xA;            char err[AV_ERROR_MAX_STRING_SIZE];&#xA;            av_make_error_string(err, AV_ERROR_MAX_STRING_SIZE, retOutVideo);&#xA;            spdlog::error("Failed to initialize output video: {}", err);&#xA;            r(std::string{"ERROR-INIT-OUTPUT-VIDEO"});&#xA;            return;&#xA;        }&#xA;&#xA;        outputStream->codecpar->codec_type = AVMEDIA_TYPE_VIDEO;&#xA;        outputStream->codecpar->codec_id = inputCodec->id;&#xA;        avcodec_parameters_from_context(outputStream->codecpar, outputCodecCtx);&#xA;&#xA;        if (!(outputFormatCtx->oformat->flags &amp; AVFMT_NOFILE))&#xA;        {&#xA;            avio_open(&amp;outputFormatCtx->pb, output.c_str(), AVIO_FLAG_WRITE);&#xA;        }&#xA;&#xA;        const char *pixelFormatName = getPixelFormatName(outputCodecCtx->pix_fmt);&#xA;        spdlog::debug("Pixel Format: {}", pixelFormatName);&#xA;&#xA;        // initialize output audio&#xA;        spdlog::debug("[Mapping :: callbackAddSubtitle] Initializing output audio...");&#xA;&#xA;        AVStream *outputAudioStream = avformat_new_stream(outputFormatCtx, nullptr);&#xA;        AVCodecContext *outputAudioCodecCtx = avcodec_alloc_context3(inputAudioCodec);&#xA;        avcodec_parameters_to_context(outputAudioCodecCtx, inputAudioCodecPar);&#xA;        int retOutAudio = avcodec_open2(outputAudioCodecCtx, inputAudioCodec, nullptr);&#xA;&#xA;        if (retOutAudio &lt; 0)&#xA;        {&#xA;            char err[AV_ERROR_MAX_STRING_SIZE];&#xA;            av_make_error_string(err, AV_ERROR_MAX_STRING_SIZE, retOutAudio);&#xA;            spdlog::error("Failed to initialize output audio: {}", err);&#xA;            r(std::string{"ERROR-INIT-OUTPUT-AUDIO"});&#xA;            return;&#xA;        }&#xA;&#xA;        outputAudioStream->codecpar->codec_type = AVMEDIA_TYPE_AUDIO;&#xA;        outputAudioStream->codecpar->codec_id = inputAudioCodec->id;&#xA;        avcodec_parameters_from_context(outputAudioStream->codecpar, outputAudioCodecCtx);&#xA;&#xA;        // initialize filters&#xA;        spdlog::debug("[Mapping :: callbackAddSubtitle] Initializing filters...");&#xA;&#xA;        AVFilterGraph *filterGraph = avfilter_graph_alloc();&#xA;        if (!filterGraph)&#xA;        {&#xA;            spdlog::error("Failed to allocate filter graph");&#xA;            r(std::string{"ERROR-FILTER-GRAPH"});&#xA;            return;&#xA;        }&#xA;&#xA;        AVFilterContext *bufferSinkCtx;&#xA;        AVFilterContext *bufferSrcCtx;&#xA;&#xA;        const AVFilter *bufferSink = avfilter_get_by_name("buffersink");&#xA;        const AVFilter *bufferSrc = avfilter_get_by_name("buffer");&#xA;&#xA;        // input filter&#xA;        char filterInArgs[512];&#xA;        snprintf(filterInArgs, sizeof(filterInArgs), "video_size=%dx%d:pix_fmt=%d:time_base=%d/%d:pixel_aspect=%d/%d", inputCodecPar->width, inputCodecPar->height, inputCodecCtx->pix_fmt, timeBase.num, timeBase.den, inputCodecCtx->sample_aspect_ratio.num, inputCodecCtx->sample_aspect_ratio.den);&#xA;&#xA;        spdlog::debug("[Mapping :: callbackAddSubtitle] Buffer src args: {}", filterInArgs);&#xA;&#xA;        int retFilterIn = avfilter_graph_create_filter(&amp;bufferSrcCtx, bufferSrc, "in", filterInArgs, nullptr, filterGraph);&#xA;        if (retFilterIn &lt; 0)&#xA;        {&#xA;            char err[AV_ERROR_MAX_STRING_SIZE];&#xA;            av_make_error_string(err, AV_ERROR_MAX_STRING_SIZE, retFilterIn);&#xA;            spdlog::error("Failed to create bufferSrcCtx: {}", err);&#xA;            r(std::string{"ERROR-CREATE-FILTER-SRC"});&#xA;            return;&#xA;        }&#xA;&#xA;        // output filter&#xA;        int retFilterOut = avfilter_graph_create_filter(&amp;bufferSinkCtx, bufferSink, "out", nullptr, nullptr, filterGraph);&#xA;&#xA;        if (retFilterOut &lt; 0)&#xA;        {&#xA;            char err[AV_ERROR_MAX_STRING_SIZE];&#xA;            av_make_error_string(err, AV_ERROR_MAX_STRING_SIZE, retFilterOut);&#xA;            spdlog::error("Failed to create bufferSinkCtx: {}", err);&#xA;            r(std::string{"ERROR-CREATE-FILTER-SINK"});&#xA;            return;&#xA;        }&#xA;&#xA;        enum AVPixelFormat pix_fmts[] = {AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE};&#xA;        av_opt_set_int_list(bufferSinkCtx, "pix_fmts", pix_fmts, AV_PIX_FMT_NONE, AV_OPT_SEARCH_CHILDREN);&#xA;&#xA;        // add filters to graph and link them&#xA;        const char *filterSpec = "drawtext=text=&#x27;Legenda Adicionada Automaticamente Via FFMPEG e C&#x2B;&#x2B;&#x27;: fontcolor=yellow: bordercolor=black: fontfile=&#x27;/Users/paulo/Downloads/roboto/Roboto-Black.ttf&#x27;";&#xA;        const AVFilter *filter = avfilter_get_by_name("drawtext");&#xA;&#xA;        AVFilterInOut *outputs = avfilter_inout_alloc();&#xA;        AVFilterInOut *inputs = avfilter_inout_alloc();&#xA;&#xA;        outputs->name = av_strdup("in");&#xA;        outputs->filter_ctx = bufferSrcCtx;&#xA;        outputs->pad_idx = 0;&#xA;        outputs->next = nullptr;&#xA;        inputs->name = av_strdup("out");&#xA;        inputs->filter_ctx = bufferSinkCtx;&#xA;        inputs->pad_idx = 0;&#xA;        inputs->next = nullptr;&#xA;&#xA;        if (avfilter_graph_parse_ptr(filterGraph, filterSpec, &amp;inputs, &amp;outputs, nullptr) &lt; 0)&#xA;        {&#xA;            spdlog::error("Failed to parse filter graph");&#xA;            r(std::string{"ERROR-PARSE-FILTER"});&#xA;            return;&#xA;        }&#xA;&#xA;        if (avfilter_graph_config(filterGraph, nullptr) &lt; 0)&#xA;        {&#xA;            spdlog::error("Failed to configure filter graph");&#xA;            r(std::string{"ERROR-CONFIG-FILTER"});&#xA;            return;&#xA;        }&#xA;&#xA;        // header&#xA;        spdlog::debug("[Mapping :: callbackAddSubtitle] Writing header...");&#xA;&#xA;        if (avformat_write_header(outputFormatCtx, nullptr) &lt; 0)&#xA;        {&#xA;            spdlog::error("Error writing header");&#xA;            r(std::string{"ERROR-WRITE-HEADER"});&#xA;            return;&#xA;        }&#xA;&#xA;        // read frames and write to output&#xA;        AVPacket *packet = av_packet_alloc();&#xA;        AVFrame *frame = av_frame_alloc();&#xA;&#xA;        frame->format = inputCodecCtx->pix_fmt;&#xA;        frame->width = inputCodecCtx->width;&#xA;        frame->height = inputCodecCtx->height;&#xA;&#xA;        AVFrame *filt_frame = av_frame_alloc();&#xA;&#xA;        filt_frame->format = inputCodecCtx->pix_fmt;&#xA;        filt_frame->width = inputCodecCtx->width;&#xA;        filt_frame->height = inputCodecCtx->height;&#xA;&#xA;        while (av_read_frame(inputFormatCtx, packet) >= 0)&#xA;        {&#xA;            if (packet->stream_index == videoStreamIndex)&#xA;            {&#xA;                if (avcodec_send_packet(inputCodecCtx, packet) &lt; 0)&#xA;                {&#xA;                    spdlog::error("Error sending packet for decoding");&#xA;                    r(std::string{"ERROR-SEND-PACKET-DECODE"});&#xA;                    return;&#xA;                }&#xA;&#xA;                while (avcodec_receive_frame(inputCodecCtx, frame) == 0)&#xA;                {&#xA;                    // Envia o quadro decodificado para o gr&#xE1;fico de filtro&#xA;                    if (av_buffersrc_add_frame_flags(bufferSrcCtx, frame, AV_BUFFERSRC_FLAG_KEEP_REF) &lt; 0)&#xA;                    {&#xA;                        spdlog::error("Error while feeding the filtergraph");&#xA;                        r(std::string{"ERROR-FEED-FILTERGRAPH"});&#xA;                        return;&#xA;                    }&#xA;&#xA;                    // Recebe um quadro do gr&#xE1;fico de filtro&#xA;                    if (av_buffersink_get_frame(bufferSinkCtx, filt_frame) &lt; 0)&#xA;                    {&#xA;                        spdlog::error("Error while receiving the filtered frame");&#xA;                        r(std::string{"ERROR-RECEIVE-FILTERED-FRAME"});&#xA;                        return;&#xA;                    }&#xA;&#xA;                    // Envia o quadro decodificado para re-codifica&#xE7;&#xE3;o&#xA;                    int retSendFrame = avcodec_send_frame(outputCodecCtx, filt_frame);&#xA;                    if (retSendFrame &lt; 0)&#xA;                    {&#xA;                        char err[AV_ERROR_MAX_STRING_SIZE];&#xA;                        av_make_error_string(err, AV_ERROR_MAX_STRING_SIZE, retSendFrame);&#xA;                        spdlog::error("Error sending frame for encoding: {}", err);&#xA;                        r(std::string{"ERROR-SEND-FRAME-ENCODE"});&#xA;                        return;&#xA;                    }&#xA;&#xA;                    AVPacket *output_packet = av_packet_alloc();&#xA;                    output_packet->data = nullptr;&#xA;                    output_packet->size = 0;&#xA;&#xA;                    // Re-codifica filt_frame para um pacote&#xA;                    if (avcodec_receive_packet(outputCodecCtx, output_packet) == 0)&#xA;                    {&#xA;                        // Escreve o pacote no fluxo de sa&#xED;da&#xA;                        av_write_frame(outputFormatCtx, output_packet);&#xA;                        av_packet_unref(output_packet);&#xA;                    }&#xA;&#xA;                    av_frame_unref(filt_frame);&#xA;                }&#xA;&#xA;                // time&#xA;                packet->pts = av_rescale_q_rnd(packet->pts, inputFormatCtx->streams[videoStreamIndex]->time_base, outputFormatCtx->streams[videoStreamIndex]->time_base, (AVRounding)(AV_ROUND_NEAR_INF | AV_ROUND_PASS_MINMAX));&#xA;                packet->dts = av_rescale_q_rnd(packet->dts, inputFormatCtx->streams[videoStreamIndex]->time_base, outputFormatCtx->streams[videoStreamIndex]->time_base, (AVRounding)(AV_ROUND_NEAR_INF | AV_ROUND_PASS_MINMAX));&#xA;                packet->duration = av_rescale_q(packet->duration, inputFormatCtx->streams[videoStreamIndex]->time_base, outputFormatCtx->streams[videoStreamIndex]->time_base);&#xA;                packet->stream_index = videoStreamIndex;&#xA;&#xA;                // write packet to output video stream&#xA;                av_interleaved_write_frame(outputFormatCtx, packet);&#xA;            }&#xA;            else if (packet->stream_index == audioStreamIndex)&#xA;            {&#xA;                // rescale timestamps&#xA;                packet->pts = av_rescale_q_rnd(packet->pts, inputFormatCtx->streams[audioStreamIndex]->time_base, outputFormatCtx->streams[audioStreamIndex]->time_base, (AVRounding)(AV_ROUND_NEAR_INF | AV_ROUND_PASS_MINMAX));&#xA;                packet->dts = av_rescale_q_rnd(packet->dts, inputFormatCtx->streams[audioStreamIndex]->time_base, outputFormatCtx->streams[audioStreamIndex]->time_base, (AVRounding)(AV_ROUND_NEAR_INF | AV_ROUND_PASS_MINMAX));&#xA;                packet->duration = av_rescale_q(packet->duration, inputFormatCtx->streams[audioStreamIndex]->time_base, outputFormatCtx->streams[audioStreamIndex]->time_base);&#xA;                packet->stream_index = audioStreamIndex;&#xA;&#xA;                // write packet to output audio stream&#xA;                av_interleaved_write_frame(outputFormatCtx, packet);&#xA;            }&#xA;&#xA;            av_packet_unref(packet);&#xA;        }&#xA;&#xA;        av_packet_free(&amp;packet);&#xA;        av_frame_free(&amp;frame);&#xA;        av_frame_free(&amp;filt_frame);&#xA;&#xA;        spdlog::debug("[Mapping :: callbackAddSubtitle] Writing trailer...");&#xA;&#xA;        if (av_write_trailer(outputFormatCtx) &lt; 0)&#xA;        {&#xA;            spdlog::error("Error writing trailer");&#xA;            r(std::string{"ERROR-WRITE-TRAILER"});&#xA;            return;&#xA;        }&#xA;&#xA;        // cleanup&#xA;        spdlog::debug("[Mapping :: callbackAddSubtitle] Cleaning...");&#xA;&#xA;        if (!(outputFormatCtx->oformat->flags &amp; AVFMT_NOFILE))&#xA;        {&#xA;            avio_closep(&amp;outputFormatCtx->pb);&#xA;        }&#xA;&#xA;        avcodec_free_context(&amp;inputCodecCtx);&#xA;        avcodec_free_context(&amp;inputAudioCodecCtx);&#xA;        avcodec_free_context(&amp;outputCodecCtx);&#xA;        avcodec_free_context(&amp;outputAudioCodecCtx);&#xA;&#xA;        avformat_free_context(inputFormatCtx);&#xA;        avformat_free_context(outputFormatCtx);&#xA;&#xA;        r(std::string{"OK"});&#xA;    }&#xA;    catch (const std::exception &amp;e)&#xA;    {&#xA;        spdlog::error("Error: {}", e.what());&#xA;        r(std::string{"ERROR"});&#xA;    }&#xA;}&#xA;

    &#xA;

    The error is :

    &#xA;

    [2023-10-17 06:30:16.936] [debug] [Mapping :: callbackAddSubtitle] Adding subtitle...&#xA;[2023-10-17 06:30:16.936] [debug] [Mapping :: callbackAddSubtitle] Initializing input video...&#xA;[NULL @ 0x153604a60] Opening &#x27;/Users/paulo/Downloads/movie.mp4&#x27; for reading&#xA;[file @ 0x6000001fd170] Setting default whitelist &#x27;file,crypto,data&#x27;&#xA;[mov,mp4,m4a,3gp,3g2,mj2 @ 0x153604a60] Format mov,mp4,m4a,3gp,3g2,mj2 probed with size=2048 and score=100&#xA;[mov,mp4,m4a,3gp,3g2,mj2 @ 0x153604a60] ISO: File Type Major Brand: isom&#xA;[mov,mp4,m4a,3gp,3g2,mj2 @ 0x153604a60] Unknown dref type 0x206c7275 size 12&#xA;[mov,mp4,m4a,3gp,3g2,mj2 @ 0x153604a60] Processing st: 0, edit list 0 - media time: 0, duration: 2669670&#xA;[mov,mp4,m4a,3gp,3g2,mj2 @ 0x153604a60] Unknown dref type 0x206c7275 size 12&#xA;[mov,mp4,m4a,3gp,3g2,mj2 @ 0x153604a60] Processing st: 1, edit list 0 - media time: 1024, duration: 4272096&#xA;[mov,mp4,m4a,3gp,3g2,mj2 @ 0x153604a60] drop a frame at curr_cts: 0 @ 0&#xA;[mov,mp4,m4a,3gp,3g2,mj2 @ 0x153604a60] Before avformat_find_stream_info() pos: 113542488 bytes read:110788 seeks:1 nb_streams:2&#xA;[h264 @ 0x153604cd0] nal_unit_type: 7(SPS), nal_ref_idc: 3&#xA;[h264 @ 0x153604cd0] Decoding VUI&#xA;[h264 @ 0x153604cd0] nal_unit_type: 8(PPS), nal_ref_idc: 3&#xA;[mov,mp4,m4a,3gp,3g2,mj2 @ 0x153604a60] demuxer injecting skip 1024 / discard 0&#xA;[aac @ 0x1536056f0] skip 1024 / discard 0 samples due to side data&#xA;[h264 @ 0x153604cd0] nal_unit_type: 7(SPS), nal_ref_idc: 3&#xA;[h264 @ 0x153604cd0] Decoding VUI&#xA;[h264 @ 0x153604cd0] nal_unit_type: 8(PPS), nal_ref_idc: 3&#xA;[h264 @ 0x153604cd0] nal_unit_type: 6(SEI), nal_ref_idc: 0&#xA;[h264 @ 0x153604cd0] nal_unit_type: 5(IDR), nal_ref_idc: 3&#xA;[h264 @ 0x153604cd0] Format yuv420p chosen by get_format().&#xA;[h264 @ 0x153604cd0] Reinit context to 1088x1920, pix_fmt: yuv420p&#xA;[mov,mp4,m4a,3gp,3g2,mj2 @ 0x153604a60] All info found&#xA;[mov,mp4,m4a,3gp,3g2,mj2 @ 0x153604a60] After avformat_find_stream_info() pos: 195211 bytes read:305951 seeks:2 frames:2&#xA;[2023-10-17 06:30:18.160] [debug] [Mapping :: callbackAddSubtitle] Initializing input audio...&#xA;[h264 @ 0x143604330] nal_unit_type: 7(SPS), nal_ref_idc: 3&#xA;[h264 @ 0x143604330] Decoding VUI&#xA;[h264 @ 0x143604330] nal_unit_type: 8(PPS), nal_ref_idc: 3&#xA;[2023-10-17 06:30:18.160] [debug] [Mapping :: callbackAddSubtitle] Initializing output video...&#xA;[h264 @ 0x143611ec0] nal_unit_type: 7(SPS), nal_ref_idc: 3&#xA;[h264 @ 0x143611ec0] Decoding VUI&#xA;[h264 @ 0x143611ec0] nal_unit_type: 8(PPS), nal_ref_idc: 3&#xA;[file @ 0x6000001f4000] Setting default whitelist &#x27;file,crypto,data&#x27;&#xA;[2023-10-17 06:30:18.167] [debug] Pixel Format: YUV420P&#xA;[2023-10-17 06:30:18.167] [debug] [Mapping :: callbackAddSubtitle] Initializing output audio...&#xA;[2023-10-17 06:30:18.167] [debug] [Mapping :: callbackAddSubtitle] Initializing filters...&#xA;[2023-10-17 06:30:18.168] [debug] [Mapping :: callbackAddSubtitle] Buffer src args: video_size=1080x1920:pix_fmt=0:time_base=1/30000:pixel_aspect=1/1&#xA;detected 10 logical cores&#xA;[in @ 0x6000004ec0b0] Setting &#x27;video_size&#x27; to value &#x27;1080x1920&#x27;&#xA;[in @ 0x6000004ec0b0] Setting &#x27;pix_fmt&#x27; to value &#x27;0&#x27;&#xA;[in @ 0x6000004ec0b0] Setting &#x27;time_base&#x27; to value &#x27;1/30000&#x27;&#xA;[in @ 0x6000004ec0b0] Setting &#x27;pixel_aspect&#x27; to value &#x27;1/1&#x27;&#xA;[in @ 0x6000004ec0b0] w:1080 h:1920 pixfmt:yuv420p tb:1/30000 fr:0/1 sar:1/1&#xA;[AVFilterGraph @ 0x6000017e8000] Setting &#x27;text&#x27; to value &#x27;Legenda Adicionada Automaticamente Via FFMPEG e C&#x2B;&#x2B;&#x27;&#xA;[AVFilterGraph @ 0x6000017e8000] Setting &#x27;fontcolor&#x27; to value &#x27;yellow&#x27;&#xA;[AVFilterGraph @ 0x6000017e8000] Setting &#x27;bordercolor&#x27; to value &#x27;black&#x27;&#xA;[AVFilterGraph @ 0x6000017e8000] Setting &#x27;fontfile&#x27; to value &#x27;/Users/paulo/Downloads/roboto/Roboto-Black.ttf&#x27;&#xA;[AVFilterGraph @ 0x6000017e8000] query_formats: 3 queried, 2 merged, 0 already done, 0 delayed&#xA;[2023-10-17 06:30:18.172] [debug] [Mapping :: callbackAddSubtitle] Writing header...&#xA;[h264 @ 0x143604330] nal_unit_type: 6(SEI), nal_ref_idc: 0&#xA;[h264 @ 0x143604330] nal_unit_type: 5(IDR), nal_ref_idc: 3&#xA;[h264 @ 0x143604330] Format yuv420p chosen by get_format().&#xA;[h264 @ 0x143604330] Reinit context to 1088x1920, pix_fmt: yuv420p&#xA;[Parsed_drawtext_0 @ 0x6000004f4160] Copying data in avfilter.&#xA;[Parsed_drawtext_0 @ 0x6000004f4160] n:0 t:0.000000 text_w:424 text_h:16 x:0 y:0&#xA;[2023-10-17 06:30:18.182] [error] Error sending frame for encoding: Invalid argument&#xA;Returned Value: ERROR-SEND-FRAME-ENCODE&#xA;

    &#xA;