Recherche avancée

Médias (1)

Mot : - Tags -/MediaSPIP 0.2

Autres articles (78)

  • MediaSPIP v0.2

    21 juin 2013, par

    MediaSPIP 0.2 est la première version de MediaSPIP stable.
    Sa date de sortie officielle est le 21 juin 2013 et est annoncée ici.
    Le fichier zip ici présent contient uniquement les sources de MediaSPIP en version standalone.
    Comme pour la version précédente, il est nécessaire d’installer manuellement l’ensemble des dépendances logicielles sur le serveur.
    Si vous souhaitez utiliser cette archive pour une installation en mode ferme, il vous faudra également procéder à d’autres modifications (...)

  • Organiser par catégorie

    17 mai 2013, par

    Dans MédiaSPIP, une rubrique a 2 noms : catégorie et rubrique.
    Les différents documents stockés dans MédiaSPIP peuvent être rangés dans différentes catégories. On peut créer une catégorie en cliquant sur "publier une catégorie" dans le menu publier en haut à droite ( après authentification ). Une catégorie peut être rangée dans une autre catégorie aussi ce qui fait qu’on peut construire une arborescence de catégories.
    Lors de la publication prochaine d’un document, la nouvelle catégorie créée sera proposée (...)

  • Récupération d’informations sur le site maître à l’installation d’une instance

    26 novembre 2010, par

    Utilité
    Sur le site principal, une instance de mutualisation est définie par plusieurs choses : Les données dans la table spip_mutus ; Son logo ; Son auteur principal (id_admin dans la table spip_mutus correspondant à un id_auteur de la table spip_auteurs)qui sera le seul à pouvoir créer définitivement l’instance de mutualisation ;
    Il peut donc être tout à fait judicieux de vouloir récupérer certaines de ces informations afin de compléter l’installation d’une instance pour, par exemple : récupérer le (...)

Sur d’autres sites (6130)

  • Revision 34710 : Amélioration de la fonction d’installation ... très chouette en SPIP 2.1 ...

    24 janvier 2010, par kent1@… — Log

    Amélioration de la fonction d’installation ... très chouette en SPIP 2.1 (bis ...)

  • ffmpeg undefined reference to sws_getContext

    23 septembre 2021, par Wenfei Zhu

    I am learning to use ffmpeg libraries, and have successfully compiled and run a program that demuxes and decodes a video. However, when I was trying to use the swscale library, I got a linking error "undefined reference to sws_getContext". There are similar problems on the Internet but none of them solves my problem.

    


    The full error message is

    


    /usr/bin/ld: CMakeFiles/ffmpeg_test.dir/main.cpp.o: in function `main':
main.cpp:(.text+0x44f): undefined reference to `sws_getContext'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/ffmpeg_test.dir/build.make:93: ffmpeg_test] Error 1
make[1]: *** [CMakeFiles/Makefile2:76: CMakeFiles/ffmpeg_test.dir/all] Error 2
make: *** [Makefile:84: all] Error 2


    


    Here is my Dockerfile, source file and CMakeList.

    


    # FFMPEG Image
# ref:https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu

FROM ubuntu:20.04

ARG http_proxy=''
ARG https_proxy=''
ENV HTTP_PROXY=${http_proxy}
ENV HTTPS_PROXY=${https_proxy}

RUN apt-get update \
    && DEBIAN_FRONTEND="noninteractive" \
    apt-get install -y --no-install-recommends \
        autoconf \
        automake \
        build-essential \
        cmake \
        git \
        libass-dev \
        libfreetype6-dev \
        libgnutls28-dev \
        # libsdl2-dev \
        libtool \
        # libva-dev \
        # libvdpau-dev \
        libvorbis-dev \
        # libxcb1-dev \
        # libxcb-shm0-dev \
        # libxcb-xfixes0-dev \
        meson \
        ninja-build \
        pkg-config \
        texinfo \
        wget \
        yasm \
        zlib1g-dev \
        libunistring-dev \
        python3.8-dev \
        ca-certificates

ARG FFMPEG_ROOT=/root/ffmpeg
RUN mkdir ${FFMPEG_ROOT}
WORKDIR ${FFMPEG_ROOT}

RUN mkdir sources && mkdir build && mkdir bin

# NASM
RUN cd sources \
    && wget https://www.nasm.us/pub/nasm/releasebuilds/2.15.05/nasm-2.15.05.tar.bz2 \
    && tar xjvf nasm-2.15.05.tar.bz2 \
    && cd nasm-2.15.05 \
    && ./autogen.sh \
    && PATH="${FFMPEG_ROOT}/bin:$PATH" \
        ./configure \
            --prefix="${FFMPEG_ROOT}/build" \
            --bindir="${FFMPEG_ROOT}/bin" \
            --enable-shared \
            --enable-pic \
    && make -j$(nproc) \
    && make install

# H.264 video encoder (GPL License!!!  --enable-gpl --enable-libx264)
RUN cd sources \
    && git -C x264 pull 2> /dev/null || git clone --depth 1 https://code.videolan.org/videolan/x264.git \
    && cd x264 \
    && PATH="${FFMPEG_ROOT}/bin:$PATH" \
        PKG_CONFIG_PATH="${FFMPEG_ROOT}/build/lib/pkgconfig" \
        ./configure \
            --prefix="${FFMPEG_ROOT}/build" \
            --bindir="${FFMPEG_ROOT}/bin" \
            --enable-shared \
            --enable-pic \
            --disable-cli \
    && PATH="${FFMPEG_ROOT}/bin:$PATH" make -j$(nproc) \
    && make install

# H.265/HEVC video encoder (GPL License!!!  --enable-gpl --enable-libx265)
RUN apt-get install -y --no-install-recommends libnuma-dev \
    && cd sources \
    && git -C x265_git pull 2> /dev/null || git clone https://bitbucket.org/multicoreware/x265_git \
    && cd x265_git/build/linux \
    && PATH="${FFMPEG_ROOT}/bin:$PATH" \
        cmake \
            -G "Unix Makefiles" \
            -DCMAKE_INSTALL_PREFIX="${FFMPEG_ROOT}/build" \
            -DENABLE_SHARED=on \
            -DENABLE_CLI=off \
            ../../source \
    && PATH="${FFMPEG_ROOT}/bin:$PATH" make -j$(nproc) \
    && make install

# VP8/VP9 video encoder/decoder (--enable-libvpx)
RUN cd sources \
    && git -C libvpx pull 2> /dev/null || git clone --depth 1 https://chromium.googlesource.com/webm/libvpx.git \
    && cd libvpx \
    && PATH="${FFMPEG_ROOT}/bin:$PATH" \
        ./configure \
            --prefix="${FFMPEG_ROOT}/build" \
            --disable-debug \
            --disable-examples \
            --disable-docs \
            --disable-unit-tests \
            --enable-vp9-highbitdepth \
            --as=yasm \
            --enable-pic \
            --enable-shared \
    && PATH="${FFMPEG_ROOT}/bin:$PATH" make -j$(nproc) \
    && make install

# # AAC audio encoder (NON-FREE!!!  --enable-gpl --enable-nonfree --enable-libfdk-aac)
# RUN cd sources \
#     && git -C fdk-aac pull 2> /dev/null || git clone --depth 1 https://github.com/mstorsjo/fdk-aac \
#     && cd fdk-aac \
#     && autoreconf -fiv \
#     && ./configure \
#         --prefix="${FFMPEG_ROOT}/build" \
#         --disable-shared \
#     && make -j$(nproc) \
#     && make install

# MP3 audio encoder (--enable-libmp3lame)
RUN cd sources \
    && wget -O lame-3.100.tar.gz https://downloads.sourceforge.net/project/lame/lame/3.100/lame-3.100.tar.gz \
    && tar xzvf lame-3.100.tar.gz \
    && cd lame-3.100 \
    && PATH="${FFMPEG_ROOT}/bin:$PATH" \
        ./configure \
        --prefix="${FFMPEG_ROOT}/build" \
        --bindir="${FFMPEG_ROOT}/bin" \
        --enable-shared \
        --enable-pic \
        --enable-nasm \
    && PATH="${FFMPEG_ROOT}/bin:$PATH" make -j$(nproc) \
    && make install

# Opus audio decoder and encoder (--enable-libopus)
RUN cd sources \
    && git -C opus pull 2> /dev/null || git clone --depth 1 https://github.com/xiph/opus.git \
    && cd opus \
    && ./autogen.sh \
    && ./configure \
        --prefix="${FFMPEG_ROOT}/build" \
        --enable-shared \
    && make -j$(nproc) \
    && make install

# AV1 video encoder/decoder
# encoder (--enable-libsvtav1)
RUN cd sources \
    && git -C SVT-AV1 pull 2> /dev/null || git clone https://gitlab.com/AOMediaCodec/SVT-AV1.git \
    && mkdir -p SVT-AV1/build \
    && cd SVT-AV1/build \
    && PATH="${FFMPEG_ROOT}/bin:$PATH" \
        cmake \
            -G "Unix Makefiles" \
            -DCMAKE_INSTALL_PREFIX="${FFMPEG_ROOT}/build" \
            -DCMAKE_BUILD_TYPE=Release \
            -DBUILD_DEC=OFF \
            -DBUILD_SHARED_LIBS=ON \
            .. \
    && PATH="${FFMPEG_ROOT}/bin:$PATH" make -j$(nproc)\
    && make install
# decoder (--enable-libdav1d)
RUN cd sources \
    && git -C dav1d pull 2> /dev/null || git clone --depth 1 https://code.videolan.org/videolan/dav1d.git \
    && mkdir -p dav1d/build \
    && cd dav1d/build \
    && PATH="${FFMPEG_ROOT}/bin:$PATH" \
        meson setup \
            -Denable_tools=false \
            -Denable_tests=false \
            --default-library=shared \
            .. \
            --prefix="${FFMPEG_ROOT}/build" \
            --libdir="${FFMPEG_ROOT}/build/lib" \
    && ninja -j$(nproc) \
    && ninja install

# Library for calculating the ​VMAF video quality metric (--enable-libvmaf --ld="g++")
RUN cd sources \
    && wget https://github.com/Netflix/vmaf/archive/v2.1.1.tar.gz \
    && tar xvf v2.1.1.tar.gz \
    && mkdir -p vmaf-2.1.1/libvmaf/build \
    && cd vmaf-2.1.1/libvmaf/build \
    && PATH="${FFMPEG_ROOT}/bin:$PATH" \
        meson setup \
            -Denable_tests=false \
            -Denable_docs=false \
            --buildtype=release \
            --default-library=shared \
            .. \
            --prefix "${FFMPEG_ROOT}/build" \
            --bindir="${FFMPEG_ROOT}/build/bin" \
            --libdir="${FFMPEG_ROOT}/build/lib" \
    && ninja -j$(nproc) \
    && ninja install

# FFMPEG
RUN cd sources \
    && wget -O ffmpeg-snapshot.tar.bz2 https://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2 \
    && tar xjvf ffmpeg-snapshot.tar.bz2 \
    && cd ffmpeg \
    && PATH="${FFMPEG_ROOT}/bin:$PATH" \
        PKG_CONFIG_PATH="${FFMPEG_ROOT}/build/lib/pkgconfig" \
        ./configure \
            --prefix="${FFMPEG_ROOT}/build" \
            --pkg-config-flags="--static" \
            --extra-cflags="-I${FFMPEG_ROOT}/build/include" \
            --extra-ldflags="-L${FFMPEG_ROOT}/build/lib" \
            --extra-libs="-lpthread -lm" \
            --ld="g++" \
            --bindir="${FFMPEG_ROOT}/bin" \
            --disable-debug \
            --disable-doc \
            --disable-ffplay \
            --enable-shared \
            --enable-pic \
            --enable-gpl \
            --enable-gnutls \
            # --enable-libaom \
            --enable-libass \
            # --enable-libfdk-aac \
            --enable-libfreetype \
            --enable-libmp3lame \
            --enable-libopus \
            --enable-libsvtav1 \
            --enable-libdav1d \
            --enable-libvorbis \
            --enable-libvpx \
            --enable-libx264 \
            --enable-libx265 \
            # --enable-nonfree \
    && PATH="${FFMPEG_ROOT}/bin:$PATH" make -j$(nproc) \
    && make install \
    && hash -r

# opencv
RUN apt-get update \
    & apt-get install -y --no-install-recommends libopencv-dev



    


    #include <iostream>&#xA;&#xA;extern "C" {&#xA;#include <libavutil></libavutil>avutil.h>&#xA;#include <libavcodec></libavcodec>avcodec.h>&#xA;#include <libavformat></libavformat>avformat.h>&#xA;#include <libswscale></libswscale>swscale.h>&#xA;}&#xA;&#xA;#include <opencv2></opencv2>core.hpp>&#xA;&#xA;// fix c&#x2B;&#x2B; av_err2str problem&#xA;// ref: https://github.com/joncampbell123/composite-video-simulator/issues/5&#xA;#ifdef av_err2str&#xA;#undef av_err2str&#xA;#include <string>&#xA;av_always_inline std::string av_err2string(int errnum) {&#xA;    char str[AV_ERROR_MAX_STRING_SIZE];&#xA;    return av_make_error_string(str, AV_ERROR_MAX_STRING_SIZE, errnum);&#xA;}&#xA;#define av_err2str(err) av_err2string(err).c_str()&#xA;#endif  // av_err2str&#xA;&#xA;&#xA;static int decode_packet(AVPacket *, AVCodecContext *, AVFrame *, AVStream *);&#xA;&#xA;&#xA;int main(int argc, const char *argv[]) {&#xA;    std::cout &lt;&lt; "hello world" &lt;&lt; std::endl;&#xA;    AVFormatContext *pFormatContext = avformat_alloc_context();&#xA;&#xA;    if (avformat_open_input(&amp;pFormatContext, argv[1], NULL, NULL) != 0) {&#xA;        std::cout &lt;&lt; "ERROR could not open the file\n";&#xA;        return -1;&#xA;    }&#xA;&#xA;    printf("File format %s, duration %.2fs, bit_rate %ld\n", pFormatContext->iformat->long_name, pFormatContext->duration / 1e6, pFormatContext->bit_rate);&#xA;&#xA;    if (avformat_find_stream_info(pFormatContext,  NULL) &lt; 0) {&#xA;        std::cout &lt;&lt; "ERROR could not get the stream info\n";&#xA;        return -1;&#xA;    }&#xA;&#xA;    int video_stream_index = -1;&#xA;&#xA;    printf("Number of streams %d\n", pFormatContext->nb_streams);&#xA;&#xA;    AVCodecParameters *pVideoCodecParameters;&#xA;    const AVCodec *pVideoCodec;&#xA;    AVStream *pVideoStream;&#xA;&#xA;    for (int i = 0; i &lt; pFormatContext->nb_streams; i&#x2B;&#x2B;)&#xA;    {&#xA;        AVCodecParameters *pLocalCodecParameters = pFormatContext->streams[i]->codecpar;&#xA;        const AVCodec *pLocalCodec = NULL;&#xA;        pLocalCodec = avcodec_find_decoder(pLocalCodecParameters->codec_id);&#xA;&#xA;        // print its name and bitrate&#xA;        printf("Codec %s, bit_rate %ld\n", pLocalCodec->long_name, pLocalCodecParameters->bit_rate);&#xA;&#xA;        if (pLocalCodecParameters->codec_type == AVMEDIA_TYPE_VIDEO) {&#xA;            if (video_stream_index == -1) {&#xA;                video_stream_index = i;&#xA;                pVideoCodecParameters = pLocalCodecParameters;&#xA;                pVideoCodec = pLocalCodec;&#xA;            }&#xA;            pVideoStream = pFormatContext->streams[i];&#xA;            AVRational *fps = &amp;pVideoStream->avg_frame_rate;&#xA;            AVRational *rfps = &amp;pVideoStream->r_frame_rate;&#xA;            AVRational *time_base = &amp;pVideoStream->time_base;&#xA;            printf("Video Codec: resolution %d x %d, fps %d/%d, frames %ld, time base %d/%d, rfps %d/%d\n", &#xA;                pLocalCodecParameters->width, pLocalCodecParameters->height, &#xA;                fps->num, fps->den, pVideoStream->nb_frames, time_base->num, time_base->den,&#xA;                rfps->num, rfps->den);&#xA;        } else if (pLocalCodecParameters->codec_type == AVMEDIA_TYPE_AUDIO) {&#xA;            printf("Audio Codec: %d channels, sample rate %d\n", pLocalCodecParameters->channels, pLocalCodecParameters->sample_rate);&#xA;        }&#xA;        &#xA;        if (pLocalCodec==NULL) {&#xA;            printf("ERROR unsupported codec!\n");&#xA;            // In this example if the codec is not found we just skip it&#xA;            continue;&#xA;        }&#xA;    }&#xA;&#xA;    if (video_stream_index == -1) {&#xA;        printf("File %s does not contain a video stream!\n", argv[1]);&#xA;        return -1;&#xA;    }&#xA;&#xA;    AVCodecContext *pCodecContext = avcodec_alloc_context3(pVideoCodec);&#xA;    if (!pCodecContext)&#xA;    {&#xA;        printf("failed to allocated memory for AVCodecContext\n");&#xA;        return -1;&#xA;    }&#xA;&#xA;    if (avcodec_parameters_to_context(pCodecContext, pVideoCodecParameters) &lt; 0)&#xA;    {&#xA;        printf("failed to copy codec params to codec context\n");&#xA;        return -1;&#xA;    }&#xA;&#xA;    if (avcodec_open2(pCodecContext, pVideoCodec, NULL) &lt; 0)&#xA;    {&#xA;        printf("failed to open codec through avcodec_open2\n");&#xA;        return -1;&#xA;    }&#xA;&#xA;    // https://ffmpeg.org/doxygen/trunk/structAVPacket.html&#xA;    AVPacket *pPacket = av_packet_alloc();&#xA;    if (!pPacket)&#xA;    {&#xA;        printf("failed to allocated memory for AVPacket\n");&#xA;        return -1;&#xA;    }&#xA;    &#xA;    // https://ffmpeg.org/doxygen/trunk/structAVFrame.html&#xA;    AVFrame *pFrame = av_frame_alloc();&#xA;    if (!pFrame)&#xA;    {&#xA;        printf("failed to allocated memory for AVFrame\n");&#xA;        return -1;&#xA;    }&#xA;&#xA;    SwsContext *pImgConvertContext = sws_getContext(&#xA;        pCodecContext->width,&#xA;        pCodecContext->height,&#xA;        pCodecContext->pix_fmt,&#xA;        pCodecContext->width,&#xA;        pCodecContext->height,&#xA;        AV_PIX_FMT_BGR24,&#xA;        SWS_BICUBIC,&#xA;        NULL,&#xA;        NULL,&#xA;        NULL&#xA;    );&#xA;&#xA;    int response = 0;&#xA;    int how_many_packets_to_process = 8;&#xA;&#xA;    // fill the Packet with data from the Stream&#xA;    // https://ffmpeg.org/doxygen/trunk/group__lavf__decoding.html#ga4fdb3084415a82e3810de6ee60e46a61&#xA;    while (av_read_frame(pFormatContext, pPacket) >= 0)&#xA;    {&#xA;        // if it&#x27;s the video stream&#xA;        if (pPacket->stream_index == video_stream_index) {&#xA;            printf("AVPacket->pts %" PRId64, pPacket->pts);&#xA;            std::cout &lt;&lt; std::endl;&#xA;            response = decode_packet(pPacket, pCodecContext, pFrame, pVideoStream);&#xA;            if (response &lt; 0)&#xA;                break;&#xA;            // stop it, otherwise we&#x27;ll be saving hundreds of frames&#xA;            if (--how_many_packets_to_process &lt;= 0) break;&#xA;        }&#xA;        // https://ffmpeg.org/doxygen/trunk/group__lavc__packet.html#ga63d5a489b419bd5d45cfd09091cbcbc2&#xA;        av_packet_unref(pPacket);&#xA;    }&#xA;&#xA;    avformat_close_input(&amp;pFormatContext);&#xA;    av_packet_free(&amp;pPacket);&#xA;    av_frame_free(&amp;pFrame);&#xA;    avcodec_free_context(&amp;pCodecContext);&#xA;&#xA;    std::cout &lt;&lt; "bye world" &lt;&lt; std::endl;&#xA;    return 0;&#xA;}&#xA;&#xA;static int decode_packet(AVPacket *pPacket, AVCodecContext *pCodecContext, AVFrame *pFrame, AVStream *pStream)&#xA;{&#xA;    // Supply raw packet data as input to a decoder&#xA;    // https://ffmpeg.org/doxygen/trunk/group__lavc__decoding.html#ga58bc4bf1e0ac59e27362597e467efff3&#xA;    int response = avcodec_send_packet(pCodecContext, pPacket);&#xA;    // printf("response %d\n", response);&#xA;&#xA;    if (response &lt; 0) {&#xA;        printf("Error while sending a packet to the decoder: %s\n", av_err2str(response));&#xA;        return response;&#xA;    }&#xA;&#xA;    while (response >= 0)&#xA;    {&#xA;        // Return decoded output data (into a frame) from a decoder&#xA;        // https://ffmpeg.org/doxygen/trunk/group__lavc__decoding.html#ga11e6542c4e66d3028668788a1a74217c&#xA;        response = avcodec_receive_frame(pCodecContext, pFrame);&#xA;        if (response == AVERROR(EAGAIN) || response == AVERROR_EOF) {&#xA;            break;&#xA;        } else if (response &lt; 0) {&#xA;            printf("Error while receiving a frame from the decoder: %s\n", av_err2str(response));&#xA;            return response;&#xA;        }&#xA;&#xA;        if (response >= 0) {&#xA;            float time_base = pStream->time_base.num / float(pStream->time_base.den);&#xA;            printf(&#xA;                "Frame %d (type=%c, size=%d bytes, format=%d) pts %ld timestampe %.2f key_frame %d [DTS %d]\n",&#xA;                pCodecContext->frame_number,&#xA;                av_get_picture_type_char(pFrame->pict_type),&#xA;                pFrame->pkt_size,&#xA;                pFrame->format,&#xA;                pFrame->pts,&#xA;                pFrame->pts * time_base,&#xA;                pFrame->key_frame,&#xA;                pFrame->coded_picture_number&#xA;            );&#xA;&#xA;        // char frame_filename[1024];&#xA;        // snprintf(frame_filename, sizeof(frame_filename), "%s-%d.pgm", "frame", pCodecContext->frame_number);&#xA;        // Check if the frame is a planar YUV 4:2:0, 12bpp&#xA;        // That is the format of the provided .mp4 file&#xA;        // RGB formats will definitely not give a gray image&#xA;        // Other YUV image may do so, but untested, so give a warning&#xA;        // if (pFrame->format != AV_PIX_FMT_YUV420P)&#xA;        // {&#xA;        //     printf("Warning: the generated file may not be a grayscale image, but could e.g. be just the R component if the video format is RGB");&#xA;        // }&#xA;        // save a grayscale frame into a .pgm file&#xA;        // save_gray_frame(pFrame->data[0], pFrame->linesize[0], pFrame->width, pFrame->height, frame_filename);&#xA;        }&#xA;    }&#xA;    return 0;&#xA;}&#xA;</string></iostream>

    &#xA;

    cmake_minimum_required(VERSION 3.10)&#xA;&#xA;# set the project name&#xA;project(ffmpeg_test)&#xA;&#xA;# specify the C&#x2B;&#x2B; standard&#xA;set(CMAKE_CXX_STANDARD 11)&#xA;set(CMAKE_CXX_STANDARD_REQUIRED True)&#xA;&#xA;# add the executable&#xA;add_executable(ffmpeg_test main.cpp)&#xA;&#xA;# link ffmpeg&#xA;set(FFMPEG_ROOT "/root/ffmpeg/build")&#xA;&#xA;target_include_directories(ffmpeg_test PUBLIC "${FFMPEG_ROOT}/include")&#xA;target_link_libraries(ffmpeg_test &#xA;    "${FFMPEG_ROOT}/lib/libavutil.so"&#xA;    "${FFMPEG_ROOT}/lib/libpostproc.so"&#xA;    "${FFMPEG_ROOT}/lib/libswresample.so"&#xA;    "${FFMPEG_ROOT}/lib/libswscale.so"&#xA;    "${FFMPEG_ROOT}/lib/libavfilter.so"&#xA;    "${FFMPEG_ROOT}/lib/libavdevice.so"&#xA;    "${FFMPEG_ROOT}/lib/libavformat.so"&#xA;    "${FFMPEG_ROOT}/lib/libavcodec.so"&#xA;)&#xA;&#xA;# link opencv&#xA;target_include_directories(ffmpeg_test PUBLIC "/usr/include/opencv4")&#xA;target_link_libraries(ffmpeg_test &#xA;    "/usr/lib/x86_64-linux-gnu/libopencv_core.so"&#xA;)&#xA;# find_library(OpenCV REQUIRED)&#xA;# message(STATUS ${OpenCV_VERSION})&#xA;# message(STATUS ${OpenCV_LIBS})&#xA;# message(STATUS ${OpenCV_INCLUDE_DIRS})&#xA;&#xA;

    &#xA;

  • Generating video from images and audio by FFmpeg

    24 mars 2020, par Cody

    I am new to FFmpeg and video/audio encoding. I try to use Fluent ffmpeg to generate a MP4 video from images and audio.

    There are 2 inputs only :

    If the audio duration is longer video length, just discard the excessive part of audio at the end.
    And all the images have to be shown in same duration.(i.e. The video should be in n/d FPS for n images and video with d second)

    Since the image input are not in number sequence, I use concat demuxer as input :

           let VIDEO_DURATION = 8;
           let ffmpeg = await FfmpegUtil.createCommand();
           let imageFiles: string[] = ["foo.jpg", "bar.jpg", ...]; //assume there are 67 image files
           let demuxerFile = await FfmpegUtil.createConcatDemuxerFile(imageFiles);
           let audioFile: string = "path/to/audio.wav";

           ffmpeg.input(demuxerFile)
               .inputOption(
                   "-f", "concat",
                   "-safe", "0",
               )
               .input(audioFile)
               .outputOption(
                   "-r", `${imageFiles.length}/${VIDEO_DURATION}`,
               )
               .duration(VIDEO_DURATION)
               .save("path/to/output.mp4")
           ;

    it will spawn a ffmpeg command :

    ffmpeg
       -f concat
       -safe 0
       -i path/to/demuxerFile.txt
       -i path/to/audio.wav
       -y
       -r 67/8
       -t 8
       path/to/output.mp4

    However the output file cannot be played.

    I also tried "-framerate", ${imageFiles.length}/${VIDEO_DURATION} in .outputOption(), it still output a file cannot be played and I found the frame rate always be 25 in its file property.

    Update 1 (added spawned command & ffmpeg console log) :

    spawned ffmpeg command & console log ("-r", `${imageFiles.length}/${VIDEO_DURATION}` as outputOption) :

    ffmpeg -f concat -safe 0 -i path/to/demuxerFile.txt -i path/to/audio.wav -y -r 67/8 -t 8 path/to/output_r.mp4

    ffmpeg version git-2020-01-26-5e62100 Copyright (c) 2000-2020 the FFmpeg developers
     built with gcc 9.2.1 (GCC) 20200122
     configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt --enable-amf
     libavutil      56. 38.100 / 56. 38.100
     libavcodec     58. 67.100 / 58. 67.100
     libavformat    58. 36.100 / 58. 36.100
     libavdevice    58.  9.103 / 58.  9.103
     libavfilter     7. 71.100 /  7. 71.100
     libswscale      5.  6.100 /  5.  6.100
     libswresample   3.  6.100 /  3.  6.100
     libpostproc    55.  6.100 / 55.  6.100
    Input #0, concat, from 'path/to/demuxerFile.txt':
     Duration: N/A, start: 0.000000, bitrate: N/A
       Stream #0:0: Video: mjpeg (Baseline), yuvj444p(pc, bt470bg/unknown/unknown), 4677x4677 [SAR 256:256 DAR 1:1], 25 tbr, 25 tbn, 25 tbc
    Guessed Channel Layout for Input Stream #1.0 : stereo
    Input #1, wav, from 'path/to/audio.wav':
     Metadata:
       artist          : TextAloud: IVONA Kimberly22
       date            : 2018
       genre           : Speech
       title           : 38750336.mp3
       album           : Created: 7/26/2018 4:56:13 PM
       encoder         : Lavf58.16.100
       encoded_by      : Lame MP3
     Duration: 00:00:15.57, bitrate: 705 kb/s
       Stream #1:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 22050 Hz, stereo, s16, 705 kb/s
    Stream mapping:
     Stream #0:0 -> #0:0 (mjpeg (native) -> h264 (libx264))
     Stream #1:0 -> #0:1 (pcm_s16le (native) -> aac (native))
    Press [q] to stop, [?] for help
    [libx264 @ 000001e395041400] using SAR=1/1
    [libx264 @ 000001e395041400] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
    [libx264 @ 000001e395041400] profile High 4:4:4 Predictive, level 6.0, 4:4:4, 8-bit
    [libx264 @ 000001e395041400] 264 - core 159 - H.264/MPEG-4 AVC codec - Copyleft 2003-2019 - 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=4 threads=6 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=8 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
    Output #0, mp4, to 'path/to/output_r.mp4':
     Metadata:
       encoder         : Lavf58.36.100
       Stream #0:0: Video: h264 (libx264) (avc1 / 0x31637661), yuvj444p(pc, progressive), 4677x4677 [SAR 256:256 DAR 1:1], q=-1--1, 8.38 fps, 17152 tbn, 8.38 tbc
       Metadata:
         encoder         : Lavc58.67.100 libx264
       Side data:
         cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
       Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 22050 Hz, stereo, fltp, 128 kb/s
       Metadata:
         encoder         : Lavc58.67.100 aac
    frame=    3 fps=0.0 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    
    frame=    5 fps=4.2 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A dup=0 drop=4 speed=   0x    
    frame=    6 fps=3.4 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A dup=0 drop=7 speed=   0x    
    frame=    8 fps=3.4 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A dup=0 drop=10 speed=   0x    
    frame=   10 fps=3.5 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A dup=0 drop=14 speed=   0x    
    frame=   11 fps=3.2 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A dup=0 drop=16 speed=   0x    
    frame=   13 fps=3.2 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A dup=0 drop=20 speed=   0x    
    frame=   14 fps=3.0 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A dup=0 drop=22 speed=   0x    
    frame=   16 fps=3.1 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A dup=0 drop=26 speed=   0x    
    frame=   17 fps=2.9 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A dup=0 drop=28 speed=   0x    
    frame=   18 fps=2.8 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A dup=0 drop=31 speed=   0x    
    frame=   20 fps=2.9 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A dup=0 drop=34 speed=   0x    
    frame=   21 fps=2.8 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A dup=0 drop=36 speed=   0x    
    frame=   23 fps=2.9 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A dup=0 drop=40 speed=   0x    
    frame=   24 fps=2.8 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A dup=0 drop=42 speed=   0x    
    frame=   24 fps=0.7 q=-1.0 Lsize=     752kB time=00:00:08.03 bitrate= 766.4kbits/s dup=0 drop=43 speed=0.22x    
    video:624kB audio:125kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.359236%
    [libx264 @ 000001e395041400] frame I:1     Avg QP:12.79  size:257554
    [libx264 @ 000001e395041400] frame P:15    Avg QP:13.10  size: 20487
    [libx264 @ 000001e395041400] frame B:8     Avg QP:13.10  size:  9231
    [libx264 @ 000001e395041400] consecutive B-frames: 45.8% 25.0% 12.5% 16.7%
    [libx264 @ 000001e395041400] mb I  I16..4: 18.4% 79.2%  2.4%
    [libx264 @ 000001e395041400] mb P  I16..4:  1.0%  3.3%  0.4%  P16..4:  1.0%  0.2%  0.2%  0.0%  0.0%    skip:93.9%
    [libx264 @ 000001e395041400] mb B  I16..4:  0.1%  0.2%  0.1%  B16..8:  1.8%  0.1%  0.0%  direct: 2.9%  skip:94.7%  L0:58.1% L1:40.2% BI: 1.7%
    [libx264 @ 000001e395041400] 8x8 transform intra:75.0% inter:82.7%
    [libx264 @ 000001e395041400] coded y,u,v intra: 6.1% 3.5% 4.4% inter: 0.2% 1.2% 0.5%
    [libx264 @ 000001e395041400] i16 v,h,dc,p: 80% 16%  3%  2%
    [libx264 @ 000001e395041400] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 46%  8% 44%  0%  0%  0%  0%  0%  0%
    [libx264 @ 000001e395041400] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 29% 27% 25%  3%  3%  3%  4%  3%  3%
    [libx264 @ 000001e395041400] Weighted P-Frames: Y:0.0% UV:0.0%
    [libx264 @ 000001e395041400] ref P L0: 75.6%  3.3% 14.8%  6.3%
    [libx264 @ 000001e395041400] ref B L0: 88.6% 10.7%  0.7%
    [libx264 @ 000001e395041400] ref B L1: 98.7%  1.3%
    [libx264 @ 000001e395041400] kb/s:1783.06
    [aac @ 000001e3951e7f80] Qavg: 55135.730

    spawned ffmpeg command & console log ("-framerate", `${imageFiles.length}/${VIDEO_DURATION}` as outputOption) :

    ffmpeg -f concat -safe 0 -i path/to/demuxerFile.txt -i path/to/audio.wav -y -framerate 67/8 -t 8 path/to/output_framerate.mp4

    ffmpeg version git-2020-01-26-5e62100 Copyright (c) 2000-2020 the FFmpeg developers
     built with gcc 9.2.1 (GCC) 20200122
     configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt --enable-amf
     libavutil      56. 38.100 / 56. 38.100
     libavcodec     58. 67.100 / 58. 67.100
     libavformat    58. 36.100 / 58. 36.100
     libavdevice    58.  9.103 / 58.  9.103
     libavfilter     7. 71.100 /  7. 71.100
     libswscale      5.  6.100 /  5.  6.100
     libswresample   3.  6.100 /  3.  6.100
     libpostproc    55.  6.100 / 55.  6.100
    Input #0, concat, from 'path/to/demuxerFile.txt':
     Duration: N/A, start: 0.000000, bitrate: N/A
       Stream #0:0: Video: mjpeg (Baseline), yuvj444p(pc, bt470bg/unknown/unknown), 4677x4677 [SAR 256:256 DAR 1:1], 25 tbr, 25 tbn, 25 tbc
    Guessed Channel Layout for Input Stream #1.0 : stereo
    Input #1, wav, from 'path/to/audio.wav':
     Metadata:
       artist          : TextAloud: IVONA Kimberly22
       date            : 2018
       genre           : Speech
       title           : 38750336.mp3
       album           : Created: 7/26/2018 4:56:13 PM
       encoder         : Lavf58.16.100
       encoded_by      : Lame MP3
     Duration: 00:00:15.57, bitrate: 705 kb/s
       Stream #1:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 22050 Hz, stereo, s16, 705 kb/s
    Stream mapping:
     Stream #0:0 -> #0:0 (mjpeg (native) -> h264 (libx264))
     Stream #1:0 -> #0:1 (pcm_s16le (native) -> aac (native))
    Press [q] to stop, [?] for help
    [libx264 @ 000002460bda4740] using SAR=1/1
    [libx264 @ 000002460bda4740] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
    [libx264 @ 000002460bda4740] profile High 4:4:4 Predictive, level 6.0, 4:4:4, 8-bit
    [libx264 @ 000002460bda4740] 264 - core 159 - H.264/MPEG-4 AVC codec - Copyleft 2003-2019 - 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=4 threads=6 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=25 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
    Output #0, mp4, to 'path/to/output_framerate.mp4':
     Metadata:
       encoder         : Lavf58.36.100
       Stream #0:0: Video: h264 (libx264) (avc1 / 0x31637661), yuvj444p(pc, progressive), 4677x4677 [SAR 256:256 DAR 1:1], q=-1--1, 25 fps, 12800 tbn, 25 tbc
       Metadata:
         encoder         : Lavc58.67.100 libx264
       Side data:
         cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
       Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 22050 Hz, stereo, fltp, 128 kb/s
       Metadata:
         encoder         : Lavc58.67.100 aac
    frame=    3 fps=0.0 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    
    frame=    6 fps=5.0 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    
    frame=    9 fps=5.0 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    
    frame=   12 fps=5.0 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    
    frame=   14 fps=4.6 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    
    frame=   16 fps=4.4 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    
    frame=   18 fps=3.9 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    
    frame=   20 fps=3.9 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    
    frame=   22 fps=3.8 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    
    frame=   23 fps=3.6 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    
    frame=   25 fps=3.6 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    
    frame=   27 fps=3.3 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    
    frame=   28 fps=3.1 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    
    frame=   30 fps=3.1 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    
    frame=   33 fps=3.2 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    
    frame=   36 fps=3.3 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    
    frame=   38 fps=3.1 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    
    frame=   39 fps=3.0 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    
    frame=   40 fps=2.6 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    
    frame=   41 fps=2.4 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    
    frame=   42 fps=2.0 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    
    frame=   43 fps=1.9 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    
    frame=   44 fps=1.9 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    
    frame=   45 fps=1.8 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    
    frame=   46 fps=1.8 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    
    frame=   47 fps=1.4 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    
    frame=   49 fps=1.5 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    
    frame=   50 fps=1.5 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    
    frame=   51 fps=1.5 q=28.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    
    frame=   51 fps=1.3 q=28.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x    
    frame=   52 fps=1.3 q=28.0 size=       0kB time=00:00:00.04 bitrate=   8.3kbits/s speed=0.00114x    
    frame=   53 fps=1.3 q=28.0 size=       0kB time=00:00:00.04 bitrate=   8.3kbits/s speed=0.00111x    
    frame=   54 fps=1.2 q=28.0 size=       0kB time=00:00:00.04 bitrate=   8.3kbits/s speed=0.00101x    
    frame=   55 fps=1.2 q=28.0 size=       0kB time=00:00:00.13 bitrate=   2.8kbits/s speed=0.00297x    
    frame=   56 fps=1.1 q=28.0 size=       0kB time=00:00:00.18 bitrate=   2.1kbits/s speed=0.00377x    
    frame=   57 fps=1.1 q=28.0 size=     256kB time=00:00:00.23 bitrate=9033.3kbits/s speed=0.00461x    
    frame=   58 fps=1.1 q=28.0 size=     256kB time=00:00:00.27 bitrate=7527.8kbits/s speed=0.00514x    
    frame=   59 fps=1.0 q=28.0 size=     256kB time=00:00:00.32 bitrate=6452.4kbits/s speed=0.00571x    
    frame=   60 fps=1.0 q=28.0 size=     256kB time=00:00:00.37 bitrate=5645.8kbits/s speed=0.00643x    
    frame=   62 fps=1.0 q=28.0 size=     256kB time=00:00:00.37 bitrate=5645.8kbits/s speed=0.00605x    
    frame=   62 fps=1.0 q=28.0 size=     256kB time=00:00:00.41 bitrate=5018.5kbits/s speed=0.00668x    
    frame=   63 fps=1.0 q=28.0 size=     256kB time=00:00:00.46 bitrate=4516.7kbits/s speed=0.00727x    
    frame=   64 fps=1.0 q=28.0 size=     256kB time=00:00:00.51 bitrate=4106.1kbits/s speed=0.00778x    
    frame=   65 fps=1.0 q=28.0 size=     256kB time=00:00:00.55 bitrate=3763.9kbits/s speed=0.00827x    
    frame=   66 fps=1.0 q=28.0 size=     256kB time=00:00:00.60 bitrate=3474.4kbits/s speed=0.00884x    
    frame=   67 fps=1.0 q=28.0 size=     256kB time=00:00:00.65 bitrate=3226.2kbits/s speed=0.00943x    
    frame=   67 fps=0.6 q=-1.0 Lsize=     872kB time=00:00:08.03 bitrate= 888.9kbits/s speed=0.0752x    
    video:744kB audio:125kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.391708%
    [libx264 @ 000002460bda4740] frame I:1     Avg QP:15.80  size:216204
    [libx264 @ 000002460bda4740] frame P:29    Avg QP:15.19  size: 10747
    [libx264 @ 000002460bda4740] frame B:37    Avg QP:17.07  size:  6300
    [libx264 @ 000002460bda4740] consecutive B-frames: 17.9% 14.9% 31.3% 35.8%
    [libx264 @ 000002460bda4740] mb I  I16..4: 11.4% 86.0%  2.6%
    [libx264 @ 000002460bda4740] mb P  I16..4:  0.5%  1.9%  0.2%  P16..4:  0.7%  0.2%  0.1%  0.0%  0.0%    skip:96.5%
    [libx264 @ 000002460bda4740] mb B  I16..4:  0.1%  0.2%  0.0%  B16..8:  1.3%  0.2%  0.0%  direct: 0.7%  skip:97.5%  L0:57.4% L1:40.7% BI: 1.9%
    [libx264 @ 000002460bda4740] 8x8 transform intra:79.7% inter:31.4%
    [libx264 @ 000002460bda4740] coded y,u,v intra: 5.7% 2.9% 3.7% inter: 0.1% 0.5% 0.2%
    [libx264 @ 000002460bda4740] i16 v,h,dc,p: 70% 23%  4%  2%
    [libx264 @ 000002460bda4740] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 45%  8% 45%  0%  0%  0%  0%  0%  0%
    [libx264 @ 000002460bda4740] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 29% 26% 25%  3%  3%  4%  4%  3%  2%
    [libx264 @ 000002460bda4740] Weighted P-Frames: Y:0.0% UV:0.0%
    [libx264 @ 000002460bda4740] ref P L0: 72.6%  3.0% 16.6%  7.7%
    [libx264 @ 000002460bda4740] ref B L0: 75.7% 20.6%  3.7%
    [libx264 @ 000002460bda4740] ref B L1: 97.7%  2.3%
    [libx264 @ 000002460bda4740] kb/s:2271.59
    [aac @ 000002460bda8580] Qavg: 55135.730