本文介绍一个自己做的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的更多相关文章

  1. ffmpeg转码器移植VC的工程:ffmpeg for MFC

    本文介绍一个自己做的FFMPEG移植到VC下的开源工程:ffmpeg for MFC.本工程将ffmpeg工程中的ffmpeg转码器(ffmpeg.c)移植到了VC环境下.并且使用MFC做了一套简单的 ...

  2. ffplay播放器移植VC的project:ffplay for MFC

    本文介绍一个自己做的FFPLAY移植到VC下的开源project:ffplayfor MFC.本project将ffmpeg项目中的ffplay播放器(ffplay.c)移植到了VC的环境下.而且使用 ...

  3. ffplay播放器移植VC的工程:ffplay for MFC

    本文介绍一个自己做的FFPLAY移植到VC下的开源工程:ffplayfor MFC.本工程将ffmpeg项目中的ffplay播放器(ffplay.c)移植到了VC的环境下.并且使用MFC做了一套简单的 ...

  4. 最简单的基于FFmpeg的移动端例子:IOS 视频转码器

    ===================================================== 最简单的基于FFmpeg的移动端例子系列文章列表: 最简单的基于FFmpeg的移动端例子:A ...

  5. 最简单的基于FFmpeg的移动端样例:IOS 视频转码器

    ===================================================== 最简单的基于FFmpeg的移动端样例系列文章列表: 最简单的基于FFmpeg的移动端样例:A ...

  6. 最简单的基于FFmpeg的移动端样例:Android 视频转码器

    ===================================================== 最简单的基于FFmpeg的移动端样例系列文章列表: 最简单的基于FFmpeg的移动端样例:A ...

  7. FFmpeg源码结构图 - 解码

    ===================================================== FFmpeg的库函数源码分析文章列表: [架构图] FFmpeg源码结构图 - 解码 FFm ...

  8. FFmpeg源码简单分析:libswscale的sws_scale()

    ===================================================== FFmpeg的库函数源码分析文章列表: [架构图] FFmpeg源码结构图 - 解码 FFm ...

  9. FFmpeg源码结构图 - 编码

    ===================================================== FFmpeg的库函数源码分析文章列表: [架构图] FFmpeg源码结构图 - 解码 FFm ...

随机推荐

  1. 解决Python自带的json不能序列化data,datetime类型数据问题

    官方文档中的一个Demo: >>> import json >>> class ComplexEncoder(json.JSONEncoder): ... def ...

  2. BZOJ.4825.[AHOI/HNOI2017]单旋(线段树)

    BZOJ LOJ 洛谷 这题不难啊,我怎么就那么傻,拿随便一个节点去模拟.. 我们只需要能够维护,将最小值或最大值转到根.模拟一下发现,对于最小值,它的右子树深度不变(如果存在),其余节点深度全部\( ...

  3. 2017-9-12-Linux移植&驱动开发

    准备学习Linux很长时间了,很大的一个原因就是兴趣,Linux对科技进步发展.人们生活的改变影响之深很难用简简单单的一些话描述清楚.跟Linux密切相关的东西,开源软件.c语言.底层驱动.网络.服务 ...

  4. python正则表达式(一)

    ---恢复内容开始--- 正则表达式,又称正规表示式.正规表示法.正规表达式.规则表达式.常规表示法(英语:Regular Expression,在代码中常简写为regex.regexp或RE),是计 ...

  5. 学习Struts--Chap04:result中type属性dispatcher、redirect、redirectAction、chain的区别

    1.Struts2框架中常用的结果类型的分析和比较 dispatcher:缺省的result类型,type默认是dispatcher内部转发.如果不写type类型只写一个名字的话,不单是type类型默 ...

  6. git使用,提交代码简记

    强制覆盖本地修改:git reset --hard 项目初始时获取前端代码: git clone https://git.oschina.net/yudian/yudian-frontend.git ...

  7. Linux之通配符实验

    作业五:通配符实验 反引号与()在此时都是表死获取结果 但是一般使用()的方式,因为反引号在多个反引号的时候无法正确指代 获取当前bash 的变量 echo $变量名 echo $? 表示上一次命令的 ...

  8. elastic-job详解(二):作业的调度

    JobScheduler是elastic-job作业调度的关键类,也是起始类,在包com.dangdang.ddframe.job.lite.api下.调度任务的执行需要包含两大步骤:任务的配置和任务 ...

  9. IDEA 下载 和 安装

    1. IDEA 下载 网址     pttps://www.jetbrains.com IDEA      优点  :高度集成企业软件工程的概念(svn, git) 缺点: 破解存在在法律风险 ; E ...

  10. jQuery鼠标悬停3d菜单展开动画

    效果体验:http://hovertree.com/texiao/jquery/93/ 竖直的主菜单贴着页面左侧,当光标移入菜单项时,以3D动画的方式弹出对应的二级菜单.采用jQuery和CSS3实现 ...