本文介绍一个自己做的FFMPEG移植到VC下的开源工程:ffmpeg for MFC。本工程将ffmpeg工程中的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)

* 更换了部分界面

* 原工程支持Unicode编码

* 修复了一部分内存泄露的问题

* 修正了ffmpeg.c中的exit_program()函数。保证在转码结束后可以释放资源。

* 修正了一部分“任务列表”的功能

* 修正了添加任务的时候“要用按钮去选输入文件,不能自己直接输入”的问题。

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

一.主界面

程序的主界面如图所示。主界面中包含一个任务列表,其中包含了需要转码的任务。下方是转码的控制按钮,并且包含了转码的进度信息。

1.1.任务列表

任务列表包含了需要转码的任务。列表的上方包含了4个按钮,包含了对任务列表的4种操作:添加,编辑,删除,清空。此外,在任务列表中选择一个任务然后单击右键,也可以在右键菜单中选择这4项操作。这4项操作如下:

添加:新增加一个任务。

编辑:修改现有的一个任务。

删除:删除一个任务。

清空:删除所有的任务。

列表显示了任务的信息。包含:序号,输入,大小,输出,状态。含义如下:

序号:编号。

输入:输入文件名称。

大小:输入文件大小。

输出:输出文件名称。

状态:该任务所处的状态(准备,处理中,已完成)。

1.2.控制按钮

控制按钮完成了对转码过程的控制功能。包含:开始,暂停,停止。

开始:系统开始转码。

暂停:系统暂停转码。

停止:系统停止转码。

二.任务信息窗口

任务信息窗口用于配置一条任务信息。其中包含了三个部分:输入和输出,输入文件信息,输出配置。

2.1.输入和输出

输入和输出部分用于指定该任务的输入文件和输出文件。输入文件即准备进行转码的文件,输出文件即转码后生成的文件。可以直接在输入框中输入文件路径,也可以单击输入框右侧的“文件”按钮选择文件。此外还可以直接将文件拖拽至对话框的方式选择输入文件。

选择输入文件后,程序会检查输入文件的格式信息。如果输入文件不是视音频文件,程序会报出错误信息。如果输入文件为视音频文件,程序会检测该文件的参数信息,包括封装格式,视频编码,音频编码等信息。并将检测结果显示在“输入文件信息”部分。

为了方便起见,选择输入文件后,程序会在输入文件的目录下生成名为“{输入文件名称}_ffmfc.mkv”的输出文件。可以对该输出文件路径和名称进行更改。

2.2.输入文件信息

包含:封装格式,视频比特率,时长,输出像素格式,视频编码方式,帧率,画面大小,采样率,音频编码方式,声道数。

2.3.输出配置

封装格式

输入封装格式:强制指定输入文件的格式。默认情况下ffmpeg是通过输入文件的后缀判断文件格式的。如果指定了这个选项,则按照该指定的格式对文件进行解析。

输出封装格式:强制指定输出文件的格式。默认情况下ffmpeg是通过输出文件的后缀判断文件格式的。如果指定了这个选项,则按照该指定的格式对文件进行转码。

视频

比特率:视频的码率,默认800kbps。

编码器:视频编码使用的编码器。

帧率:视频编码使用的帧率,默认25fps。

音频

比特率:音频的码率,默认64kbps。

编码器:音频编码使用的编码器。

采样率:音频的采样率,默认44100Hz。

声道数:音频的声道数,默认是2。

输出的封装格式,视频编码格式,音频编码格式以列表的形式显示出来,可以自行选择。

   

三.系统支持信息窗口

系统支持信息窗口列表显示了系统的支持信息。包括系统支持的:协议,输入封装格式,输出封装格式,视频解码器,音频解码器,以及其他解码器(字幕解码器)。例如从视频解码器列表中可以看出本程序支持的视频编码器包含libx264,libvpx等等。

四.菜单

程序上端的菜单中包含了更丰富的选项。一共分成5部分的功能:任务,控制,视图,语言,帮助。下面分别介绍。

任务:对任务列表进行添加,编辑,删除,清空操作。

控制:控制转码的开始,暂停,停止。

语言:设置界面的语言。

五.英文界面

英文界面截图如下所示。

主界面

任务信息窗口

系统支持信息窗口

ffmpeg转码器移植VC的工程:ffmpeg for MFC的更多相关文章

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

    本文介绍一个自己做的FFMPEG移植到VC下的开源project:ffmpeg for MFC.本project将ffmpegproject中的ffmpeg转码器(ffmpeg.c)移植到了VC环境下 ...

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

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

  3. 在VC++空工程中使用MFC类,采用Unicode字符集后,运行工程程序报错的解决方案

    创建一个VC++空工程,将Project Properties->General->Use of MFC改为Use MFC in a Shared DLL 新建一个源文件,内容如下 #in ...

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

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

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

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

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

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

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

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

  8. FFmpeg源码结构图 - 解码

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

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

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

随机推荐

  1. 基于PHP的对接免费电子面单接口平台的案例-快宝开放平台

    一.电子面单对接平台 电子面单对接平台分为两类: 1 .各大快递公司自有的电子面单接口开放平台:对接起来麻烦,需要每个快递公司分别调试接口,费时费力. 2 .第三方快递开放平台:如快宝开放平台(htt ...

  2. ACM 畅通工程2

    Problem Description 省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).经过调查评估,得到 ...

  3. Node.js HTTPS

    稳定性: 3 - 稳定 HTTPS 是基于 TLS/SSL 的 HTTP 协议.在 Node 里作为单独的模块来实现. 类: https.Server 这是 tls.Server 的子类,并且和 ht ...

  4. mybatis常用配置

    前面两篇博客我们简单介绍了mybatis的使用,但是在mybatis的配置问题上我们只是使用了最基础的配置,本文我们就来说说其他一些常用的配置.如果小伙伴对mybatis尚不了解,可以先参考这两篇博客 ...

  5. 【Java集合系列】---ArrayList

    开篇前言--ArrayList中的基本方法 前面的博文中,小编主要简单介绍java集合的总体架构,在接下来的博文中,小编将详细介绍里面的各个类,通过demo.对比,来对java集合类进行更加深入的理解 ...

  6. 独立开发一个云(PaaS)的核心要素, Go, Go, Go!!!

    最近一年的工作,有很大的比重在做云平台的事情,简单来说,就是为公司内用户提供一个PaaS,用户可以在我们的云平台上方便的将单机服务程序扩展为多实例程序,以平台服务化的方式对外提供.在这里简单分享一下. ...

  7. rbac数据库设计

    1 rbac数据库设计 RBAC基于资源的访问控制(Resource-Based Access Control)是以资源为中心进行访问控制分享牛原创,分享牛系列,分享牛.rbac 用户角色权限资源表如 ...

  8. 一个貌似比较吊的递归转换为loop--总算成功了.--第二弹

    前段时间用类似于散弹式编程的方式,各种猜测-运行验证-修正结果,最终成功转换了一个看起来比较有难度的递归函数.但总觉得很蛋疼,原因如下: 1.虽然正确,但是逻辑搞得比较复杂.现在去看,一头雾水,不知道 ...

  9. Maven坐标机制

    Maven为所有的项目引入了坐标,基于坐标机制可以唯一定位一个项目. 坐标详解 以spring-core-2.5.6.jar的坐标定义为例,说明组成坐标的所有元素:groupId.artifactId ...

  10. Kafka学习笔记2: 快速入门

    在开始Kafka环境搭建之前,首先要安装Linux系统,并在Linux系统上安装JDK1.8版本,关于linux虚拟机的安装和linux系统下jdk的安装可以参考我的博文: http://blog.c ...