一.简介
最近在搞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; }