Recherche avancée

Médias (0)

Mot : - Tags -/page unique

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

Autres articles (76)

  • Websites made ​​with MediaSPIP

    2 mai 2011, par

    This page lists some websites based on MediaSPIP.

  • Contribute to translation

    13 avril 2011

    You can help us to improve the language used in the software interface to make MediaSPIP more accessible and user-friendly. You can also translate the interface into any language that allows it to spread to new linguistic communities.
    To do this, we use the translation interface of SPIP where the all the language modules of MediaSPIP are available. Just subscribe to the mailing list and request further informantion on translation.
    MediaSPIP is currently available in French and English (...)

  • Participer à sa traduction

    10 avril 2011

    Vous pouvez nous aider à améliorer les locutions utilisées dans le logiciel ou à traduire celui-ci dans n’importe qu’elle nouvelle langue permettant sa diffusion à de nouvelles communautés linguistiques.
    Pour ce faire, on utilise l’interface de traduction de SPIP où l’ensemble des modules de langue de MediaSPIP sont à disposition. ll vous suffit de vous inscrire sur la liste de discussion des traducteurs pour demander plus d’informations.
    Actuellement MediaSPIP n’est disponible qu’en français et (...)

Sur d’autres sites (6803)

  • ffmpeg : Print negative times like "-00:05:01.22" instead of "00 :-5 :-1.-22"

    10 février 2015, par Michael Niedermayer
    ffmpeg : Print negative times like "-00:05:01.22" instead of "00 :-5 :-1.-22"
    

    Signed-off-by : Michael Niedermayer <michaelni@gmx.at>

    • [DH] ffmpeg.c
  • using ffmpeg libraray to write to a mp4, ffprobe shows there are 100 frames and 100 packets, but av_interleaved_write_frame only called 50 times

    2 mai 2023, par ollydbg23

    here is my code to generate a mp4 file by using ffmpeg and opencv library. The opencv library is only try to generate 100 images(frames), and ffmpeg library is to compress the images to a mp4 files.

    &#xA;

    Here is the working code :

    &#xA;

    #include <iostream>&#xA;#include <vector>&#xA;#include <cstring>&#xA;#include <fstream>&#xA;#include <sstream>&#xA;#include <stdexcept>&#xA;#include <opencv2></opencv2>opencv.hpp>&#xA;extern "C" {&#xA;#include <libavutil></libavutil>imgutils.h>&#xA;#include <libavcodec></libavcodec>avcodec.h>&#xA;#include <libavformat></libavformat>avformat.h>&#xA;#include <libavutil></libavutil>opt.h>&#xA;}&#xA;&#xA;#include<cstdlib> // to generate time stamps&#xA;&#xA;using namespace std;&#xA;using namespace cv;&#xA;&#xA;int main()&#xA;{&#xA;    // Set up input frames as BGR byte arrays&#xA;    vector<mat> frames;&#xA;&#xA;    int width = 640;&#xA;    int height = 480;&#xA;    int num_frames = 100;&#xA;    Scalar black(0, 0, 0);&#xA;    Scalar white(255, 255, 255);&#xA;    int font = FONT_HERSHEY_SIMPLEX;&#xA;    double font_scale = 1.0;&#xA;    int thickness = 2;&#xA;&#xA;    for (int i = 0; i &lt; num_frames; i&#x2B;&#x2B;) {&#xA;        Mat frame = Mat::zeros(height, width, CV_8UC3);&#xA;        putText(frame, std::to_string(i), Point(width / 2 - 50, height / 2), font, font_scale, white, thickness);&#xA;        frames.push_back(frame);&#xA;    }&#xA;&#xA;    // generate a serial of time stamps which is used to set the PTS value&#xA;    // suppose they are in ms unit, the time interval is between 30ms to 59ms&#xA;    vector<int> timestamps;&#xA;&#xA;    for (int i = 0; i &lt; num_frames; i&#x2B;&#x2B;) {&#xA;        int timestamp;&#xA;        if (i == 0)&#xA;            timestamp = 0;&#xA;        else&#xA;        {&#xA;            int random = 30 &#x2B; (rand() % 30);&#xA;            timestamp = timestamps[i-0] &#x2B; random;&#xA;        }&#xA;&#xA;        timestamps.push_back(timestamp);&#xA;    }&#xA;&#xA;    // Populate frames with BGR byte arrays&#xA;&#xA;    // Initialize FFmpeg&#xA;    //av_register_all();&#xA;&#xA;    // Set up output file&#xA;    AVFormatContext* outFormatCtx = nullptr;&#xA;    //AVCodec* outCodec = nullptr;&#xA;    AVCodecContext* outCodecCtx = nullptr;&#xA;    //AVStream* outStream = nullptr;&#xA;    //AVPacket outPacket;&#xA;&#xA;    const char* outFile = "output.mp4";&#xA;    int outWidth = frames[0].cols;&#xA;    int outHeight = frames[0].rows;&#xA;    int fps = 25;&#xA;&#xA;    // Open the output file context&#xA;    avformat_alloc_output_context2(&amp;outFormatCtx, nullptr, nullptr, outFile);&#xA;    if (!outFormatCtx) {&#xA;        cerr &lt;&lt; "Error: Could not allocate output format context" &lt;&lt; endl;&#xA;        return -1;&#xA;    }&#xA;&#xA;    // Open the output file&#xA;    if (avio_open(&amp;outFormatCtx->pb, outFile, AVIO_FLAG_WRITE) &lt; 0) {&#xA;        cerr &lt;&lt; "Error opening output file" &lt;&lt; std::endl;&#xA;        return -1;&#xA;    }&#xA;&#xA;    // Set up output codec&#xA;    const AVCodec* outCodec = avcodec_find_encoder(AV_CODEC_ID_H264);&#xA;    if (!outCodec) {&#xA;        cerr &lt;&lt; "Error: Could not find H.264 codec" &lt;&lt; endl;&#xA;        return -1;&#xA;    }&#xA;&#xA;    outCodecCtx = avcodec_alloc_context3(outCodec);&#xA;    if (!outCodecCtx) {&#xA;        cerr &lt;&lt; "Error: Could not allocate output codec context" &lt;&lt; endl;&#xA;        return -1;&#xA;    }&#xA;    outCodecCtx->codec_id = AV_CODEC_ID_H264;&#xA;    outCodecCtx->codec_type = AVMEDIA_TYPE_VIDEO;&#xA;    outCodecCtx->pix_fmt = AV_PIX_FMT_YUV420P;&#xA;    outCodecCtx->width = outWidth;&#xA;    outCodecCtx->height = outHeight;&#xA;    //outCodecCtx->time_base = { 1, fps*1000 };   // 25000&#xA;    outCodecCtx->time_base = { 1, fps};   // 25000&#xA;    outCodecCtx->framerate = {fps, 1};          // 25&#xA;    outCodecCtx->bit_rate = 4000000;&#xA;&#xA;    //https://github.com/leandromoreira/ffmpeg-libav-tutorial&#xA;    //We set the flag AV_CODEC_FLAG_GLOBAL_HEADER which tells the encoder that it can use the global headers.&#xA;    if (outFormatCtx->oformat->flags &amp; AVFMT_GLOBALHEADER)&#xA;    {&#xA;        outCodecCtx->flags |= AV_CODEC_FLAG_GLOBAL_HEADER; //&#xA;    }&#xA;&#xA;    // Open output codec&#xA;    if (avcodec_open2(outCodecCtx, outCodec, nullptr) &lt; 0) {&#xA;        cerr &lt;&lt; "Error: Could not open output codec" &lt;&lt; endl;&#xA;        return -1;&#xA;    }&#xA;&#xA;    // Create output stream&#xA;    AVStream* outStream = avformat_new_stream(outFormatCtx, outCodec);&#xA;    if (!outStream) {&#xA;        cerr &lt;&lt; "Error: Could not allocate output stream" &lt;&lt; endl;&#xA;        return -1;&#xA;    }&#xA;&#xA;    // Configure output stream parameters (e.g., time base, codec parameters, etc.)&#xA;    // ...&#xA;&#xA;    // Connect output stream to format context&#xA;    outStream->codecpar->codec_id = outCodecCtx->codec_id;&#xA;    outStream->codecpar->codec_type = AVMEDIA_TYPE_VIDEO;&#xA;    outStream->codecpar->width = outCodecCtx->width;&#xA;    outStream->codecpar->height = outCodecCtx->height;&#xA;    outStream->codecpar->format = outCodecCtx->pix_fmt;&#xA;    outStream->time_base = outCodecCtx->time_base;&#xA;&#xA;    int ret = avcodec_parameters_from_context(outStream->codecpar, outCodecCtx);&#xA;    if (ret &lt; 0) {&#xA;        cerr &lt;&lt; "Error: Could not copy codec parameters to output stream" &lt;&lt; endl;&#xA;        return -1;&#xA;    }&#xA;&#xA;    outStream->avg_frame_rate = outCodecCtx->framerate;&#xA;    //outStream->id = outFormatCtx->nb_streams&#x2B;&#x2B;;  &lt;--- We shouldn&#x27;t modify outStream->id&#xA;&#xA;    ret = avformat_write_header(outFormatCtx, nullptr);&#xA;    if (ret &lt; 0) {&#xA;        cerr &lt;&lt; "Error: Could not write output header" &lt;&lt; endl;&#xA;        return -1;&#xA;    }&#xA;&#xA;    // Convert frames to YUV format and write to output file&#xA;    int frame_count = -1;&#xA;    for (const auto&amp; frame : frames) {&#xA;        frame_count&#x2B;&#x2B;;&#xA;        AVFrame* yuvFrame = av_frame_alloc();&#xA;        if (!yuvFrame) {&#xA;            cerr &lt;&lt; "Error: Could not allocate YUV frame" &lt;&lt; endl;&#xA;            return -1;&#xA;        }&#xA;        av_image_alloc(yuvFrame->data, yuvFrame->linesize, outWidth, outHeight, AV_PIX_FMT_YUV420P, 32);&#xA;&#xA;        yuvFrame->width = outWidth;&#xA;        yuvFrame->height = outHeight;&#xA;        yuvFrame->format = AV_PIX_FMT_YUV420P;&#xA;&#xA;        // Convert BGR frame to YUV format&#xA;        Mat yuvMat;&#xA;        cvtColor(frame, yuvMat, COLOR_BGR2YUV_I420);&#xA;        memcpy(yuvFrame->data[0], yuvMat.data, outWidth * outHeight);&#xA;        memcpy(yuvFrame->data[1], yuvMat.data &#x2B; outWidth * outHeight, outWidth * outHeight / 4);&#xA;        memcpy(yuvFrame->data[2], yuvMat.data &#x2B; outWidth * outHeight * 5 / 4, outWidth * outHeight / 4);&#xA;&#xA;        // Set up output packet&#xA;        //av_init_packet(&amp;outPacket); //error C4996: &#x27;av_init_packet&#x27;: was declared deprecated&#xA;        AVPacket* outPacket = av_packet_alloc();&#xA;        memset(outPacket, 0, sizeof(outPacket)); //Use memset instead of av_init_packet (probably unnecessary).&#xA;        //outPacket->data = nullptr;&#xA;        //outPacket->size = 0;&#xA;&#xA;        // set the frame pts, do I have to set the package pts?&#xA;&#xA;        // yuvFrame->pts = av_rescale_q(timestamps[frame_count]*25, outCodecCtx->time_base, outStream->time_base); //Set PTS timestamp&#xA;        yuvFrame->pts = av_rescale_q(frame_count*frame_count, outCodecCtx->time_base, outStream->time_base); //Set PTS timestamp&#xA;&#xA;        // Encode frame and write to output file&#xA;        int ret = avcodec_send_frame(outCodecCtx, yuvFrame);&#xA;        if (ret &lt; 0) {&#xA;            cerr &lt;&lt; "Error: Could not send frame to output codec" &lt;&lt; endl;&#xA;            return -1;&#xA;        }&#xA;        while (ret >= 0)&#xA;        {&#xA;            ret = avcodec_receive_packet(outCodecCtx, outPacket);&#xA;&#xA;            if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF)&#xA;            {&#xA;                int abc;&#xA;                abc&#x2B;&#x2B;;&#xA;                break;&#xA;            }&#xA;            else if (ret &lt; 0)&#xA;            {&#xA;                cerr &lt;&lt; "Error: Could not receive packet from output codec" &lt;&lt; endl;&#xA;                return -1;&#xA;            }&#xA;&#xA;            //av_packet_rescale_ts(&amp;outPacket, outCodecCtx->time_base, outStream->time_base);&#xA;&#xA;            outPacket->stream_index = outStream->index;&#xA;&#xA;            outPacket->duration = av_rescale_q(1, outCodecCtx->time_base, outStream->time_base);   // Set packet duration&#xA;&#xA;            ret = av_interleaved_write_frame(outFormatCtx, outPacket);&#xA;&#xA;            static int call_write = 0;&#xA;&#xA;            call_write&#x2B;&#x2B;;&#xA;            printf("av_interleaved_write_frame %d\n", call_write);&#xA;&#xA;            av_packet_unref(outPacket);&#xA;            if (ret &lt; 0) {&#xA;                cerr &lt;&lt; "Error: Could not write packet to output file" &lt;&lt; endl;&#xA;                return -1;&#xA;            }&#xA;        }&#xA;&#xA;        av_frame_free(&amp;yuvFrame);&#xA;    }&#xA;&#xA;    // Flush the encoder&#xA;    ret = avcodec_send_frame(outCodecCtx, nullptr);&#xA;    if (ret &lt; 0) {&#xA;        std::cerr &lt;&lt; "Error flushing encoder: " &lt;&lt; std::endl;&#xA;        return -1;&#xA;    }&#xA;&#xA;    while (ret >= 0) {&#xA;        AVPacket* pkt = av_packet_alloc();&#xA;        if (!pkt) {&#xA;            std::cerr &lt;&lt; "Error allocating packet" &lt;&lt; std::endl;&#xA;            return -1;&#xA;        }&#xA;        ret = avcodec_receive_packet(outCodecCtx, pkt);&#xA;&#xA;        // Write the packet to the output file&#xA;        if (ret == 0)&#xA;        {&#xA;            pkt->stream_index = outStream->index;&#xA;            pkt->duration = av_rescale_q(1, outCodecCtx->time_base, outStream->time_base);   // &lt;---- Set packet duration&#xA;            ret = av_interleaved_write_frame(outFormatCtx, pkt);&#xA;            av_packet_unref(pkt);&#xA;            if (ret &lt; 0) {&#xA;                std::cerr &lt;&lt; "Error writing packet to output file: " &lt;&lt; std::endl;&#xA;                return -1;&#xA;            }&#xA;        }&#xA;    }&#xA;&#xA;&#xA;    // Write output trailer&#xA;    av_write_trailer(outFormatCtx);&#xA;&#xA;    // Clean up&#xA;    avcodec_close(outCodecCtx);&#xA;    avcodec_free_context(&amp;outCodecCtx);&#xA;    avformat_free_context(outFormatCtx);&#xA;&#xA;    return 0;&#xA;}&#xA;&#xA;</int></mat></cstdlib></stdexcept></sstream></fstream></cstring></vector></iostream>

    &#xA;

    Note that I have used the ffprobe tool(one of the tool from ffmpeg) to inspect the generated mp4 files.

    &#xA;

    I see that the mp4 file has 100 frames and 100 packets, but in my code, I have such lines :

    &#xA;

                static int call_write = 0;&#xA;&#xA;            call_write&#x2B;&#x2B;;&#xA;            printf("av_interleaved_write_frame %d\n", call_write);&#xA;

    &#xA;

    I just see that the av_interleaved_write_frame function is only called 50 times, not the expected 100 times, anyone can explain it ?

    &#xA;

    Thanks.

    &#xA;

    BTW, from the ffmpeg document( see here : For video, it should typically contain one compressed frame ), I see that a packet mainly has one video frame, so the ffprobe's result looks correct.

    &#xA;

    Here is the command I used to inspect the mp4 file :

    &#xA;

    ffprobe -show_frames output.mp4 >> frames.txt&#xA;ffprobe -show_packets output.mp4 >> packets.txt&#xA;

    &#xA;

    My testing code is derived from an answer in another question here : avformat_write_header() function call crashed when I try to save several RGB data to a output.mp4 file

    &#xA;

  • ffmpeg4.1.3 built with Android NDK is 4 times bigger than linux gcc

    3 juillet 2020, par ravin.wang

    FFmpeg version : 4.1.3
    &#xA;android-ndk-r19c, 44 MB (armeabi-v7a)
    &#xA;gcc-7 : 9.7 MB (x86_64)

    &#xA;&#xA;

    The configuration is almost the same :

    &#xA;&#xA;

    For android-ndk-19c :
    &#xA;I didn't link x264, under Linux x86_64, x264 is linked, so in theory Linux X86_64 links more code than the android one.

    &#xA;&#xA;

    #!/bin/bash&#xA;&#xA;# set the toolchain&#xA;TOOLCHAIN=$NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64&#xA;CROSS_PREFIX=$TOOLCHAIN/bin/arm-linux-androideabi-&#xA;rm -f $(pwd)/compat/strtod.o&#xA;function build_one&#xA;{&#xA;#configure ffmpeg w/o libx264&#xA;./configure \&#xA;    --prefix=$PREFIX \&#xA;    --disable-everything --disable-programs --disable-doc \&#xA;    --enable-ffmpeg --enable-jni \&#xA;    --enable-encoder=aac \&#xA;    --enable-encoder=mpeg4 \&#xA;    --enable-encoder=pcm_u16le --enable-encoder=pcm_s16le \&#xA;    --enable-encoder=yuv4 \&#xA;    --enable-encoder=rawvideo \&#xA;    --enable-encoder=wrapped_avframe \&#xA;    --enable-decoder=aac --enable-decoder=aac_at --enable-decoder=aac_fixed \&#xA;    --enable-decoder=aac_latm \&#xA;    --enable-decoder=ac3 --enable-decoder=ac3_at --enable-decoder=ac3_fixed \&#xA;    --enable-decoder=avs \&#xA;    --enable-decoder=eac3 \&#xA;    --enable-decoder=eac3_at \&#xA;    --enable-decoder=h263 \&#xA;    --enable-decoder=h264 \&#xA;    --enable-decoder=hevc \&#xA;    --enable-decoder=mp1 --enable-decoder=mp1_at --enable-decoder=mp1float \&#xA;    --enable-decoder=mp2 \&#xA;    --enable-decoder=mp2_at \&#xA;    --enable-decoder=mp2float \&#xA;    --enable-decoder=mp3 --enable-decoder=mp3_at --enable-decoder=mp3float \&#xA;    --enable-decoder=vp8 --enable-decoder=vp9 \&#xA;    --enable-decoder=mpeg1video \&#xA;    --enable-decoder=mpeg2video \&#xA;    --enable-decoder=mpeg4 \&#xA;    --enable-decoder=mpegvideo \&#xA;    --enable-decoder=pcm_u16le --enable-decoder=pcm_s16le \&#xA;    --enable-decoder=yuv4 \&#xA;    --enable-decoder=rawvideo \&#xA;    --enable-decoder=wrapped_avframe \&#xA;    --enable-muxer=mpegts \&#xA;    --enable-muxer=mp4 \&#xA;    --enable-muxer=matroska --enable-muxer=matroska_audio --enable-muxer=webm \&#xA;    --enable-muxer=h264 \&#xA;    --enable-muxer=hevc \&#xA;    --enable-muxer=rawvideo \&#xA;    --enable-muxer=adts \&#xA;    --enable-muxer=yuv4mpegpipe \&#xA;    --enable-demuxer=aac \&#xA;    --enable-demuxer=ac3 \&#xA;    --enable-demuxer=eac3 \&#xA;    --enable-demuxer=m4v \&#xA;    --enable-demuxer=matroska \&#xA;    --enable-demuxer=mp3 \&#xA;    --enable-demuxer=mpegps \&#xA;    --enable-demuxer=mpegts \&#xA;    --enable-demuxer=mpegvideo \&#xA;    --enable-demuxer=h263 \&#xA;    --enable-demuxer=h264 \&#xA;    --enable-demuxer=hevc \&#xA;    --enable-demuxer=mov \&#xA;    --enable-demuxer=rawvideo \&#xA;    --enable-demuxer=yuv4mpegpipe \&#xA;    --enable-parser=aac \&#xA;    --enable-parser=aac_latm \&#xA;    --enable-parser=ac3 \&#xA;    --enable-parser=h263 \&#xA;    --enable-parser=h264 \&#xA;    --enable-parser=hevc \&#xA;    --enable-parser=mpeg4video \&#xA;    --enable-parser=mpegaudio \&#xA;    --enable-parser=mpegvideo \&#xA;    --enable-parser=vp8 \&#xA;    --enable-parser=vp9 \&#xA;    --enable-protocol=file \&#xA;    --enable-bsf=aac_adtstoasc \&#xA;    --enable-bsf=h264_mp4toannexb \&#xA;    --enable-bsf=hevc_mp4toannexb \&#xA;    --enable-bsf=mpeg4_unpack_bframes \&#xA;    --enable-filter=scale \&#xA;    --disable-zlib --disable-xlib --disable-iconv --disable-alsa \&#xA;    --disable-libxcb_shape --disable-libxcb_xfixes --disable-lzma \&#xA;    --disable-sdl2 --disable-sndio --disable-bzlib --disable-libxcb \&#xA;    --disable-hwaccels \&#xA;    --target-os=android \&#xA;    --enable-cross-compile \&#xA;    --toolchain=clang-usan \&#xA;    --cross-prefix=$CROSS_PREFIX \&#xA;    --cc=$TOOLCHAIN/bin/armv7a-linux-androideabi28-clang \&#xA;    --cxx=$TOOLCHAIN/bin/armv7a-linux-androideabi28-clang&#x2B;&#x2B; \&#xA;    --extra-cflags="-Os -fpic $ADDI_CFLAGS" \&#xA;    --extra-ldflags="$ADDI_LDFLAGS" \&#xA;    --sysroot=$TOOLCHAIN/sysroot $ADDITIONAL_CONFIG_FLAG&#xA;make clean&#xA;make -j4&#xA;make install&#xA;}&#xA;&#xA;CPU=armeabi-v7a&#xA;mkdir -p $(pwd)/android/$CPU&#xA;PREFIX=$(pwd)/android/$CPU &#xA;ADDI_CFLAGS=""&#xA;ADDI_LDFLAGS="-Wl,-Bsymbolic"&#xA;ADDITIONAL_CONFIG_FLAG="--arch=arm"&#xA;build_one&#xA;

    &#xA;&#xA;

    After finishing and stripping it, 44MB ffmpeg is generated, it is horrible, but I have no idea for it, I tried to add -Os CFLAGS, but it does not help.

    &#xA;&#xA;

    Here is the X86_64 :

    &#xA;&#xA;

    #!/bin/bash&#xA;&#xA;configure()&#xA;{&#xA;    CPU=$1&#xA;    HOST=linux&#xA;    PREFIX=$(pwd)/$HOST/$CPU &#xA;    ADDI_CFLAGS="-I$(pwd)/../x264-stable/$HOST/$CPU/include"&#xA;    ADDI_LDFLAGS="-L$(pwd)/../x264-stable/$HOST/$CPU/lib"&#xA;    ADDITIONAL_CONFIG_FLAG=""&#xA;&#xA;    ./configure \&#xA;    --prefix=$PREFIX \&#xA;    --disable-everything --disable-programs --disable-doc \&#xA;    --enable-ffmpeg --enable-libx264 --enable-gpl \&#xA;    --enable-encoder=aac \&#xA;    --enable-encoder=libx264 \&#xA;    --enable-encoder=mpeg4 \&#xA;    --enable-encoder=pcm_u16le --enable-encoder=pcm_s16le \&#xA;    --enable-encoder=yuv4 \&#xA;    --enable-encoder=rawvideo \&#xA;    --enable-encoder=wrapped_avframe \&#xA;    --enable-decoder=aac \&#xA;    --enable-decoder=aac_at \&#xA;    --enable-decoder=aac_fixed \&#xA;    --enable-decoder=aac_latm \&#xA;    --enable-decoder=ac3 --enable-decoder=ac3_at --enable-decoder=ac3_fixed \&#xA;    --enable-decoder=avs \&#xA;    --enable-decoder=eac3 \&#xA;    --enable-decoder=eac3_at \&#xA;    --enable-decoder=h263 \&#xA;    --enable-decoder=h264 \&#xA;    --enable-decoder=hevc \&#xA;    --enable-decoder=mp1 --enable-decoder=mp1_at --enable-decoder=mp1float \&#xA;    --enable-decoder=mp2 \&#xA;    --enable-decoder=mp2_at \&#xA;    --enable-decoder=mp2float \&#xA;    --enable-decoder=mp3 --enable-decoder=mp3_at --enable-decoder=mp3float \&#xA;    --enable-decoder=vp8 --enable-decoder=vp9 \&#xA;    --enable-decoder=mpeg1video \&#xA;    --enable-decoder=mpeg2video \&#xA;    --enable-decoder=mpeg4 \&#xA;    --enable-decoder=mpegvideo \&#xA;    --enable-decoder=pcm_u16le --enable-decoder=pcm_s16le \&#xA;    --enable-decoder=yuv4 \&#xA;    --enable-decoder=rawvideo --enable-decoder=wrapped_avframe \&#xA;    --enable-muxer=mpegts \&#xA;    --enable-muxer=mp4 \&#xA;    --enable-muxer=matroska --enable-muxer=matroska_audio --enable-muxer=webm \&#xA;    --enable-muxer=h264 \&#xA;    --enable-muxer=hevc \&#xA;    --enable-muxer=rawvideo \&#xA;    --enable-muxer=adts \&#xA;    --enable-muxer=yuv4mpegpipe \&#xA;    --enable-demuxer=aac \&#xA;    --enable-demuxer=ac3 \&#xA;    --enable-demuxer=eac3 \&#xA;    --enable-demuxer=m4v \&#xA;    --enable-demuxer=matroska \&#xA;    --enable-demuxer=mp3 \&#xA;    --enable-demuxer=mpegps \&#xA;    --enable-demuxer=mpegts \&#xA;    --enable-demuxer=mpegvideo \&#xA;    --enable-demuxer=h263 \&#xA;    --enable-demuxer=h264 \&#xA;    --enable-demuxer=hevc \&#xA;    --enable-demuxer=mov \&#xA;    --enable-demuxer=rawvideo \&#xA;    --enable-demuxer=yuv4mpegpipe \&#xA;    --enable-parser=aac \&#xA;    --enable-parser=aac_latm \&#xA;    --enable-parser=ac3 \&#xA;    --enable-parser=h263 \&#xA;    --enable-parser=h264 \&#xA;    --enable-parser=hevc \&#xA;    --enable-parser=mpeg4video \&#xA;    --enable-parser=mpegaudio \&#xA;    --enable-parser=mpegvideo \&#xA;    --enable-parser=vp8 \&#xA;    --enable-parser=vp9 \&#xA;    --enable-protocol=file \&#xA;    --enable-bsf=aac_adtstoasc \&#xA;    --enable-bsf=h264_mp4toannexb \&#xA;    --enable-bsf=hevc_mp4toannexb \&#xA;    --enable-bsf=mpeg4_unpack_bframes \&#xA;    --enable-filter=scale \&#xA;    --disable-zlib --disable-xlib --disable-iconv \&#xA;    --disable-alsa --disable-libxcb_shape --disable-libxcb_xfixes \&#xA;    --disable-lzma --disable-sdl2 --disable-sndio \&#xA;    --disable-bzlib --disable-libxcb \&#xA;    --disable-hwaccels \&#xA;    --extra-cflags="-Os -fpic $ADDI_CFLAGS" \&#xA;    --extra-ldflags="$ADDI_LDFLAGS"&#xA;}&#xA;&#xA;build()&#xA;{&#xA;    make clean&#xA;    cpu=$1&#xA;&#xA;    echo "build $cpu"&#xA;&#xA;    configure $cpu&#xA;    make -j4&#xA;    make install&#xA;}&#xA;&#xA;build linux_x86_64&#xA;&#xA;

    &#xA;