ffmpeg转码器移植VC的project:ffmpeg for MFC
本文介绍一个自己做的FFMPEG移植到VC下的开源project:ffmpeg for MFC。本project将ffmpegproject中的ffmpeg转码器(ffmpeg.c)移植到了VC环境下。
而且使用MFC做了一套简单的界面。它能够完毕一个视频转码的基本功能:封装格式以及编码格式的转换。
通过本程序能够学习视频转码器的原理。以及Windows的消息机制等知识。
平台:VC2010
类库:FFmpeg,MFC
眼下正在完好中。先不上传到CSDN下载了。
在SourceForge上建立了一个项目。
项目主页
SourceForge:https://sourceforge.net/projects/ffmpegformfc/
Github:https://github.com/leixiaohua1020/ffmpegmfc
开源中国:http://git.oschina.net/leixiaohua1020/ffmpeg-for-MFC
更新记录==============================
1.1版(2014.7.12)
* 更换了部分界面
* 原project支持Unicode编码
* 修复了一部分内存泄露的问题
* 修正了ffmpeg.c中的exit_program()函数。
保证在转码结束后能够释放资源。
* 修正了一部分“任务列表”的功能
* 修正了加入任务的时候“要用button去选输入文件。不能自己直接输入”的问题。
1.2版(2014.8.16)
*添加了“内部转码”和“外部转码”选项。
“内部转码”即通过原先移植的ffmpeg.c进行转码。“外部转码”支持作为一个GUI直接调用ffmpeg.exe进行转码。
通过管道的方式读取转码进度。
发现SourceForge速度非常慢。有的时候差点儿訪问不了,因此还是打算在CSDN上上传了一下源码和编译后的可运行程序。
结果昨天传了一晚上居然没有传上去。。。每次上传完在自己资源列表里面都看不到,非常是郁闷。结果今天早上起来猛然发现资源列表里面居然有2份。。。这个延迟有点大啊。只是好歹传上去了。
源码:http://download.csdn.net/detail/leixiaohua1020/7764529
编译好的可运行程序:http://download.csdn.net/detail/leixiaohua1020/7766245
PUDN源码:http://www.pudn.com/downloads644/sourcecode/multimedia/detail2605161.html
一.主界面
程序的主界面如图所看到的。主界面中包括一个任务列表,当中包括了须要转码的任务。下方是转码的控制button,而且包括了转码的进度信息。
1.1.任务列表
任务列表包括了须要转码的任务。列表的上方包括了4个button,包括了对任务列表的4种操作:加入,编辑,删除,清空。此外,在任务列表中选择一个任务然后单击右键,也能够在右键菜单中选择这4项操作。
这4项操作例如以下:
加入:新添加一个任务。
编辑:改动现有的一个任务。
删除:删除一个任务。
清空:删除全部的任务。
列表显示了任务的信息。包括:序号,输入,大小。输出,状态。
含义例如以下:
序号:编号。
输入:输入文件名。
大小:输入文件大小。
输出:输出文件名。
状态:该任务所处的状态(准备,处理中,已完毕)。
1.2.控制button
控制button完毕了对转码过程的控制功能。包括:開始,暂停,停止。
開始:系统開始转码。
暂停:系统暂停转码。
停止:系统停止转码。
二.任务信息窗体
任务信息窗体用于配置一条任务信息。当中包括了三个部分:输入和输出,输入文件信息。输出配置。
2.1.输入和输出
输入和输出部分用于指定该任务的输入文件和输出文件。
输入文件即准备进行转码的文件。输出文件即转码后生成的文件。能够直接在输入框中输入文件路径,也能够单击输入框右側的“文件”button选择文件。此外还能够直接将文件拖拽至对话框的方式选择输入文件。
选择输入文件后。程序会检查输入文件的格式信息。假设输入文件不是视音频文件。程序会报出错误信息。假设输入文件为视音频文件,程序会检測该文件的參数信息。包括封装格式,视频编码,音频编码等信息。
并将检測结果显示在“输入文件信息”部分。
为了方便起见,选择输入文件后。程序会在输入文件的文件夹下生成名为“{输入文件名}_ffmfc.mkv”的输出文件。
能够对该输出文件路径和名称进行更改。
2.2.输入文件信息
包括:封装格式,视频比特率,时长。输出像素格式。视频编码方式。帧率,画面大小,採样率。音频编码方式,声道数。
2.3.输出配置
封装格式
输入封装格式:强制指定输入文件的格式。
默认情况下ffmpeg是通过输入文件的后缀推断文件格式的。假设指定了这个选项,则依照该指定的格式对文件进行解析。
输出封装格式:强制指定输出文件的格式。默认情况下ffmpeg是通过输出文件的后缀推断文件格式的。假设指定了这个选项,则依照该指定的格式对文件进行转码。
视频
比特率:视频的码率,默认800kbps。
编码器:视频编码使用的编码器。
帧率:视频编码使用的帧率,默认25fps。
音频
比特率:音频的码率,默认64kbps。
编码器:音频编码使用的编码器。
採样率:音频的採样率,默认44100Hz。
声道数:音频的声道数,默认是2。
输出的封装格式,视频编码格式,音频编码格式以列表的形式显示出来。能够自行选择。
三.系统支持信息窗体
系统支持信息窗体列表显示了系统的支持信息。包括系统支持的:协议,输入封装格式,输出封装格式,视频解码器,音频解码器。以及其它解码器(字幕解码器)。
比如从视频解码器列表中能够看出本程序支持的视频编码器包括libx264。libvpx等等。
四.菜单
程序上端的菜单中包括了更丰富的选项。一共分成5部分的功能:任务。控制,视图,语言,帮助。
以下分别介绍。
任务:对任务列表进行加入,编辑。删除,清空操作。
控制:控制转码的開始,暂停,停止。
语言:设置界面的语言。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGVpeGlhb2h1YTEwMjA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />
五.英文界面
英文界面截图例如以下所看到的。
主界面
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGVpeGlhb2h1YTEwMjA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />
任务信息窗体
系统支持信息窗体
ffmpeg转码器移植VC的project:ffmpeg for MFC的更多相关文章
- ffmpeg转码器移植VC的工程:ffmpeg for MFC
本文介绍一个自己做的FFMPEG移植到VC下的开源工程:ffmpeg for MFC.本工程将ffmpeg工程中的ffmpeg转码器(ffmpeg.c)移植到了VC环境下.并且使用MFC做了一套简单的 ...
- ffplay播放器移植VC的project:ffplay for MFC
本文介绍一个自己做的FFPLAY移植到VC下的开源project:ffplayfor MFC.本project将ffmpeg项目中的ffplay播放器(ffplay.c)移植到了VC的环境下.而且使用 ...
- ffplay播放器移植VC的工程:ffplay for MFC
本文介绍一个自己做的FFPLAY移植到VC下的开源工程:ffplayfor MFC.本工程将ffmpeg项目中的ffplay播放器(ffplay.c)移植到了VC的环境下.并且使用MFC做了一套简单的 ...
- 最简单的基于FFmpeg的移动端例子:IOS 视频转码器
===================================================== 最简单的基于FFmpeg的移动端例子系列文章列表: 最简单的基于FFmpeg的移动端例子:A ...
- 最简单的基于FFmpeg的移动端样例:IOS 视频转码器
===================================================== 最简单的基于FFmpeg的移动端样例系列文章列表: 最简单的基于FFmpeg的移动端样例:A ...
- 最简单的基于FFmpeg的移动端样例:Android 视频转码器
===================================================== 最简单的基于FFmpeg的移动端样例系列文章列表: 最简单的基于FFmpeg的移动端样例:A ...
- FFmpeg源码结构图 - 解码
===================================================== FFmpeg的库函数源码分析文章列表: [架构图] FFmpeg源码结构图 - 解码 FFm ...
- FFmpeg源码简单分析:libswscale的sws_scale()
===================================================== FFmpeg的库函数源码分析文章列表: [架构图] FFmpeg源码结构图 - 解码 FFm ...
- FFmpeg源码结构图 - 编码
===================================================== FFmpeg的库函数源码分析文章列表: [架构图] FFmpeg源码结构图 - 解码 FFm ...
随机推荐
- Stanford CoreNLP使用需要注意的一点
1.Stanford CoreNLP maven依赖,jdk依赖1.8 <dependency> <groupId>edu.stanford.nlp</groupId&g ...
- Java并发编程(三)-- 多线程的“问题”
竞态条件与临界区 在同一程序中运行多个线程本身不会导致问题,问题在于多个线程访问了相同的资源.当多个线程同时访问同一个资源,并且其中的一个或者多个线程对这个资源进行了写操作,才会产生竞态条件.多个线程 ...
- 【Linux入门学习之】vi/vim编辑器必知必会
vi 在当前打开的文件内容中翻页:PageUp.PageDown 一.我们为什么要学习vim编辑器? Linux的命令行界面下面有非常多的文本编辑器.比如经常听说的就有Emacs.pico.nano. ...
- 为什么要DevOps?
Boss:「项目经常延期」「做东西太慢」 产品: 「老板的想法总变」 「事情太多,忙成狗」 「开发说这个实现不了」 开发: 「需求总变」 「UI 方案给的太晚」 「活儿太多」 测试: 「需求变了没提前 ...
- PAT基础6-5
6-5 求自定类型元素的最大值 (10 分) 本题要求实现一个函数,求N个集合元素S[]中的最大值,其中集合元素的类型为自定义的ElementType. 函数接口定义: ElementType Max ...
- Codeforces Round #447 (Div. 2) 题解 【ABCDE】
BC都被hack的人生,痛苦. 下面是题解的表演时间: A. QAQ "QAQ" is a word to denote an expression of crying. Imag ...
- js小题目(持续更新)
总是感觉之前做过的问题很久没碰的话就会忘掉,于是打算专门开一个记录小题目的随笔当题典用. 目录 五种主要数据类型进行值复制 数组去重 数组去重并计数 实现clone()方法,对五种主要数据类型进行值复 ...
- JS_高程5.引用类型(2)Array类型
Array类型: ECMAScript数组的每一项可以保存任何类型的数据,数组的大小是可以动态调整的. 创建数组的基本方式: (1)使用Array构造函数 var color=new Array(); ...
- 【最短路】道路重建 @upcexam5797
时间限制: 1 Sec 内存限制: 128 MB 题目描述 小L的家乡最近遭遇了一场洪水,城市变得面目全非,道路也都被冲毁了.生活还要继续,于是市政府决定重建城市中的道路. 在洪水到来前,城市中共有n ...
- Nanopi2基本使用
1.首先刷系统,把TF卡放到读卡器中,根据官网教程(http://www.arm9.net/nanopi-m2.asp)下载固件,并烧写. 2.硬件连接:把TF卡插到Nanopi2的boot卡槽, ...