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\n"); 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\n"); 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\n"); 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\n"); exit(1); } return (frame || got_packet) ? 0 : 1; }
复制代码

 

posted @   言午丶  阅读(535)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示