Recherche avancée

Médias (3)

Mot : - Tags -/plugin

Autres articles (60)

  • Les autorisations surchargées par les plugins

    27 avril 2010, par

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

  • Ajouter notes et légendes aux images

    7 février 2011, par

    Pour pouvoir ajouter notes et légendes aux images, la première étape est d’installer le plugin "Légendes".
    Une fois le plugin activé, vous pouvez le configurer dans l’espace de configuration afin de modifier les droits de création / modification et de suppression des notes. Par défaut seuls les administrateurs du site peuvent ajouter des notes aux images.
    Modification lors de l’ajout d’un média
    Lors de l’ajout d’un média de type "image" un nouveau bouton apparait au dessus de la prévisualisation (...)

  • Soumettre améliorations et plugins supplémentaires

    10 avril 2011

    Si vous avez développé une nouvelle extension permettant d’ajouter une ou plusieurs fonctionnalités utiles à MediaSPIP, faites le nous savoir et son intégration dans la distribution officielle sera envisagée.
    Vous pouvez utiliser la liste de discussion de développement afin de le faire savoir ou demander de l’aide quant à la réalisation de ce plugin. MediaSPIP étant basé sur SPIP, il est également possible d’utiliser le liste de discussion SPIP-zone de SPIP pour (...)

Sur d’autres sites (6292)

  • 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;

  • FFmpeg unexpected behavior using -loop flag

    7 décembre 2020, par all jazz

    Dear hackers of the world !

    &#xA;

    I've been trying to use the beloved FFmpeg library to create a video from an image loop and audio using the famous Docker FFmpeg image, but it has been driving me crazy not producing the expected results (the results that I get when I run the ffmpeg command with the equivalent version on my Macbook).

    &#xA;

    Here is the command :

    &#xA;

    docker run -v $(pwd):$(pwd) -w $(pwd) jrottenberg/ffmpeg:4.3-alpine \&#xA;    -y \&#xA;    -stats \&#xA;    -loop 1 -i files/image.jpg \&#xA;    -i files/a.mp3 \&#xA;    -c:v libx265 -pix_fmt yuv420p10 \&#xA;    -c:a aac \&#xA;    -movflags &#x2B;faststart \&#xA;    -shortest \&#xA;    -f mp4 test.mp4&#xA;

    &#xA;

    It should create a test.mp4 with the provided audio and image that is ready to be uploaded to the unfortunate Youtube.

    &#xA;

    When I do this, the video seems to be lacking moov atoms (if I try to analyse it). Strangely enough, if I run this two times using the Docker image (overriding the same file), the video file will magically start to work.

    &#xA;

    I also tried using different ffmpeg os images and versions. It seems that ffmpeg docummentation and code repo could also benefit from some care and love.

    &#xA;

    What else I could do to get this fixed ?

    &#xA;

    Here is the output from the console :

    &#xA;

            -y \&#xA;        -stats \&#xA;        -loop 1 -i files/image.jpg \&#xA;        -i files/a.mp3 \&#xA;        -c:v libx265 -pix_fmt yuv420p10 \&#xA;        -c:a aac \&#xA;        -movflags &#x2B;faststart \&#xA;        -shortest \&#xA;        -f mp4 test30.mp4&#xA;ffmpeg version 4.3.1 Copyright (c) 2000-2020 the FFmpeg developers&#xA;  built with gcc 6.4.0 (Alpine 6.4.0)&#xA;  configuration: --disable-debug --disable-doc --disable-ffplay --enable-shared --enable-avresample --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-gpl --enable-libass --enable-fontconfig --enable-libfreetype --enable-libvidstab --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libxcb --enable-libx265 --enable-libxvid --enable-libx264 --enable-nonfree --enable-openssl --enable-libfdk_aac --enable-postproc --enable-small --enable-version3 --enable-libbluray --enable-libzmq --extra-libs=-ldl --prefix=/opt/ffmpeg --enable-libopenjpeg --enable-libkvazaar --enable-libaom --extra-libs=-lpthread --enable-libsrt --enable-libaribb24 --extra-cflags=-I/opt/ffmpeg/include --extra-ldflags=-L/opt/ffmpeg/lib&#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;  libpostproc    55.  7.100 / 55.  7.100&#xA;Input #0, image2, from &#x27;files/image.jpg&#x27;:&#xA;  Duration: 00:00:00.04, start: 0.000000, bitrate: 34300 kb/s&#xA;    Stream #0:0: Video: mjpeg, gray(bt470bg/unknown/unknown), 500x500 [SAR 240:240 DAR 1:1], 25 fps, 25 tbr, 25 tbn, 25 tbc&#xA;Input #1, mp3, from &#x27;files/a.mp3&#x27;:&#xA;  Metadata:&#xA;    title           : Visions&#xA;    artist          : Hattori Hanzo&#xA;    album           : Visions&#xA;    encoded_by      : Fission&#xA;    encoder         : Lavf58.45.100&#xA;    TLEN            : 16039&#xA;    track           : 1&#xA;  Duration: 00:00:16.04, start: 0.000000, bitrate: 199 kb/s&#xA;    Stream #1:0: Audio: mp3, 44100 Hz, stereo, fltp, 191 kb/s&#xA;    Stream #1:1: Video: mjpeg, yuvj444p(pc, bt470bg/unknown/unknown), 500x500 [SAR 300:300 DAR 1:1], 90k tbr, 90k tbn, 90k tbc (attached pic)&#xA;    Metadata:&#xA;      comment         : Other&#xA;Stream mapping:&#xA;  Stream #0:0 -> #0:0 (mjpeg (native) -> hevc (libx265))&#xA;  Stream #1:0 -> #0:1 (mp3 (mp3float) -> aac (native))&#xA;Press [q] to stop, [?] for help&#xA;x265 [info]: HEVC encoder version 3.1.1&#x2B;1-04b37fdfd2dc&#xA;x265 [info]: build info [Linux][GCC 6.4.0][64 bit] 10bit&#xA;x265 [info]: using cpu capabilities: MMX2 SSE2Fast LZCNT SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2&#xA;x265 [info]: Main 10 profile, Level-3 (Main tier)&#xA;x265 [info]: Thread pool created using 8 threads&#xA;x265 [info]: Slices                              : 1&#xA;x265 [info]: frame threads / pool features       : 3 / wpp(8 rows)&#xA;x265 [warning]: Source height &lt; 720p; disabling lookahead-slices&#xA;x265 [info]: Coding QT: max CU size, min CU size : 64 / 8&#xA;x265 [info]: Residual QT: max TU size, max depth : 32 / 1 inter / 1 intra&#xA;x265 [info]: ME / range / subpel / merge         : hex / 57 / 2 / 3&#xA;x265 [info]: Keyframe min / max / scenecut / bias: 25 / 250 / 40 / 5.00&#xA;x265 [info]: Lookahead / bframes / badapt        : 20 / 4 / 2&#xA;x265 [info]: b-pyramid / weightp / weightb       : 1 / 1 / 0&#xA;x265 [info]: References / ref-limit  cu / depth  : 3 / off / on&#xA;x265 [info]: AQ: mode / str / qg-size / cu-tree  : 2 / 1.0 / 32 / 1&#xA;x265 [info]: Rate Control / qCompress            : CRF-28.0 / 0.60&#xA;x265 [info]: tools: rd=3 psy-rd=2.00 early-skip rskip signhide tmvp b-intra&#xA;x265 [info]: tools: strong-intra-smoothing deblock sao&#xA;Output #0, mp4, to &#x27;test30.mp4&#x27;:&#xA;  Metadata:&#xA;    encoder         : Lavf58.45.100&#xA;    Stream #0:0: Video: hevc (libx265) (hev1 / 0x31766568), yuv420p10le(progressive), 500x500 [SAR 1:1 DAR 1:1], q=-1--1, 25 fps, 12800 tbn, 25 tbc&#xA;    Metadata:&#xA;      encoder         : Lavc58.91.100 libx265&#xA;    Side data:&#xA;      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A&#xA;    Stream #0:1: Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s&#xA;    Metadata:&#xA;      encoder         : Lavc58.91.100 aac&#xA;frame=   52 fps=0.0 q=33.0 size=       0kB time=00:00:00.80 bitrate=   0.4kbits/frame=  120 fps=119 q=33.0 size=       0kB time=00:00:03.52 bitrate=   0.1kbits/frame=  190 fps=125 q=33.0 size=       0kB time=00:00:06.33 bitrate=   0.1kbits/frame=  257 fps=127 q=33.0 size=       0kB time=00:00:09.00 bitrate=   0.0kbits/frame=  303 fps=120 q=35.0 size=     256kB time=00:00:10.86 bitrate= 193.0kbits/frame=  373 fps=123 q=36.0 size=     256kB time=00:00:13.65 bitrate= 153.6kbits/[mp4 @ 0x55d481bc6980] Starting second pass: moving the moov atom to the beginning of the file&#xA;frame=  432 fps=121 q=36.0 Lsize=     379kB time=00:00:17.16 bitrate= 180.8kbits/s speed= 4.8x&#xA;video:107kB audio:255kB subtitle:0kB other streams:0kB global headers:2kB muxing overhead: 4.667185%&#xA;x265 [info]: frame I:      2, Avg QP:23.55  kb/s: 8634.80&#xA;x265 [info]: frame P:    147, Avg QP:33.00  kb/s: 13.49&#xA;x265 [info]: frame B:    283, Avg QP:35.71  kb/s: 8.06&#xA;x265 [info]: Weighted P-Frames: Y:0.0% UV:0.0%&#xA;x265 [info]: consecutive B-frames: 34.2% 10.1% 20.8% 1.3% 33.6%&#xA;&#xA;encoded 432 frames in 3.56s (121.32 fps), 49.84 kb/s, Avg QP:34.73&#xA;[aac @ 0x55d481b23ac0] Qavg: 563.168```&#xA;

    &#xA;

  • Receive RTMP stream with OpenCV (python)

    12 février 2024, par Overnout

    I'm trying to process an RTMP stream in Python, using OpenCV2 but I'm not able to get OpenCV to capture it.

    &#xA;

    I can run FFmpeg/FFplay from the command line and receive the stream successfully.&#xA;What could cause OpenCV to fail opening the stream in listening mode ?

    &#xA;

    Here is my code :

    &#xA;

    import cv2&#xA;&#xA;cap = cv2.VideoCapture("rtmp://0.0.0.0/live/stream", cv2.CAP_FFMPEG)&#xA;&#xA;if not cap.isOpened():&#xA;    print("Cannot open video source")&#xA;    exit()&#xA;

    &#xA;

    And the output :

    &#xA;

    [tcp @ 00000192c490d640] Connection to tcp://0.0.0.0:1935 failed: Error number -138 occurred&#xA;[rtmp @ 00000192c490d580] Cannot open connection tcp://0.0.0.0:1935 Cannot open video source&#xA;

    &#xA;

    Here is the output of cv2.getBuildInformation()

    &#xA;

    General configuration for OpenCV 4.9.0 =====================================&#xA;  Version control:               4.9.0&#xA;&#xA;  Platform:&#xA;    Timestamp:                   2023-12-31T11:21:12Z&#xA;    Host:                        Windows 10.0.17763 AMD64&#xA;    CMake:                       3.24.2&#xA;    CMake generator:             Visual Studio 14 2015&#xA;    CMake build tool:            MSBuild.exe&#xA;    MSVC:                        1900&#xA;    Configuration:               Debug Release&#xA;&#xA;  CPU/HW features:&#xA;    Baseline:                    SSE SSE2 SSE3&#xA;      requested:                 SSE3&#xA;    Dispatched code generation:  SSE4_1 SSE4_2 FP16 AVX AVX2&#xA;      requested:                 SSE4_1 SSE4_2 AVX FP16 AVX2 AVX512_SKX&#xA;      SSE4_1 (16 files):         &#x2B; SSSE3 SSE4_1&#xA;      SSE4_2 (1 files):          &#x2B; SSSE3 SSE4_1 POPCNT SSE4_2&#xA;      FP16 (0 files):            &#x2B; SSSE3 SSE4_1 POPCNT SSE4_2 FP16 AVX&#xA;      AVX (8 files):             &#x2B; SSSE3 SSE4_1 POPCNT SSE4_2 AVX&#xA;      AVX2 (36 files):           &#x2B; SSSE3 SSE4_1 POPCNT SSE4_2 FP16 FMA3 AVX AVX2&#xA;&#xA;  C/C&#x2B;&#x2B;:&#xA;    Built as dynamic libs?:      NO&#xA;    C&#x2B;&#x2B; standard:                11&#xA;    C&#x2B;&#x2B; Compiler:                C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/x86_amd64/cl.exe  (ver 19.0.24247.2)&#xA;    C&#x2B;&#x2B; flags (Release):         /DWIN32 /D_WINDOWS /W4 /GR  /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /Oi  /fp:precise     /EHa /wd4127 /wd4251 /wd4324 /wd4275 /wd4512 /wd4589 /wd4819 /MP  /O2 /Ob2 /DNDEBUG &#xA;    C&#x2B;&#x2B; flags (Debug):           /DWIN32 /D_WINDOWS /W4 /GR  /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /Oi  /fp:precise     /EHa /wd4127 /wd4251 /wd4324 /wd4275 /wd4512 /wd4589 /wd4819 /MP  /Zi /Ob0 /Od /RTC1 &#xA;    C Compiler:                  C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/x86_amd64/cl.exe&#xA;    C flags (Release):           /DWIN32 /D_WINDOWS /W3  /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /Oi  /fp:precise     /MP   /O2 /Ob2 /DNDEBUG &#xA;    C flags (Debug):             /DWIN32 /D_WINDOWS /W3  /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /Oi  /fp:precise     /MP /Zi /Ob0 /Od /RTC1 &#xA;    Linker flags (Release):      /machine:x64  /NODEFAULTLIB:atlthunk.lib /INCREMENTAL:NO  /NODEFAULTLIB:libcmtd.lib /NODEFAULTLIB:libcpmtd.lib /NODEFAULTLIB:msvcrtd.lib&#xA;    Linker flags (Debug):        /machine:x64  /NODEFAULTLIB:atlthunk.lib /debug /INCREMENTAL  /NODEFAULTLIB:libcmt.lib /NODEFAULTLIB:libcpmt.lib /NODEFAULTLIB:msvcrt.lib&#xA;    ccache:                      NO&#xA;    Precompiled headers:         YES&#xA;    Extra dependencies:          wsock32 comctl32 gdi32 ole32 setupapi ws2_32&#xA;    3rdparty dependencies:       libprotobuf ade ittnotify libjpeg-turbo libwebp libpng libtiff libopenjp2 IlmImf zlib ippiw ippicv&#xA;&#xA;  OpenCV modules:&#xA;    To be built:                 calib3d core dnn features2d flann gapi highgui imgcodecs imgproc ml objdetect photo python3 stitching video videoio&#xA;    Disabled:                    java world&#xA;    Disabled by dependency:      -&#xA;    Unavailable:                 python2 ts&#xA;    Applications:                -&#xA;    Documentation:               NO&#xA;    Non-free algorithms:         NO&#xA;&#xA;  Windows RT support:            NO&#xA;&#xA;  GUI:                           WIN32UI&#xA;    Win32 UI:                    YES&#xA;    VTK support:                 NO&#xA;&#xA;  Media I/O: &#xA;    ZLib:                        build (ver 1.3)&#xA;    JPEG:                        build-libjpeg-turbo (ver 2.1.3-62)&#xA;      SIMD Support Request:      YES&#xA;      SIMD Support:              NO&#xA;    WEBP:                        build (ver encoder: 0x020f)&#xA;    PNG:                         build (ver 1.6.37)&#xA;    TIFF:                        build (ver 42 - 4.2.0)&#xA;    JPEG 2000:                   build (ver 2.5.0)&#xA;    OpenEXR:                     build (ver 2.3.0)&#xA;    HDR:                         YES&#xA;    SUNRASTER:                   YES&#xA;    PXM:                         YES&#xA;    PFM:                         YES&#xA;&#xA;  Video I/O:&#xA;    DC1394:                      NO&#xA;    FFMPEG:                      YES (prebuilt binaries)&#xA;      avcodec:                   YES (58.134.100)&#xA;      avformat:                  YES (58.76.100)&#xA;      avutil:                    YES (56.70.100)&#xA;      swscale:                   YES (5.9.100)&#xA;      avresample:                YES (4.0.0)&#xA;    GStreamer:                   NO&#xA;    DirectShow:                  YES&#xA;    Media Foundation:            YES&#xA;      DXVA:                      YES&#xA;&#xA;  Parallel framework:            Concurrency&#xA;&#xA;  Trace:                         YES (with Intel ITT)&#xA;&#xA;  Other third-party libraries:&#xA;    Intel IPP:                   2021.11.0 [2021.11.0]&#xA;           at:                   D:/a/opencv-python/opencv-python/_skbuild/win-amd64-3.7/cmake-build/3rdparty/ippicv/ippicv_win/icv&#xA;    Intel IPP IW:                sources (2021.11.0)&#xA;              at:                D:/a/opencv-python/opencv-python/_skbuild/win-amd64-3.7/cmake-build/3rdparty/ippicv/ippicv_win/iw&#xA;    Lapack:                      NO&#xA;    Eigen:                       NO&#xA;    Custom HAL:                  NO&#xA;    Protobuf:                    build (3.19.1)&#xA;    Flatbuffers:                 builtin/3rdparty (23.5.9)&#xA;&#xA;  OpenCL:                        YES (NVD3D11)&#xA;    Include path:                D:/a/opencv-python/opencv-python/opencv/3rdparty/include/opencl/1.2&#xA;    Link libraries:              Dynamic load&#xA;&#xA;  Python 3:&#xA;    Interpreter:                 C:/hostedtoolcache/windows/Python/3.7.9/x64/python.exe (ver 3.7.9)&#xA;    Libraries:                   C:/hostedtoolcache/windows/Python/3.7.9/x64/libs/python37.lib (ver 3.7.9)&#xA;    numpy:                       C:/hostedtoolcache/windows/Python/3.7.9/x64/lib/site-packages/numpy/core/include (ver 1.17.0)&#xA;    install path:                python/cv2/python-3&#xA;&#xA;  Python (for build):            C:\hostedtoolcache\windows\Python\3.7.9\x64\python.exe&#xA;&#xA;  Java:                          &#xA;    ant:                         NO&#xA;    Java:                        YES (ver 1.8.0.392)&#xA;    JNI:                         C:/hostedtoolcache/windows/Java_Temurin-Hotspot_jdk/8.0.392-8/x64/include C:/hostedtoolcache/windows/Java_Temurin-Hotspot_jdk/8.0.392-8/x64/include/win32 C:/hostedtoolcache/windows/Java_Temurin-Hotspot_jdk/8.0.392-8/x64/include&#xA;    Java wrappers:               NO&#xA;    Java tests:                  NO&#xA;&#xA;  Install to:                    D:/a/opencv-python/opencv-python/_skbuild/win-amd64-3.7/cmake-install&#xA;-----------------------------------------------------------------&#xA;

    &#xA;