本文主要讲解FFmpeg的二次开发,​​ffmpeg.exe​​ 的命令行功能特别强大,很多需求都能直接用命令行实现,但是总有一些需求用命令行实现不太好做。 而你实现那些特殊需求,通常需要把 ​​ffmpeg.exe​​ 里面的某部分代码抄过来,本文讲的主要就是如何抄代码。 我们需要新加一个程序 ​​loken.exe​​​,由于FFmpeg项目的惯例是编译生成 ​​xxx_g.exe​​​ ,然后 ​​strip​​​ 之后再生成没有 ​​_g​​ 的程序。 本文也使用这种惯例来编译。在FFm...

  1bTlX33AWdQ4   2023年11月13日   13   0   0 编解码器命令行滤镜

在前文《​​FFmpeg的API库介绍​​​》里面知道,FFmpeg一共提供了8个dll库给外部使用,但是有时候为了软件的安装目录的文件更加简洁一点,会把这8个dll动态库全部合并进去一个 ​​ffmpeg.dll​​ 里面,挺多软件都这样做的,例如:Typora,draw.io,百度翻译,等等。 下面就来介绍如何生成 ​​ffmpeg.dll​​,在阅读本文之前,推荐阅读《编译链接基础知识》一章的以下文章。 1,《​​MSVC编译多个C程序文件​​》 2,《​​MSVC编译动态库​​》 我个人不太喜欢只写 步骤型 的文章,例如教你改&nb...

  1bTlX33AWdQ4   2023年11月13日   15   0   0 静态库后缀动态库

在开始讲解之前,分享一些阅读项目代码的经验。无论学习哪方面的知识,都是需要正反馈才能继续学下去。在学习开源项目的时候,如果不掌握一些比较好的方法,会比较难拿到正反馈,或者要坚持学习很久才能拿到正反馈。 我个人学习开源项目的方法如下: 1,配置好项目的调试环境。 调试环境优先选择 ​​clion​​​,​​vs2019​​​,​​qtcreator​​​,次要选择 ​​gdb​​​,​​WinDbg​​。 调试器是你攻克开源项目的神兵利器,调试器会把所有数据结构的变换,逻辑流转,完完整整地呈现在你的面前,特别是一些集成开发环境,变量,内存,寄存器的观察会更加容易方便。 2,找...

  1bTlX33AWdQ4   2023年11月13日   11   0   0 开源项目旁路ide

在讲 stream_open() 函数之前,需要先了解 ​​stream_open()​​ 里面使用到的一些基本的数据结构。如下: 第一个数据结构是 ​​structVideoState​​ ,​​VideoState​​ 可以说是播放器的全局管理器。字段非常多,时钟,队列,解码器,各种状态都放在 ​​VideoState​​ 里面。 但是本文不会把 ​​VideoState​​ 的所有字段都讲一遍,只会讲 ​​stream_open()​​ 函数用到的字段,如下是...

  1bTlX33AWdQ4   2023年11月13日   16   0   0 数据结构ide字段

FFplay 播放器的命令行是可以指定多个视频滤镜,然后按 w 键切换查看效果的,命令如下: linux命令 ffplay.exe-x400\ -vf"drawtext=fontsize=200:fontfile=FreeSerif.ttf:text='FFmpeg':x=150:y=100"\ -vf"drawtext=fontsize=200:fontfile=FreeSerif.ttf:text='Principle':x=150:y=100"\ -ijuren.mp4 windows命令 ffplay.exe-x400^ -vf"drawtext=f...

  1bTlX33AWdQ4   2023年11月13日   30   0   0 FFplay

FFmpeg官网提供了两种编译源码的方法。 1,msys2+mingw(本文的编译方法) 2,msys2+msvc MinGW在前面文章​​《MinGW介绍》​​已经介绍过了,MinGW就是把gcc编译器移植到windows了,并且提供了一些以前只有在Linux才有的函数,例如pthread_create()。 为什么需要安装msys2? 因为windows环境只能执行batch脚本,不能执行shell脚本。同时windows的CMD命令行,也没有make,ls,mkdir这些linux的命令。所以需要安装msys2,可以把msys2理解成一个linux的环境,在msys2里面可以执行she...

  1bTlX33AWdQ4   2023年11月02日   44   0   0 命令行动态库linuxffmpeg

本文讲解如何使用msys2+msvc来编译FFmpeg,msys2的安装请看 ​​《MSYS2介绍》​​。 下面开始操作,先找到 x64NativeToolsCommandPromptforVS2019 这个命令工具,点击它打开命令行,如下: 这样打开的命令行是有vs2019的环境变量的,如下图: 千万不要用下面这种win+R的方式打开命令行,这样子打开命令行是没有vs2019的环境变量的。 为了让msys2能继承vs2019的环境变量,需要修改 ​​C:\msys64\msys2_shell.cmd​​ 中的 ​​rems...

  1bTlX33AWdQ4   2023年11月02日   36   0   0 环境变量命令行编译器

《​​用msys2与mingw编译FFmpeg​​​》​​《用msys2与msvc编译FFmpeg》​​ ,前面两篇文章已经讲解了如何在windows编译出ffmpeg.exe文件。 在Windows平台有没类似gdb调试工具可以断点调试可执行文件呢? Windows平台主要有两款调试工具。 1,VsDebug,集成在vs2019里面的调试器。vs系列都是用的VsDebug。 2,WinDbg,Windows诞生之初的第一款功能全面的调试器,目前依然应用广泛。例如qtcreator的MSVC环境调试就是用的WinDbg。 VsDebug是vs2019的调试器,架构图如下: 上图中...

  1bTlX33AWdQ4   2023年11月02日   28   0   0 jsonWindows解决方案ffmpeg

本文主要讲解WinDbg调试器的使用。​​WinDbg​​​ 在Windows里面的地位,就跟GDB在Linux的地位一样。可以通过微软的官方网站 ​​下载​​ 安装WinDbg。 WinDbg是比较轻量级的调试工具,在一些场景下比较实用,例如不方便安装vs2019。 只要有符号信息表(symbols)跟调试信息表(debuginfo),一样能用WinDbg进行源码级调试跟各种断点调试。这些信息,windows是放在pdb文件里面的,在源码目录,可以看到ffmpeg_g.pdb这个文件。 FFmpeg的编译过程跟前面文章《​​用msys2与msvc编译FFmpeg...

  1bTlX33AWdQ4   2023年11月02日   40   0   0 WInDbg调试器ffmpeg

本文是在msys2环境下进行操作的,不熟悉msys2的可以看 ​​《MSYS2介绍》​​。 FFmpeg引入SDL扩展实际上非常简单,原理就是编译FFmpeg的时候加上SDL的导入库就行。跟其他的C/C项目引入外部动态库是一样的。 SDL动态库的安装也非常简单,因为msys2的云仓库本身就有SDL的安装包,所以我们不需要下载SDL的源码自己编译,直接使用以下命令安装SDL即可。 pacman-Smingw-w64-x86_64-SDL2 安装完成之后,可以使用以下命令查看安装了什么东西到我们的电脑。 pacman-Qlmingw-w64-x86_64-SDL2 ...

  1bTlX33AWdQ4   2023年11月02日   38   0   0 静态库SDL动态库

本文是在msys2环境下进行操作的,不熟悉msys2的可以看 ​​《MSYS2介绍》​​。 FFmpeg-n4.4.1版本的源码编译,无论你是在Linux还是Windows环境编译,默认都会有h.264编码器。 Linux下的是使用V4L2来做的h.264编码器,如下: V4L2 全称是VideoforLinux2,是Linux系统的视频设备内核驱动。m2m全称是什么我也不知道,后面补充。 Windows下的是使用 ​​MediaFoundation​​ 来做的h.264编码器,如下: x264有些功能是上面两个自带的h.264编码器没有的,所...

  1bTlX33AWdQ4   2023年11月02日   46   0   0 头文件动态库编码器x264

本文主要介绍如何在window10的环境下编译ffmpeg的NVIDIAGPU硬件编解码器h264_nvenc跟h264_cuvid。 并不是所有的NVIDIA显卡都支持h.264跟h.265编解码的,有些显卡只负责渲染,不支持编解码,例如GeForce830M>945M。 可以通过 ​​VideoEncodeandDecodeGPUSupportMatrix​​ 查看各种NVIDIA显卡对编解码的支持情况,有些显卡只支持h.264,不支持h.265。 从上图可以看出,NVIDIA显卡分为4类。 Consumer,面向PC市场的GeForce产品线。 Profes...

  1bTlX33AWdQ4   2023年11月02日   44   0   0 头文件显卡驱动CUDAffmpeg

在以往的文章中,编译出来的 ​​ffmpeg.exe​​​ 都不是完全静态的,总会依赖一些动态库,例如 ​​libm.dll​​​ ,​​libz.dll​​​,​​libc.dll​​ 等等。 虽然FFmpeg的 ​​configure​​ 脚本有一个 ​​--enable-shared​​ 选项,但这个选项只是决定要不要生成FFmpeg的 ​​8个API库​​。不用 ​​--enable-shared​​ 选项就是不生成8个 ​​dll​​ 动态库。 ...

  1bTlX33AWdQ4   2023年11月02日   42   0   0 静态库静态链接ffmpeg

FFmpeg的API库一共有8个,如下图: 1,swscale ,视频数据处理类库,例如提供了sws_scale函数来做像素格式和分辨率的转换,还有一些处理视频的滤波函数。sw应该是SoftWare的缩写。 2,swresample ,音频数据处理类库,例如提供了swr_convert函数来实现音频数据的重采样。 3,postproc,视频后处理库,提供了一些视频相关的函数,但是有很多函数没有实现,或者实现了一半,如下: 所以libpostproc应该是一个实验性的库,不用管。 4,avutil,a代表audio,v代表vedio,所以avutil是一个与音频,视频...

  1bTlX33AWdQ4   2023年11月02日   33   0   0 APIffmpeg

C/C项目有两种编译方式,MinGW跟MSVC,如下: 1,《​​MinGW编译静态库​​》 2,《​​MSVC编译静态库​​》 但是MinGW编译的静态库,是不能给MSVC的链接器使用的,虽然两者编译器生成的.o跟.obj目标文件是ABI兼容的,但是他们的链接器不通用。 而静态库实际上就是把目标文件打包在一起,所以MinGW编译的静态库,只能给MinGW编译方式的项目使用。MSVC同理。 下面来讲一下qtcreator如何引入用MinGW方式编译出来的FFmpeg动态库。 MinGW编译FFmpeg请参考《​​用msys2与mingw编译FFmpeg​​》,编译完成之后,目录如下: 上图...

  1bTlX33AWdQ4   2023年11月02日   43   0   0 动态库Qtffmpeg

本文讲解如何在qtcreator引入FFmpeg的静态库,静态库是通过msys2+msvc编译出来的,参考 ​​《用msys2与msvc编译FFmpeg》​​​,只要在configure的时候不使用 ​​--enable-shared​​ 就会编译出静态库。FFmpeg的静态库跟动态库只能二选一,如果都想要,需要编译两次。 编译完成之后,静态库如下: 这些.a文件实际上就是msvc的lib静态库,只是后缀名不一样。 这里提醒一下,这些静态库只是FFmpeg本身代码的目标文件的集合,外部的扩展静态库没有在这些.a文件里面,例如SDL的静态库不会在这些.a文件里面。...

  1bTlX33AWdQ4   2023年11月02日   43   0   0 静态库Qtffmpeg

Java可以通过JNI调用原生库中的函数,原生库完全是由原生的CPU指令堆叠起来的,所以运行速度很快。大部分的原生库都是用C/C编译出来的。 因此,Android里面也能通过JNI的方式调用 ​​so​​ 动态库,或者 ​​.a​​ 静态库里面的函数。JNI的全称是JavaNativeInterface,Java原生接口。 Android提供了一套NDK工具,来编译使用C/C代码。有关NDK,JNI相关的资料,本文不进行讲解,推荐阅读以下资料。 1,《JavaNativeInterface:Programmer'sGuideandSpecificatio...

  1bTlX33AWdQ4   2023年11月02日   19   0   0 androidffmpeg

本章通过一些小的代码示例介绍FFmpeg里面一些基本常用的数据结构跟API函数的使用。 学习FFmpeg的使用是比较有难度的,因为音视频封装格式,编码格式纷繁复杂,ffmpeg里面很多代码都是处理格式兼容的。本章节的所有代码,为了便于初学者学习,删掉了一些兼容处理代码跟错误处理代码,所以不建议在正式环境使用这些代码,相同的功能,建议你直接从 ​​ffmpeg.c​​ ,​​ffplay.c​​ ,​​ffprobe.c​​ 这3个文件里面抄代码,他们的兼容处理做得很好。 本章使用的编译环境是qtcreator跟msvc。请参考以下文章搭建好开发环境。 ...

  1bTlX33AWdQ4   2023年11月02日   34   0   0 APIffmpeg

本文介绍如何使用FFmpeg的API函数 ​​avformat_open_input​​​,​​avformat_find_stream_info​​ 来打开跟获取一个输入文件的信息(AVFormatContext)。 本文的代码下载地址:​​GitHub​​,编译环境是Qt5.15.2跟MSVC2019_64bit。 注意事项,需要配置install参数,要不 ​​juren-30s.mp4​​ 跟相关的FFmpegDLL文件会没有拷贝到调试目录,配置install的参数如下: 与打开输入文件相关的API函数如下: 1,​​avformat_op...

  1bTlX33AWdQ4   2023年11月02日   33   0   0 ffmpeg

解复用器(demuxer)的参数分为 通用部分 跟 私有部分。通用部分是指所有文件格式都有的属性,例如 ​​formatprobesize​​​ 是MP4跟FLV都有的属性。而 ​​export_all​​ 是只有MP4自己才有的属性。 通用部分的参数可以通过以下命令来查看: ffmpeg.exe-h>t.txt 私有部分的参数可以通过指定解复用器来查看: ffmpeg.exe-hide_banner1-hdemuxer=mp4 无论是通用还是私有属性,都是使用 ​​AVDic...

  1bTlX33AWdQ4   2023年11月02日   44   0   0 Demuxerffmpeg
关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~