Recherche avancée

Médias (0)

Mot : - Tags -/protocoles

Aucun média correspondant à vos critères n’est disponible sur le site.

Autres articles (71)

  • Des sites réalisés avec MediaSPIP

    2 mai 2011, par

    Cette page présente quelques-uns des sites fonctionnant sous MediaSPIP.
    Vous pouvez bien entendu ajouter le votre grâce au formulaire en bas de page.

  • Librairies et binaires spécifiques au traitement vidéo et sonore

    31 janvier 2010, par

    Les logiciels et librairies suivantes sont utilisées par SPIPmotion d’une manière ou d’une autre.
    Binaires obligatoires FFMpeg : encodeur principal, permet de transcoder presque tous les types de fichiers vidéo et sonores dans les formats lisibles sur Internet. CF ce tutoriel pour son installation ; Oggz-tools : outils d’inspection de fichiers ogg ; Mediainfo : récupération d’informations depuis la plupart des formats vidéos et sonores ;
    Binaires complémentaires et facultatifs flvtool2 : (...)

  • Possibilité de déploiement en ferme

    12 avril 2011, par

    MediaSPIP peut être installé comme une ferme, avec un seul "noyau" hébergé sur un serveur dédié et utilisé par une multitude de sites différents.
    Cela permet, par exemple : de pouvoir partager les frais de mise en œuvre entre plusieurs projets / individus ; de pouvoir déployer rapidement une multitude de sites uniques ; d’éviter d’avoir à mettre l’ensemble des créations dans un fourre-tout numérique comme c’est le cas pour les grandes plate-formes tout public disséminées sur le (...)

Sur d’autres sites (5991)

  • 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
  • ffmpeg : libavformat/libswresample to transcode and resample at same time

    21 février 2024, par whatdoido

    I want to transcode and down/re-sample the audio for output using ffmpeg's libav*/libswresample - I am using ffmpeg's (4.x) transcode_aac.c and resample_audio.c as reference - but the code produces audio with glitches that is clearly not what ffmpeg itself would produce (ie ffmpeg -i foo.wav -ar 22050 foo.m4a)

    


    Based on the ffmpeg examples, to resample audio it appears that I need to set the output AVAudioContext and SwrContext sample_rate to what I desire and ensure the swr_convert() is provided with the correct number of output samples based av_rescale_rnd( swr_delay(), ...) once I have an decoded input audio. I've taken care to ensure all the relevant calculations of samples for output are taken into account in the merged code (below) :

    


      

    • open_output_file() - AVCodecContext.sample_rate (avctx variable) set to our target (down sampled) sample_rate
    • 


    • read_decode_convert_and_store() is where the work happens : input audio is decoded to an AVFrame and this input frame is converted before being encoded.

        

      • init_converted_samples() and av_samples_alloc() uses the input frame's nb_samples
      • 


      • ADDED : calc the number of output samples via av_rescale_rnd() and swr_delay()
      • 


      • UPDATED : convert_samples() and swr_convert() uses the input frame's samples and our calculated output samples as parameters
      • 


      


    • 


    


    However the resulting audio file is produced with audio glitches. Does the community know of any references for how transcode AND resample should be done or what is missing in this example ?

    


        /* compile and run:&#xA;         gcc -I/usr/include/ffmpeg  transcode-swr-aac.c  -lavformat -lavutil -lavcodec -lswresample -lm&#xA;         ./a.out foo.wav foo.m4a&#xA;    */&#xA;&#xA;/*&#xA; * Copyright (c) 2013-2018 Andreas Unterweger&#xA; *  &#xA; * This file is part of FFmpeg.                                                 &#xA; ...                                                                       ...&#xA; *   &#xA; * @example transcode_aac.c                                                    &#xA; * Convert an input audio file to AAC in an MP4 container using FFmpeg.         &#xA; * Formats other than MP4 are supported based on the output file extension.                            &#xA; * @author Andreas Unterweger (xxxx@xxxxx.com)&#xA; */  &#xA;    #include &#xA; &#xA;&#xA;    #include "libavformat/avformat.h"&#xA;    #include "libavformat/avio.h"&#xA;    &#xA;    #include "libavcodec/avcodec.h"&#xA;    &#xA;    #include "libavutil/audio_fifo.h"&#xA;    #include "libavutil/avassert.h"&#xA;    #include "libavutil/avstring.h"&#xA;    #include "libavutil/channel_layout.h"&#xA;    #include "libavutil/frame.h"&#xA;    #include "libavutil/opt.h"&#xA;    &#xA;    #include "libswresample/swresample.h"&#xA;    &#xA;    #define OUTPUT_BIT_RATE 128000&#xA;    #define OUTPUT_CHANNELS 2&#xA;    &#xA;    static int open_input_file(const char *filename,&#xA;                               AVFormatContext **input_format_context,&#xA;                               AVCodecContext **input_codec_context)&#xA;    {&#xA;        AVCodecContext *avctx;&#xA;        const AVCodec *input_codec;&#xA;        const AVStream *stream;&#xA;        int error;&#xA;    &#xA;        if ((error = avformat_open_input(input_format_context, filename, NULL,&#xA;                                         NULL)) &lt; 0) {&#xA;            fprintf(stderr, "Could not open input file &#x27;%s&#x27; (error &#x27;%s&#x27;)\n",&#xA;                    filename, av_err2str(error));&#xA;            *input_format_context = NULL;&#xA;            return error;&#xA;        }&#xA;    &#xA;&#xA;        if ((error = avformat_find_stream_info(*input_format_context, NULL)) &lt; 0) {&#xA;            fprintf(stderr, "Could not open find stream info (error &#x27;%s&#x27;)\n",&#xA;                    av_err2str(error));&#xA;            avformat_close_input(input_format_context);&#xA;            return error;&#xA;        }&#xA;    &#xA;        if ((*input_format_context)->nb_streams != 1) {&#xA;            fprintf(stderr, "Expected one audio input stream, but found %d\n",&#xA;                    (*input_format_context)->nb_streams);&#xA;            avformat_close_input(input_format_context);&#xA;            return AVERROR_EXIT;&#xA;        }&#xA;    &#xA;        stream = (*input_format_context)->streams[0];&#xA;    &#xA;        if (!(input_codec = avcodec_find_decoder(stream->codecpar->codec_id))) {&#xA;            fprintf(stderr, "Could not find input codec\n");&#xA;            avformat_close_input(input_format_context);&#xA;            return AVERROR_EXIT;&#xA;        }&#xA;    &#xA;        avctx = avcodec_alloc_context3(input_codec);&#xA;        if (!avctx) {&#xA;            fprintf(stderr, "Could not allocate a decoding context\n");&#xA;            avformat_close_input(input_format_context);&#xA;            return AVERROR(ENOMEM);&#xA;        }&#xA;    &#xA;        /* Initialize the stream parameters with demuxer information. */&#xA;        error = avcodec_parameters_to_context(avctx, stream->codecpar);&#xA;        if (error &lt; 0) {&#xA;            avformat_close_input(input_format_context);&#xA;            avcodec_free_context(&amp;avctx);&#xA;            return error;&#xA;        }&#xA;    &#xA;        /* Open the decoder for the audio stream to use it later. */&#xA;        if ((error = avcodec_open2(avctx, input_codec, NULL)) &lt; 0) {&#xA;            fprintf(stderr, "Could not open input codec (error &#x27;%s&#x27;)\n",&#xA;                    av_err2str(error));&#xA;            avcodec_free_context(&amp;avctx);&#xA;            avformat_close_input(input_format_context);&#xA;            return error;&#xA;        }&#xA;    &#xA;        /* Set the packet timebase for the decoder. */&#xA;        avctx->pkt_timebase = stream->time_base;&#xA;    &#xA;        /* Save the decoder context for easier access later. */&#xA;        *input_codec_context = avctx;&#xA;    &#xA;        return 0;&#xA;    }&#xA;    &#xA;    static int open_output_file(const char *filename,&#xA;                                AVCodecContext *input_codec_context,&#xA;                                AVFormatContext **output_format_context,&#xA;                                AVCodecContext **output_codec_context)&#xA;    {&#xA;        AVCodecContext *avctx          = NULL;&#xA;        AVIOContext *output_io_context = NULL;&#xA;        AVStream *stream               = NULL;&#xA;        const AVCodec *output_codec    = NULL;&#xA;        int error;&#xA;    &#xA;&#xA;        if ((error = avio_open(&amp;output_io_context, filename,&#xA;                               AVIO_FLAG_WRITE)) &lt; 0) {&#xA;            fprintf(stderr, "Could not open output file &#x27;%s&#x27; (error &#x27;%s&#x27;)\n",&#xA;                    filename, av_err2str(error));&#xA;            return error;&#xA;        }&#xA;    &#xA;&#xA;        if (!(*output_format_context = avformat_alloc_context())) {&#xA;            fprintf(stderr, "Could not allocate output format context\n");&#xA;            return AVERROR(ENOMEM);&#xA;        }&#xA;    &#xA;&#xA;        (*output_format_context)->pb = output_io_context;&#xA;    &#xA;&#xA;        if (!((*output_format_context)->oformat = av_guess_format(NULL, filename,&#xA;                                                                  NULL))) {&#xA;            fprintf(stderr, "Could not find output file format\n");&#xA;            goto cleanup;&#xA;        }&#xA;    &#xA;        if (!((*output_format_context)->url = av_strdup(filename))) {&#xA;            fprintf(stderr, "Could not allocate url.\n");&#xA;            error = AVERROR(ENOMEM);&#xA;            goto cleanup;&#xA;        }&#xA;    &#xA;&#xA;        if (!(output_codec = avcodec_find_encoder(AV_CODEC_ID_AAC))) {&#xA;            fprintf(stderr, "Could not find an AAC encoder.\n");&#xA;            goto cleanup;&#xA;        }&#xA;    &#xA;        /* Create a new audio stream in the output file container. */&#xA;        if (!(stream = avformat_new_stream(*output_format_context, NULL))) {&#xA;            fprintf(stderr, "Could not create new stream\n");&#xA;            error = AVERROR(ENOMEM);&#xA;            goto cleanup;&#xA;        }&#xA;    &#xA;        avctx = avcodec_alloc_context3(output_codec);&#xA;        if (!avctx) {&#xA;            fprintf(stderr, "Could not allocate an encoding context\n");&#xA;            error = AVERROR(ENOMEM);&#xA;            goto cleanup;&#xA;        }&#xA;    &#xA;   /* Set the basic encoder parameters.&#xA;    * SET OUR DESIRED output sample_rate here&#xA;    */&#xA;        avctx->channels       = OUTPUT_CHANNELS;&#xA;        avctx->channel_layout = av_get_default_channel_layout(OUTPUT_CHANNELS);&#xA;        // avctx->sample_rate    = input_codec_context->sample_rate;&#xA;        avctx->sample_rate    = 22050;&#xA;        avctx->sample_fmt     = output_codec->sample_fmts[0];&#xA;        avctx->bit_rate       = OUTPUT_BIT_RATE;&#xA;    &#xA;        avctx->strict_std_compliance = FF_COMPLIANCE_EXPERIMENTAL;&#xA;    &#xA;        /* Set the sample rate for the container. */&#xA;        stream->time_base.den = avctx->sample_rate;&#xA;        stream->time_base.num = 1;&#xA;    &#xA;        if ((*output_format_context)->oformat->flags &amp; AVFMT_GLOBALHEADER)&#xA;            avctx->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;&#xA;    &#xA;        if ((error = avcodec_open2(avctx, output_codec, NULL)) &lt; 0) {&#xA;            fprintf(stderr, "Could not open output codec (error &#x27;%s&#x27;)\n",&#xA;                    av_err2str(error));&#xA;            goto cleanup;&#xA;        }&#xA;    &#xA;        error = avcodec_parameters_from_context(stream->codecpar, avctx);&#xA;        if (error &lt; 0) {&#xA;            fprintf(stderr, "Could not initialize stream parameters\n");&#xA;            goto cleanup;&#xA;        }&#xA;    &#xA;        /* Save the encoder context for easier access later. */&#xA;        *output_codec_context = avctx;&#xA;    &#xA;        return 0;&#xA;    &#xA;    cleanup:&#xA;        avcodec_free_context(&amp;avctx);&#xA;        avio_closep(&amp;(*output_format_context)->pb);&#xA;        avformat_free_context(*output_format_context);&#xA;        *output_format_context = NULL;&#xA;        return error &lt; 0 ? error : AVERROR_EXIT;&#xA;    }&#xA;    &#xA;    /**&#xA;     * Initialize one data packet for reading or writing.&#xA;     */&#xA;    static int init_packet(AVPacket **packet)&#xA;    {&#xA;        if (!(*packet = av_packet_alloc())) {&#xA;            fprintf(stderr, "Could not allocate packet\n");&#xA;            return AVERROR(ENOMEM);&#xA;        }&#xA;        return 0;&#xA;    }&#xA;    &#xA;    static int init_input_frame(AVFrame **frame)&#xA;    {&#xA;        if (!(*frame = av_frame_alloc())) {&#xA;            fprintf(stderr, "Could not allocate input frame\n");&#xA;            return AVERROR(ENOMEM);&#xA;        }&#xA;        return 0;&#xA;    }&#xA;    &#xA;    static int init_resampler(AVCodecContext *input_codec_context,&#xA;                              AVCodecContext *output_codec_context,&#xA;                              SwrContext **resample_context)&#xA;    {&#xA;            int error;&#xA;&#xA;  /**&#xA;   * create the resample, including ref to the desired output sample rate&#xA;   */&#xA;            *resample_context = swr_alloc_set_opts(NULL,&#xA;                                                  av_get_default_channel_layout(output_codec_context->channels),&#xA;                                                  output_codec_context->sample_fmt,&#xA;                                                  output_codec_context->sample_rate,&#xA;                              av_get_default_channel_layout(input_codec_context->channels),&#xA;                                                  input_codec_context->sample_fmt,&#xA;                                                  input_codec_context->sample_rate,&#xA;                                                  0, NULL);&#xA;            if (!*resample_context &lt; 0) {&#xA;                fprintf(stderr, "Could not allocate resample context\n");&#xA;            return AVERROR(ENOMEM);&#xA;            }&#xA;    &#xA;            if ((error = swr_init(*resample_context)) &lt; 0) {&#xA;                fprintf(stderr, "Could not open resample context\n");&#xA;                swr_free(resample_context);&#xA;                return error;&#xA;            }&#xA;        return 0;&#xA;    }&#xA;    &#xA;    static int init_fifo(AVAudioFifo **fifo, AVCodecContext *output_codec_context)&#xA;    {&#xA;        if (!(*fifo = av_audio_fifo_alloc(output_codec_context->sample_fmt,&#xA;                                          output_codec_context->channels, 1))) {&#xA;            fprintf(stderr, "Could not allocate FIFO\n");&#xA;            return AVERROR(ENOMEM);&#xA;        }&#xA;        return 0;&#xA;    }&#xA;    &#xA;    static int write_output_file_header(AVFormatContext *output_format_context)&#xA;    {&#xA;        int error;&#xA;        if ((error = avformat_write_header(output_format_context, NULL)) &lt; 0) {&#xA;            fprintf(stderr, "Could not write output file header (error &#x27;%s&#x27;)\n",&#xA;                    av_err2str(error));&#xA;            return error;&#xA;        }&#xA;        return 0;&#xA;    }&#xA;    &#xA;    static int decode_audio_frame(AVFrame *frame,&#xA;                                  AVFormatContext *input_format_context,&#xA;                                  AVCodecContext *input_codec_context,&#xA;                                  int *data_present, int *finished)&#xA;    {&#xA;        AVPacket *input_packet;&#xA;        int error;&#xA;    &#xA;        error = init_packet(&amp;input_packet);&#xA;        if (error &lt; 0)&#xA;            return error;&#xA;    &#xA;        *data_present = 0;&#xA;        *finished = 0;&#xA;&#xA;        if ((error = av_read_frame(input_format_context, input_packet)) &lt; 0) {&#xA;            if (error == AVERROR_EOF)&#xA;                *finished = 1;&#xA;            else {&#xA;                fprintf(stderr, "Could not read frame (error &#x27;%s&#x27;)\n",&#xA;                        av_err2str(error));&#xA;                goto cleanup;&#xA;            }&#xA;        }&#xA;    &#xA;        if ((error = avcodec_send_packet(input_codec_context, input_packet)) &lt; 0) {&#xA;            fprintf(stderr, "Could not send packet for decoding (error &#x27;%s&#x27;)\n",&#xA;                    av_err2str(error));&#xA;            goto cleanup;&#xA;        }&#xA;    &#xA;        error = avcodec_receive_frame(input_codec_context, frame);&#xA;        if (error == AVERROR(EAGAIN)) {&#xA;            error = 0;&#xA;            goto cleanup;&#xA;        } else if (error == AVERROR_EOF) {&#xA;            *finished = 1;&#xA;            error = 0;&#xA;            goto cleanup;&#xA;        } else if (error &lt; 0) {&#xA;            fprintf(stderr, "Could not decode frame (error &#x27;%s&#x27;)\n",&#xA;                    av_err2str(error));&#xA;            goto cleanup;&#xA;        } else {&#xA;            *data_present = 1;&#xA;            goto cleanup;&#xA;        }&#xA;    &#xA;    cleanup:&#xA;        av_packet_free(&amp;input_packet);&#xA;        return error;&#xA;    }&#xA;    &#xA;    static int init_converted_samples(uint8_t ***converted_input_samples,&#xA;                                      AVCodecContext *output_codec_context,&#xA;                                      int frame_size)&#xA;    {&#xA;        int error;&#xA;    &#xA;        if (!(*converted_input_samples = calloc(output_codec_context->channels,&#xA;                                                sizeof(**converted_input_samples)))) {&#xA;            fprintf(stderr, "Could not allocate converted input sample pointers\n");&#xA;            return AVERROR(ENOMEM);&#xA;        }&#xA;    &#xA;&#xA;        if ((error = av_samples_alloc(*converted_input_samples, NULL,&#xA;                                      output_codec_context->channels,&#xA;                                      frame_size,&#xA;                                      output_codec_context->sample_fmt, 0)) &lt; 0) {&#xA;            fprintf(stderr,&#xA;                    "Could not allocate converted input samples (error &#x27;%s&#x27;)\n",&#xA;                    av_err2str(error));&#xA;            av_freep(&amp;(*converted_input_samples)[0]);&#xA;            free(*converted_input_samples);&#xA;            return error;&#xA;        }&#xA;        return 0;&#xA;    }&#xA;    &#xA;    static int convert_samples(const uint8_t **input_data, const int input_nb_samples,&#xA;                               uint8_t **converted_data, const int output_nb_samples,&#xA;                               SwrContext *resample_context)&#xA;    {&#xA;        int error;&#xA;    &#xA;        if ((error = swr_convert(resample_context,&#xA;                                 converted_data, output_nb_samples,&#xA;                                 input_data    , input_nb_samples)) &lt; 0) {&#xA;            fprintf(stderr, "Could not convert input samples (error &#x27;%s&#x27;)\n",&#xA;                    av_err2str(error));&#xA;            return error;&#xA;        }&#xA;    &#xA;        return 0;&#xA;    }&#xA;    &#xA;    static int add_samples_to_fifo(AVAudioFifo *fifo,&#xA;                                   uint8_t **converted_input_samples,&#xA;                                   const int frame_size)&#xA;    {&#xA;        int error;&#xA;    &#xA;        if ((error = av_audio_fifo_realloc(fifo, av_audio_fifo_size(fifo) &#x2B; frame_size)) &lt; 0) {&#xA;            fprintf(stderr, "Could not reallocate FIFO\n");&#xA;            return error;&#xA;        }&#xA;    &#xA;        if (av_audio_fifo_write(fifo, (void **)converted_input_samples,&#xA;                                frame_size) &lt; frame_size) {&#xA;            fprintf(stderr, "Could not write data to FIFO\n");&#xA;            return AVERROR_EXIT;&#xA;        }&#xA;        return 0;&#xA;    }&#xA;    &#xA;    static int read_decode_convert_and_store(AVAudioFifo *fifo,&#xA;                                             AVFormatContext *input_format_context,&#xA;                                             AVCodecContext *input_codec_context,&#xA;                                             AVCodecContext *output_codec_context,&#xA;                                             SwrContext *resampler_context,&#xA;                                             int *finished)&#xA;    {&#xA;        AVFrame *input_frame = NULL;&#xA;        uint8_t **converted_input_samples = NULL;&#xA;        int data_present;&#xA;        int ret = AVERROR_EXIT;&#xA;    &#xA;&#xA;        if (init_input_frame(&amp;input_frame))&#xA;            goto cleanup;&#xA;&#xA;        if (decode_audio_frame(input_frame, input_format_context,&#xA;                               input_codec_context, &amp;data_present, finished))&#xA;            goto cleanup;&#xA;&#xA;        if (*finished) {&#xA;            ret = 0;&#xA;            goto cleanup;&#xA;        }&#xA;&#xA;        if (data_present) {&#xA;            /* Initialize the temporary storage for the converted input samples. */&#xA;            if (init_converted_samples(&amp;converted_input_samples, output_codec_context,&#xA;                                       input_frame->nb_samples))&#xA;                goto cleanup;&#xA; &#xA;    /* figure out how many samples are required for target sample_rate incl&#xA;     * any items left in the swr buffer&#xA;     */   &#xA;            int  output_nb_samples = av_rescale_rnd(&#xA;                                       swr_get_delay(resampler_context, input_codec_context->sample_rate) &#x2B; input_frame->nb_samples,&#xA;                                       output_codec_context->sample_rate, &#xA;                                        input_codec_context->sample_rate,&#xA;                                       AV_ROUND_UP);&#xA; &#xA;            /* ignore, just to ensure we&#x27;ve got enough buffer alloc&#x27;d for conversion buffer */&#xA;            av_assert1(input_frame->nb_samples > output_nb_samples);&#xA;   &#xA;    /* Convert the input samples to the desired output sample format, via swr_convert().&#xA;     */&#xA;            if (convert_samples((const uint8_t**)input_frame->extended_data, input_frame->nb_samples,&#xA;                        converted_input_samples, output_nb_samples,&#xA;                    resampler_context))&#xA;                goto cleanup;&#xA;    &#xA;            /* Add the converted input samples to the FIFO buffer for later processing. */&#xA;            if (add_samples_to_fifo(fifo, converted_input_samples,&#xA;                                    output_nb_samples))&#xA;                goto cleanup;&#xA;            ret = 0;&#xA;        }&#xA;        ret = 0;&#xA;    &#xA;    cleanup:&#xA;        if (converted_input_samples) {&#xA;            av_freep(&amp;converted_input_samples[0]);&#xA;            free(converted_input_samples);&#xA;        }&#xA;        av_frame_free(&amp;input_frame);&#xA;    &#xA;        return ret;&#xA;    }&#xA;    &#xA;    static int init_output_frame(AVFrame **frame,&#xA;                                 AVCodecContext *output_codec_context,&#xA;                                 int frame_size)&#xA;    {&#xA;        int error;&#xA;    &#xA;        if (!(*frame = av_frame_alloc())) {&#xA;            fprintf(stderr, "Could not allocate output frame\n");&#xA;            return AVERROR_EXIT;&#xA;        }&#xA;    &#xA;        /* Set the frame&#x27;s parameters, especially its size and format.&#xA;         * av_frame_get_buffer needs this to allocate memory for the&#xA;         * audio samples of the frame.&#xA;         * Default channel layouts based on the number of channels&#xA;         * are assumed for simplicity. */&#xA;        (*frame)->nb_samples     = frame_size;&#xA;        (*frame)->channel_layout = output_codec_context->channel_layout;&#xA;        (*frame)->format         = output_codec_context->sample_fmt;&#xA;        (*frame)->sample_rate    = output_codec_context->sample_rate;&#xA;    &#xA;        /* Allocate the samples of the created frame. This call will make&#xA;         * sure that the audio frame can hold as many samples as specified. */&#xA;        if ((error = av_frame_get_buffer(*frame, 0)) &lt; 0) {&#xA;            fprintf(stderr, "Could not allocate output frame samples (error &#x27;%s&#x27;)\n",&#xA;                    av_err2str(error));&#xA;            av_frame_free(frame);&#xA;            return error;&#xA;        }&#xA;    &#xA;        return 0;&#xA;    }&#xA;    &#xA;    /* Global timestamp for the audio frames. */&#xA;    static int64_t pts = 0;&#xA;    &#xA;    /**&#xA;     * Encode one frame worth of audio to the output file.&#xA;     */&#xA;    static int encode_audio_frame(AVFrame *frame,&#xA;                                  AVFormatContext *output_format_context,&#xA;                                  AVCodecContext *output_codec_context,&#xA;                                  int *data_present)&#xA;    {&#xA;        AVPacket *output_packet;&#xA;        int error;&#xA;    &#xA;        error = init_packet(&amp;output_packet);&#xA;        if (error &lt; 0)&#xA;            return error;&#xA;    &#xA;        /* Set a timestamp based on the sample rate for the container. */&#xA;        if (frame) {&#xA;            frame->pts = pts;&#xA;            pts &#x2B;= frame->nb_samples;&#xA;        }&#xA;    &#xA;        *data_present = 0;&#xA;        error = avcodec_send_frame(output_codec_context, frame);&#xA;        if (error &lt; 0 &amp;&amp; error != AVERROR_EOF) {&#xA;          fprintf(stderr, "Could not send packet for encoding (error &#x27;%s&#x27;)\n",&#xA;                  av_err2str(error));&#xA;          goto cleanup;&#xA;        }&#xA;    &#xA;&#xA;        error = avcodec_receive_packet(output_codec_context, output_packet);&#xA;        if (error == AVERROR(EAGAIN)) {&#xA;            error = 0;&#xA;            goto cleanup;&#xA;        } else if (error == AVERROR_EOF) {&#xA;            error = 0;&#xA;            goto cleanup;&#xA;        } else if (error &lt; 0) {&#xA;            fprintf(stderr, "Could not encode frame (error &#x27;%s&#x27;)\n",&#xA;                    av_err2str(error));&#xA;            goto cleanup;&#xA;        } else {&#xA;            *data_present = 1;&#xA;        }&#xA;    &#xA;        /* Write one audio frame from the temporary packet to the output file. */&#xA;        if (*data_present &amp;&amp;&#xA;            (error = av_write_frame(output_format_context, output_packet)) &lt; 0) {&#xA;            fprintf(stderr, "Could not write frame (error &#x27;%s&#x27;)\n",&#xA;                    av_err2str(error));&#xA;            goto cleanup;&#xA;        }&#xA;    &#xA;    cleanup:&#xA;        av_packet_free(&amp;output_packet);&#xA;        return error;&#xA;    }&#xA;    &#xA;    /**&#xA;     * Load one audio frame from the FIFO buffer, encode and write it to the&#xA;     * output file.&#xA;     */&#xA;    static int load_encode_and_write(AVAudioFifo *fifo,&#xA;                                     AVFormatContext *output_format_context,&#xA;                                     AVCodecContext *output_codec_context)&#xA;    {&#xA;        AVFrame *output_frame;&#xA;        /* Use the maximum number of possible samples per frame.&#xA;         * If there is less than the maximum possible frame size in the FIFO&#xA;         * buffer use this number. Otherwise, use the maximum possible frame size. */&#xA;        const int frame_size = FFMIN(av_audio_fifo_size(fifo),&#xA;                                     output_codec_context->frame_size);&#xA;        int data_written;&#xA;    &#xA;        if (init_output_frame(&amp;output_frame, output_codec_context, frame_size))&#xA;            return AVERROR_EXIT;&#xA;    &#xA;        /* Read as many samples from the FIFO buffer as required to fill the frame.&#xA;         * The samples are stored in the frame temporarily. */&#xA;        if (av_audio_fifo_read(fifo, (void **)output_frame->data, frame_size) &lt; frame_size) {&#xA;            fprintf(stderr, "Could not read data from FIFO\n");&#xA;            av_frame_free(&amp;output_frame);&#xA;            return AVERROR_EXIT;&#xA;        }&#xA;    &#xA;        /* Encode one frame worth of audio samples. */&#xA;        if (encode_audio_frame(output_frame, output_format_context,&#xA;                               output_codec_context, &amp;data_written)) {&#xA;            av_frame_free(&amp;output_frame);&#xA;            return AVERROR_EXIT;&#xA;        }&#xA;        av_frame_free(&amp;output_frame);&#xA;        return 0;&#xA;    }&#xA;    &#xA;    /**&#xA;     * Write the trailer of the output file container.&#xA;     */&#xA;    static int write_output_file_trailer(AVFormatContext *output_format_context)&#xA;    {&#xA;        int error;&#xA;        if ((error = av_write_trailer(output_format_context)) &lt; 0) {&#xA;            fprintf(stderr, "Could not write output file trailer (error &#x27;%s&#x27;)\n",&#xA;                    av_err2str(error));&#xA;            return error;&#xA;        }&#xA;        return 0;&#xA;    }&#xA;    &#xA;    int main(int argc, char **argv)&#xA;    {&#xA;        AVFormatContext *input_format_context = NULL, *output_format_context = NULL;&#xA;        AVCodecContext *input_codec_context = NULL, *output_codec_context = NULL;&#xA;        SwrContext *resample_context = NULL;&#xA;        AVAudioFifo *fifo = NULL;&#xA;        int ret = AVERROR_EXIT;&#xA;    &#xA;        if (argc != 3) {&#xA;            fprintf(stderr, "Usage: %s <input file="file" /> <output file="file">\n", argv[0]);&#xA;            exit(1);&#xA;        }&#xA;    &#xA;&#xA;        if (open_input_file(argv[1], &amp;input_format_context,&#xA;                            &amp;input_codec_context))&#xA;            goto cleanup;&#xA;&#xA;        if (open_output_file(argv[2], input_codec_context,&#xA;                             &amp;output_format_context, &amp;output_codec_context))&#xA;            goto cleanup;&#xA;&#xA;        if (init_resampler(input_codec_context, output_codec_context,&#xA;                           &amp;resample_context))&#xA;            goto cleanup;&#xA;&#xA;        if (init_fifo(&amp;fifo, output_codec_context))&#xA;            goto cleanup;&#xA;&#xA;        if (write_output_file_header(output_format_context))&#xA;            goto cleanup;&#xA;    &#xA;        while (1) {&#xA;            /* Use the encoder&#x27;s desired frame size for processing. */&#xA;            const int output_frame_size = output_codec_context->frame_size;&#xA;            int finished                = 0;&#xA;    &#xA;            while (av_audio_fifo_size(fifo) &lt; output_frame_size) {&#xA;                /* Decode one frame worth of audio samples, convert it to the&#xA;                 * output sample format and put it into the FIFO buffer. */&#xA;                if (read_decode_convert_and_store(fifo, input_format_context,&#xA;                                                  input_codec_context,&#xA;                                                  output_codec_context,&#xA;                                                  resample_context, &amp;finished))&#xA;                    goto cleanup;&#xA;    &#xA;                if (finished)&#xA;                    break;&#xA;            }&#xA;    &#xA;            while (av_audio_fifo_size(fifo) >= output_frame_size ||&#xA;                   (finished &amp;&amp; av_audio_fifo_size(fifo) > 0))&#xA;                if (load_encode_and_write(fifo, output_format_context,&#xA;                                          output_codec_context))&#xA;                    goto cleanup;&#xA;    &#xA;            if (finished) {&#xA;                int data_written;&#xA;                do {&#xA;                    if (encode_audio_frame(NULL, output_format_context,&#xA;                                           output_codec_context, &amp;data_written))&#xA;                        goto cleanup;&#xA;                } while (data_written);&#xA;                break;&#xA;            }&#xA;        }&#xA;    &#xA;        if (write_output_file_trailer(output_format_context))&#xA;            goto cleanup;&#xA;        ret = 0;&#xA;    &#xA;    cleanup:&#xA;        if (fifo)&#xA;            av_audio_fifo_free(fifo);&#xA;        swr_free(&amp;resample_context);&#xA;        if (output_codec_context)&#xA;            avcodec_free_context(&amp;output_codec_context);&#xA;        if (output_format_context) {&#xA;            avio_closep(&amp;output_format_context->pb);&#xA;            avformat_free_context(output_format_context);&#xA;        }&#xA;        if (input_codec_context)&#xA;            avcodec_free_context(&amp;input_codec_context);&#xA;        if (input_format_context)&#xA;            avformat_close_input(&amp;input_format_context);&#xA;    &#xA;        return ret;&#xA;    }&#xA;</output>

    &#xA;

  • FFMPEG command runs in terminal but not by subprocess

    1er septembre 2022, par Basilique

    I am trying to run a bash command using the subprocess module from within python 3.10.

    &#xA;

    The bash command is :

    &#xA;

    ffmpeg -framerate 1 -pattern_type glob -i &#x27;*.png&#x27; -c:v libx264 -pix_fmt yuv420p -vf "crop=trunc(iw/2)*2:trunc(ih/2)*2" out.mp4&#xA;

    &#xA;

    In terminal the command runs fine. Here is the output :

    &#xA;

    ffmpeg version 4.2.7-0ubuntu0.1 Copyright (c) 2000-2022 the FFmpeg developers&#xA;  built with gcc 9 (Ubuntu 9.4.0-1ubuntu1~20.04.1)&#xA;  configuration: --prefix=/usr --extra-version=0ubuntu0.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-nvenc --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared&#xA;  libavutil      56. 31.100 / 56. 31.100&#xA;  libavcodec     58. 54.100 / 58. 54.100&#xA;  libavformat    58. 29.100 / 58. 29.100&#xA;  libavdevice    58.  8.100 / 58.  8.100&#xA;  libavfilter     7. 57.100 /  7. 57.100&#xA;  libavresample   4.  0.  0 /  4.  0.  0&#xA;  libswscale      5.  5.100 /  5.  5.100&#xA;  libswresample   3.  5.100 /  3.  5.100&#xA;  libpostproc    55.  5.100 / 55.  5.100&#xA;Input #0, image2, from &#x27;*.png&#x27;:&#xA;  Duration: 00:16:39.00, start: 0.000000, bitrate: N/A&#xA;    Stream #0:0: Video: png, rgba(pc), 895x332 [SAR 3937:3937 DAR 895:332], 1 fps, 1 tbr, 1 tbn, 1 tbc&#xA;Stream mapping:&#xA;  Stream #0:0 -> #0:0 (png (native) -> h264 (libx264))&#xA;Press [q] to stop, [?] for help&#xA;[libx264 @ 0x55726ab95d00] using SAR=1/1&#xA;[libx264 @ 0x55726ab95d00] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2 AVX512&#xA;[libx264 @ 0x55726ab95d00] profile High, level 2.2&#xA;[libx264 @ 0x55726ab95d00] 264 - core 155 r2917 0a84d98 - H.264/MPEG-4 AVC codec - Copyleft 2003-2018 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=10 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=1 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00&#xA;Output #0, mp4, to &#x27;out.mp4&#x27;:&#xA;  Metadata:&#xA;    encoder         : Lavf58.29.100&#xA;    Stream #0:0: Video: h264 (libx264) (avc1 / 0x31637661), yuv420p, 894x332 [SAR 1:1 DAR 447:166], q=-1--1, 1 fps, 16384 tbn, 1 tbc&#xA;    Metadata:&#xA;      encoder         : Lavc58.54.100 libx264&#xA;    Side data:&#xA;      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1&#xA;frame=  173 fps=0.0 q=17.0 size=     512kB time=00:01:56.00 bitrate=  36.2kbits/frame=  351 fps=350 q=17.0 size=    1536kB time=00:04:54.00 bitrate=  42.8kbits/frame=  517 fps=343 q=17.0 size=    2560kB time=00:07:40.00 bitrate=  45.6kbits/frame=  725 fps=361 q=17.0 size=    3328kB time=00:11:08.00 bitrate=  40.8kbits/frame=  913 fps=364 q=17.0 size=    4352kB time=00:14:16.00 bitrate=  41.6kbits/frame=  999 fps=361 q=-1.0 Lsize=    4986kB time=00:16:36.00 bitrate=  41.0kbits/s speed= 360x    &#xA;video:4974kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.241361%&#xA;[libx264 @ 0x55726ab95d00] frame I:4     Avg QP: 6.12  size: 24072&#xA;[libx264 @ 0x55726ab95d00] frame P:346   Avg QP:12.94  size:  5708&#xA;[libx264 @ 0x55726ab95d00] frame B:649   Avg QP:18.19  size:  4655&#xA;[libx264 @ 0x55726ab95d00] consecutive B-frames:  5.8% 16.0% 20.1% 58.1%&#xA;[libx264 @ 0x55726ab95d00] mb I  I16..4: 59.1% 10.6% 30.4%&#xA;[libx264 @ 0x55726ab95d00] mb P  I16..4:  5.6%  0.6%  2.2%  P16..4: 10.5%  4.3%  2.3%  0.0%  0.0%    skip:74.5%&#xA;[libx264 @ 0x55726ab95d00] mb B  I16..4:  2.2%  0.1%  1.7%  B16..8: 16.9%  4.8%  1.6%  direct: 1.1%  skip:71.5%  L0:50.9% L1:45.2% BI: 3.9%&#xA;[libx264 @ 0x55726ab95d00] 8x8 transform intra:5.9% inter:10.4%&#xA;[libx264 @ 0x55726ab95d00] coded y,uvDC,uvAC intra: 20.1% 18.3% 17.3% inter: 4.7% 4.7% 4.6%&#xA;[libx264 @ 0x55726ab95d00] i16 v,h,dc,p: 66% 33%  1%  0%&#xA;[libx264 @ 0x55726ab95d00] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 18%  8% 73%  0%  0%  0%  0%  0%  0%&#xA;[libx264 @ 0x55726ab95d00] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 23% 31% 31%  2%  3%  2%  4%  2%  3%&#xA;[libx264 @ 0x55726ab95d00] i8c dc,h,v,p: 73% 23%  3%  0%&#xA;[libx264 @ 0x55726ab95d00] Weighted P-Frames: Y:0.0% UV:0.0%&#xA;[libx264 @ 0x55726ab95d00] ref P L0: 57.2%  1.5% 24.3% 17.0%&#xA;[libx264 @ 0x55726ab95d00] ref B L0: 69.6% 24.8%  5.6%&#xA;[libx264 @ 0x55726ab95d00] ref B L1: 92.4%  7.6%&#xA;[libx264 @ 0x55726ab95d00] kb/s:40.78&#xA;

    &#xA;

    In my python script I tried the following solutions :

    &#xA;

    video_cmd = """ffmpeg -framerate 1 -pattern_type glob -i &#x27;*.png&#x27; -c:v libx264 -pix_fmt yuv420p -vf "crop=trunc(iw/2)*2:trunc(ih/2)*2" out.mp4"""&#xA;&#xA;subprocess.run(shlex.split(video_cmd), shell=False, cwd=path_viz, stderr=subprocess.STDOUT, check=True, text=False)&#xA;&#xA;subprocess.run(video_cmd, shell=True, cwd=path_viz, stderr=subprocess.STDOUT, check=True, text=False)&#xA;

    &#xA;

    as well as the solution proposed for this similar question

    &#xA;

    subprocess.Popen(video_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)&#xA;

    &#xA;

    None of them worked. Apparently, the right command is run (output of the check_out function) :

    &#xA;

    Command &#x27;ffmpeg -y -framerate 1 -pattern_type glob -i &#x27;*.png&#x27; -c:v libx264 -pix_fmt yuv420p -vf "crop=trunc(iw/2)*2:trunc(ih/2)*2" out.mp4&#x27; returned non-zero exit status 1.&#xA;

    &#xA;

    the first part of the job (up to Stream mapping:) is done also correctly :

    &#xA;

    fmpeg version 4.3 Copyright (c) 2000-2020 the FFmpeg developers&#xA;  built with gcc 7.3.0 (crosstool-NG 1.23.0.449-a04d0)&#xA;  configuration: --prefix=/home/rsghazanfari/anaconda3/envs/_cuda --cc=/opt/conda/conda-bld/ffmpeg_1597178665428/_build_env/bin/x86_64-conda_cos6-linux-gnu-cc --disable-doc --disable-openssl --enable-avresample --enable-gnutls --enable-hardcoded-tables --enable-libfreetype --enable-libopenh264 --enable-pic --enable-pthreads --enable-shared --disable-static --enable-version3 --enable-zlib --enable-libmp3lame&#xA;  libavutil      56. 51.100 / 56. 51.100&#xA;  libavcodec     58. 91.100 / 58. 91.100&#xA;  libavformat    58. 45.100 / 58. 45.100&#xA;  libavdevice    58. 10.100 / 58. 10.100&#xA;  libavfilter     7. 85.100 /  7. 85.100&#xA;  libavresample   4.  0.  0 /  4.  0.  0&#xA;  libswscale      5.  7.100 /  5.  7.100&#xA;  libswresample   3.  7.100 /  3.  7.100&#xA;Input #0, image2, from &#x27;*.png&#x27;:&#xA;  Duration: 00:16:39.00, start: 0.000000, bitrate: N/A&#xA;    Stream #0:0: Video: png, rgba(pc), 895x332 [SAR 3937:3937 DAR 895:332], 1 fps, 1 tbr, 1 tbn, 1 tbc&#xA;

    &#xA;

    but it then pops up the following error :

    &#xA;

    Unknown encoder &#x27;libx264&#x27;&#xA;Traceback (most recent call last):&#xA;  File "/home/rsgh/anaconda3/envs/_cuda/lib/python3.10/code.py", line 90, in runcode&#xA;    exec(code, self.locals)&#xA;  File "<input />", line 1, in <module>&#xA;  File "/home/rsgh/anaconda3/envs/_cuda/lib/python3.10/subprocess.py", line 524, in run&#xA;    raise CalledProcessError(retcode, process.args,&#xA;&#xA;subprocess.CalledProcessError: Command &#x27;ffmpeg -y -framerate 1 -pattern_type glob -i &#x27;*.png&#x27; -c:v libx264 -pix_fmt yuv420p -vf "crop=trunc(iw/2)*2:trunc(ih/2)*2" out.mp4&#x27; returned non-zero exit status 1.&#xA;</module>

    &#xA;

    Any ideas of why this error is produced in python while in terminal it runs fine ? Thank you in advance.

    &#xA;

    PS : ffmpeg -version outputs :

    &#xA;

    ffmpeg version 4.2.7-0ubuntu0.1 Copyright (c) 2000-2022 the FFmpeg developers&#xA;built with gcc 9 (Ubuntu 9.4.0-1ubuntu1~20.04.1)&#xA;configuration: --prefix=/usr --extra-version=0ubuntu0.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-nvenc --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared&#xA;libavutil      56. 31.100 / 56. 31.100&#xA;libavcodec     58. 54.100 / 58. 54.100&#xA;libavformat    58. 29.100 / 58. 29.100&#xA;libavdevice    58.  8.100 / 58.  8.100&#xA;libavfilter     7. 57.100 /  7. 57.100&#xA;libavresample   4.  0.  0 /  4.  0.  0&#xA;libswscale      5.  5.100 /  5.  5.100&#xA;libswresample   3.  5.100 /  3.  5.100&#xA;libpostproc    55.  5.100 / 55.  5.100&#xA;

    &#xA;

    ubuntu version :

    &#xA;

    Distributor ID: Ubuntu&#xA;Description:    Ubuntu 20.04.4 LTS&#xA;Release:    20.04&#xA;Codename:   focal&#xA;

    &#xA;