Linux开发:论ffmpeg的使用

一.简介

最近在搞ffmpeg,发现ffmpeg是用linux编译的,对windows用户极为不友好,所以目前还在研究怎么在windows上编译ffmpeg,我记得以前编译ffmpeg挺简单的,现在版本高了之后变复杂了

ffmpeg version 4.4 built with gcc 10.2.0(Rev6, Built by MSYS2 project)

configuration: --enable-gpl

        --enable-version3

        --enable-shared

        --disable-w32threads

        --disable-autodetect

        --enable-fontconfig

        --enable-iconv

        --enable-gnutls

        --enable-libxml2

        --enable-gmp

        --enable-lzma

        --enable-libsnappy

        --enable-zlib

                --enable-librist

        --enable-libsrt

        --enable-libssh

        --enable-libzmq

        --enable-avisynth

        --enable-libbluray

        --enable-libcaca

        --enable-sdl2

        --enable-libdavld

        --enable-libzvbi

        --enable-libravle

        --enable-libsvtavl

        --enable-libwebp

        --enable-libx264

        --enable-libx265

        --enable-libxvid

        --enable-libaom

        --enable-libopenjpeg

        --enable-libvpx

        --enable-libass

        --enable-freiOr

        --enable-libfreetype

        --enable-libfribidi

        --enable-libvidstab

        --enable-libvmaf

        --enable-libzimg

        --enable-amf

        --enable-cuda-llvm

        --enable-cuvid

        --enable-ffnvcodec

        --enable-nvdec

        --enable-nvenc

        --enable-d3dllva

        --enable-dxva2

        --enable-libmfx

        --enable-libglslang

        --enable-vulkan

        --enable-opencl

        --enable-libcdio

        --enable-libgme

        --enable-libmodplug

        --enable-libopenmpt

        --enable-libopencore-amrwb

        --enable-libmp3lame

        --enable-libshine

        --enable-libtheora

        --enable-libtwolame

        --enable-libvo-amrwbenc

        --enable-libilbc

        --enable-libgsm

        --enable-libopencore-amrnb

        --enable-libopus

        --enable-libspeex

        --enable-libvorbis

        --enable-ladspa

           --enable-libbs2b

        --enable-libflite

        --enable-libmysofa

        --enable-librubberband

        --enable-libsoxr

        --enable-chromaprint

一.libavutil

二.libavcodec

三.libavformat

四.libavdevice

五.libavfilter

六.libswscale

 

七.libswresample

 

八.libpostproc

九.被否决的函数

1.avcodec_encode_video2被否决


旧版:

int
AnimationMp4VideoGeneration::WriteVideoFrame(AVFormatContext* oc, OutputStream* ost) { int ret; AVCodecContext* c; AVFrame* frame; int got_packet = 0; AVPacket pkt = {0}; c = ost->enc; frame = GetVideoFrame(ost); av_init_packet(&pkt); /* encode the image */ ret = avcodec_encode_video2(c, &pkt, frame, &got_packet); if (ret < 0) { LOG("Error encoding video frame:%s "); exit(1); } if (!got_packet) { ret = WriteFrame(oc, &c->time_base, ost->st, &pkt); } else { ret = 0; } if (ret < 0) { LOG("Error while writing video frame:%s "); exit(1); } return (frame || got_packet) ? 0 : 1; }

新版:

int
AnimationMp4VideoGeneration::WriteVideoFrame(AVFormatContext* oc, OutputStream* ost) { int ret; AVCodecContext* c; AVFrame* frame; int got_packet = 0; AVPacket pkt = {0}; c = ost->enc; frame = GetVideoFrame(ost); av_init_packet(&pkt); /* encode the image */ ret = avcodec_send_frame(c, frame); if (ret < 0) { LOG("Eroor encoding video frame:%s "); exit(1); } got_packet = avcodec_receive_packet(c, &pkt); if (!got_packet) { ret = WriteFrame(oc, &c->time_base, ost->st, &pkt); } else { ret = 0; } if (ret < 0) { LOG("Error while writing video frame: %s "); exit(1); } return (frame || got_packet) ? 0 : 1; }
原文地址:https://www.cnblogs.com/k5bg/p/11102385.html