今天无意中在gayhub发现个牛逼工程,全VS工程编译FFMPEG库,包括依赖库全是VS生成的,无需Mingw等Linux环境。

简单记录下过程,以防将来重装系统等情况,备忘。

https://github.com/ShiftMediaProject/FFmpeg

git clone 此项目,运行SMP\project_get_dependencies.bat 下载。

不过我之前并不知道这个自动下载依赖,我直接clone了这个人的所有项目......

查看SMP\readme.txt,可知,除了相关库外,还需要单独下载一些他没有带的内容。

你需要建一个目录,包含这些单独的头文件。

比如叫__FFMPEG_Need,建立一个include目录,再在其下建立4个目录

AMF

ffnvcodec

gl

KHR

在gl目录中放入以下2个文件

https://www.khronos.org/registry/OpenGL/api/GL/glext.h

https://www.khronos.org/registry/OpenGL/api/GL/wglext.h

KHR放入

https://www.khronos.org/registry/EGL/api/KHR/khrplatform.h

然后clone这个项目

https://github.com/FFmpeg/nv-codec-headers

把这个项目include下的内容,直接放到我们当前include目录即可,也就是复制那个ffnvcodec目录

最后clone AMF

https://github.com/GPUOpen-LibrariesAndSDKs/AMF

amf/public/include

内容放到你的AMF目录下,也就是把

components

core

复制到AMF目录下

至此,include目录准备完毕,等会编译工程,把这个目录加入所有工程include路径即可,你可以选择加入VS全局include目录里。

========================================

接下来下载YASM和NASM

http://yasm.tortall.net/Download.html

YASM只需下载exe即可,32还是64位随意,我只需要32位,

http://www.tortall.net/projects/yasm/releases/yasm-1.3.0-win32.exe

下好后改名yasm.exe

建个目录,比如

E:\Yasm

把yasm.exe放入

新建环境变量YASMPATH,写入路径地址

注意路径最后要有反斜杠\结尾

然后下载NASM

https://www.nasm.us/pub/nasm/releasebuilds/2.14/

要下载安装器,不知道为什么,我下载zip好像失败了,所以只能用exe安装版本。

https://www.nasm.us/pub/nasm/releasebuilds/2.14/win32/nasm-2.14-installer-x86.exe

把nasm安装一下,比如

E:\nasm-2.14

之后同上,新建环境变量NASMPATH,加入路径

因为我是单独clone的所有工程,所以

https://github.com/ShiftMediaProject/VSYASM

https://github.com/ShiftMediaProject/VSNASM

在这2个工程里,把每个工程的

.props
.targets
.xml

类型配置文件,1个工程有3个文件,总共6个文件,复制到类似下面的目录中,也就是你VS2017的配置目录,VS默认只有masm的配置

D:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\VC\VCTargets\BuildCustomizations

然后打开SMP\ffmpeg_deps.sln工程,如果提示更新一些VS组件就都选是更新。

如果工程全都可以打开,不缺少工程的话,那么配置就OK了。如果有加载不了的项目,分2种情况

1.如果是少工程就补全工程。

其他工程都与ffmpeg同级。

ffmpeg

libass

这样同级目录

2.如果工程文件目录都正常存在,但是还是加载不了,可能就是YASM和NASM配置有问题,但是现在应该都配置好了,我是先有问题,才后装的NASM。

最后,你应该得到一个可以打开

FFmpeg\SMP\ffmpeg_deps.sln

之后,所有工程都可以加载上的,没有Load Fail的Solution

试着编译,如果显示Windows SDK不正常,修改一下所有工程使用的SDK即可,默认似乎是Win8 SDK,我重装VS2017似乎只有Win10 SDK,没有Win8,所以改成Win10 SDK才能编译。

继续,如果编译libav之类的库,一定会提示缺少头文件,因为最开始单独下载的那些include头文件没有放进VS全局目录,加入即可。

比如

E:\PProjects\GitDownloads\__FFMPEG_Need\include

然后再次编译,直接编译debug即可,因为主要是学习原理,而非测试运行效率。

如果全都编译通过没有错误,就可以再打开

FFmpeg\SMP\ffmpeg.sln

把ffplay之类的也编译了,对我来说ffplay才是重点,因为这是播放器应用实例,我个人能在网上找到播放视频最实用的例子了。

展开ffplay工程,ffplay.c文件,如果直接编译这个ffplay,生成的ffplay.exe播放视频会提示音频初始化失败而播放不出声音,似乎是因为dsound初始化失败了。

根据之前2次编译ffplay的经验,在文件头加入window头

#include <Windows.h>

搜索SDL_OpenAudioDevice

在这行前加入

CoInitialize(NULL);

再编译即可修复音频问题。

我的FFMPEG工程目录在

E:\PProjects\GitDownloads\FFmpeg

那么生成的文件在

E:\PProjects\msvc\bin\x86\ffplay.exe

这个msvc目录似乎是自动生成的

还不算完,现在要测试一个带字幕的视频文件,并且用ffplay播放字幕。

一般的命令,比如ffplay mv.mkv是不会播放视频的字幕的。

想播放字幕,正确的用法是

ffplay -vf subtitles=mv.mkv mv.mkv

外挂字幕同理

ffplay -vf subtitles=mv.ass mv.mkv

这样才行

至此结束,可以开始断点跟踪代码走向了,最叼的是全VS工程,完全可控的代码,让你有心情查看每一个库的实现,而不是像屎一样的那种一堆源码,自动编译完就能用的那种垃圾。

FFmpeg在VS2017下的编译的更多相关文章

  1. FFmpeg在Linux下安装编译过程

    转载请把头部出处链接和尾部二维码一起转载,本文出自:http://blog.csdn.net/hejjunlin/article/details/52402759 今天介绍下FFmpeg在Linux下 ...

  2. 简述FreeCAD在vs2017下的编译与dxf导入

    最近发现 FreeCAD 官方在发布 0.19_pre 时已提供 vs2017 x64的LibPack,现在就再来测试一下. 编译 下载 FreeCADLibs_12.1.2_x64_VC15.7z ...

  3. FFmpeg在Linux下搭建 ***

    今天介绍下FFmpeg在Linux下安装编译过程,总体过程比较顺利,就是在ffmpeg等的时间稍长点,仅当记录. 关于FFmpeg FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采 ...

  4. 【FFmpeg】Windows下64位ffmpeg编译

    本文主要记录在64位Windows 7下,编译64位ffmpeg的过程. 1.资源准备 (1). MSYS http://sourceforge.net/projects/mingwbuilds/fi ...

  5. MinGW下简单编译FFmpeg

    2009.03.21补充:ffmpeg-0.5正式发布,地址为:[url]http://www.ffmpeg.org/releases/ffmpeg-0.5.tar.bz2[/url].修改了第7步, ...

  6. FFmpeg: mac下手动编译android上使用的FFmpeg(支持x86、armeabi-v7a、arm64-v8a)

    之前一直在linux下编译FFmpeg,最近换电脑了,尝试了下在mac下编译ffmpeg,特记录之. 一. 准备工作 1. 下载FFmpeg.(http://ffmpeg.org/download.h ...

  7. 【FFMPEG】Windows下使用Visual Studio 2010编译ffmpeg全过程

    原文  http://www.cnblogs.com/xylc/p/3683203.html 主题 FFmpegWindowsVisual Studio ffmpeg是一个开源的多媒体库,使用非常广泛 ...

  8. win10 x64 VS2017 PJSIP 视频通话编译流程

    win10 x64 VS2017 PJSIP 视频通话编译流程 1. 下载PJSIP源码 PJSIP源码下载地址:https://www.pjsip.org/ 2. 阅读一遍官方的文档 文档地址:ht ...

  9. Python3.7源码在windows(VS2015)下的编译和安装

    Python3.7源码在windows(VS2015)下的编译和安装 下载官方源码,使用vs2015(WIN10SDK),最python3.7.0的源码进行编译,编译出不同的版本(release,de ...

随机推荐

  1. Vcode的生成工具类,生成制定长度验证码,图文验证码工具类

    public class VCodeUtils { // 使用到Algerian字体,系统里没有的话需要安装字体,字体只显示大写,去掉了1,0,i,o几个容易混淆的字符 public static f ...

  2. SHOI2017 分手是祝愿

    分手是祝愿 有

  3. Gym100739H Hard Molecules

    Hard Molecules 给定一个连通图中每个点的度数,求一个满足条件的图,图可以有重边,不能有自环. n<=5000, di<=109 题解 如果不要求图连通,那么只需要判断 \[ ...

  4. 洛谷 P3243 [HNOI2015]菜肴制作 题解

    每日一题 day60 打卡 Analysis 这道题一看就感觉是个拓扑排序,但因为按字典序最小的排序会有问题(见第三个样例)主要原因是每次选择有后效性,而从后往前就不会存在这个问题,因为每个子任务都是 ...

  5. Mysql配置C3P0

    需要导入的包 c3p0-0.9.5.2.jar mchange-commons-0.2.15.jar mysql-connector.jar 1. 配置xml 创建c3p0-config.xml文件, ...

  6. plotly-dash 简单使用(一)

    plotly-dash 是一个很不错的dashboard 开发平台,基于python 编写,提供了很便捷的dashboard 开发模型 同时扩展上也比较灵活我们可以编写自己的组件. 以下是一个简单的项 ...

  7. Cogs 513. 八(容斥原理)

    八 ★☆ 输入文件:eight.in 输出文件:eight.out 简单对比 时间限制:1 s 内存限制:128 MB [问题描述] 八是个很有趣的数字啊.八=发,八八=爸爸,88=拜拜.当然最有趣的 ...

  8. 洛谷 P1873 【砍树】

    P1873 传送门 题外话 话说我们也要当一当光头强?? 大体题意 就是让你砍树,统一的高度,然后让你砍树,看看订什么高度合适. 思路: 二分答案,对高度二分,如果砍得树长度不够,那就说明高度高了. ...

  9. 【CSP-S膜你考】最近公共祖先 (数学)

    Problem A. 最近公共祖先 (commonants.c/cpp/pas) 注意 Input file: commonants.in Output file: commonants.out Ti ...

  10. 【BigData】Java基础_终端输入2个数字并求和

    1.需求描述 在终端输入2个数字,然后根据输入的数字求和 2.实现代码 package cn.test.logan; import java.util.Scanner; public class Te ...