Win7 VS2017 NASM编译FFMPEG(2018.12.22)
今天无意中在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工程,完全可控的代码,让你有心情查看每一个库的实现,而不是像屎一样的那种一堆源码,自动编译完就能用的那种垃圾。
Win7 VS2017 NASM编译FFMPEG(2018.12.22)的更多相关文章
- Win7 VS2017简单编译FFMPEG播放器FFPlay
Win平台简单编译FFPlay播放器,顺便纪念下雷霄骅,一年前刚学FFMPEG时还看过他的博客,昨晚再次搜FFMPEG文章时才知道人已经走了... 做成了视频放到B站 https://www.bili ...
- 2018/12/22:centos中转换目录时/root的影响
今天在将一个压缩包复制到/root下,并解压.从表面看我试在根目录下,但是就是不能进入生成的目录,提示no such file or diraction.最后我加上/root又好了,奇怪 编译环境:输 ...
- 2018.12.22 bzoj3277: 串(后缀自动机+启发式合并)
传送门 跟这道题是一模一样的. 于是本蒟蒻又写了一遍10min1A庆祝 代码: #include<bits/stdc++.h> #define ri register int using ...
- 2018.12.22 spoj7258 Lexicographical Substring Search(后缀自动机)
传送门 samsamsam基础题. 题意简述:给出一个串,询问第kkk大的本质不同的串. 然而这就是弦论的简化版. 我们把samsamsam建出来然后贪心选择就行了. 代码: #include< ...
- 2018.12.22 bzoj3926: [Zjoi2015]诸神眷顾的幻想乡(广义后缀自动机)
传送门 题意简述:给出一棵trietrietrie树,每个点表示一个字符,求树上所有路径组成的不同字串数.(叶子数≤20\le 20≤20) 由于有一个神奇的条件,考虑以每一个叶子为树根统计每个点到树 ...
- 2018.12.22 bzoj3473: 字符串(后缀自动机+启发式合并)
传送门 调代码调的我怀疑人生. 启发式合并用迭代写怎么都跑不过(雾 换成了dfsdfsdfs版本的终于过了233. 题意简述:求给出nnn个字串,对于每个给定的字串求出其有多少个字串在至少kkk个剩下 ...
- 2018.12.22 Spring学习02
Spring学习02 1.使用注解配置Spring 1.1 为主配置文件引入新的命名空间(约束) 添加约束文件xxx-xxx-context.xml 添加到主配置文件中 选择刚才的context.xm ...
- 编译并使用boost库(win7+boost1.63+vs2015+32位or 64位),超详细,boost于vs2017下编译(64/32bit)
首先下载得到boost的最新版(目前最新版是1.63) 下载地址: http://www.boost.org 也可以从这里直接下载 http://download.csdn.net/detail/ ...
- Ubuntu Desktop 编译 ffmpeg (简略的写写)
关于ffmpeg FFmpeg是一個自由軟體,可以執行音訊和視訊多種格式的錄影.轉檔.串流功能,包含了libavcodec——這是一個用於多個專案中音訊和視訊的解碼器函式庫,以及libavformat ...
随机推荐
- day48 前端高级选择器优先级
复习 1. 基础选择器 标签选择器(div) | 类选择器(.div1) | id选择器(#div2) <div class="div1" id="div2&quo ...
- 【转】图解CSS padding、margin、border属性
http://www.cnblogs.com/linjiqin/p/3556497.html 图解CSS padding.margin.border属性W3C组织建议把所有网页上的对像都放在一个盒(b ...
- 我的第一篇java笔记
什么是程序 程序通常指完成某些事物的一种既定方式和过程. 在日常生活中,可以把程序看成一系列动作的执行过程和描述. Java介绍 Java是Sun Microystems于1995年推出的高级编程语言 ...
- 20175314 《Java程序设计》第七周学习总结
20175314 <Java程序设计>第七周学习总结 教材学习内容总结 第八章:常用实用类 String()类代表字符串:Java 程序中的所有字符串字面值(如 "abc&quo ...
- XACT_ABORT选项
XACT_ABORT选项用于指定当SQL语句出现运行时错误时,SQL Server是否自动回滚到当前事务.其语法格式如下所示: SET XACT_ABORT{ON|OFF} 当SET XACT_ABO ...
- 混合现实开发教程unity2017
共52节,MP4格式,英字,大小1GB 扫码时备注或说明中留下邮箱 付款后如未回复请至https://shop135452397.taobao.com/ 联系店主
- 使用发射将JavaBean转为Map
import java.lang.reflect.Field; private static Map<String, Object> objectToMap(Object obj) thr ...
- python词频统计及其效能分析
1) 博客开头给出自己的基本信息,格式建议如下: 学号2017****7128 姓名:肖文秀 词频统计及其效能分析仓库:https://gitee.com/aichenxi/word_frequenc ...
- redis缓存雪崩,缓存穿透,缓存击穿的解决方法
一.缓存雪崩 缓存雪崩表示在某一时间段,缓存集中失效,导致请求全部走数据库,有可能搞垮数据库,使整个服务瘫痪. 使缓存集中失效的原因: 1.redis服务器挂掉了. 2.对缓存数据设置了相同的过期时间 ...
- .NET、JAVA和PHP在Web开发的优缺点
现在做Web开发,用哪个平台哪种语言其实本质上没有太大的区别,因为Web开发框架已经非常成熟,只要符合需求,能按时交付产品就ok了. 要选择哪个平台,是个商业问题,不是技术问题. 选择任何的语言最好深 ...