项目:私“图”定制——利用ffmpeg制作Gif

目录:


项目背景

可行性方面

需求分析

详细设计

测试

维护

项目效果图展示

完整代码


项目背景:

文字信息时代,传统的文字聊天方式已不能满足大众的需求,很多时候文字不能表达自己的想法,或者沟通技巧的欠缺,后就成为了尬聊。"一言不合就斗图",能用一张图说明的。

暴走表情广泛的遍布于网络,网民们大多用作斗图。一般常见于QQ、微信。斗图活动起始于QQ,群聊时大家发送搞趣图片以相互娱乐。后来发展到百度贴吧等各种论坛上,时常有人发帖组织斗图活动。

斗图发展到现在不仅仅用这些表情图,还会恶搞明星、电影人物。以图加文字的自由组合,结合网络语言,制作搞笑逗比的图片。

可行性方面:

  • 经济可行性——低成本
  • 操作可行性——简单
  • 技术可行性——借助其他工具

需求分析:

制作Gif动图,因此选择两种生成方式:1.图片生成;2.视频生成。

技术方面借助其他的工具实现:选择 ffmpeg 工具。

FFmpeg即是一块音视频编解码工具,同时也是一组音视频编解码开发套件,为开发者提供了丰富的音视频 处理调用接口。FFmpeg中的"FF"指的是"Fast Forward",mpeg则是动态图像专家组。 它提供了录制、转换 以及流化音视频的完整解决方案。 它包含了非常先进的音频/视频编解码库 libavcodec, 为了保证高可移植 性和编解码质量, libavcodec 里很多 codec 都是从头开发的。

FFmpeg项目由以下几部分组成:

  • 1. ffmpeg 视频文件转换命令行工具,也支持经过实时电视卡抓取和编码成视频文件。
  • 2. ffserver 基于 HTTP、RTSP 用于实时广播的多媒体服务器.也支持时间平移。
  • 3. ffplay 用 SDL 和 FFmpeg 库开发的一个简单的媒体播放器。
  • 4. libavcodec 一个包含了所有 FFmpeg 音视频编解码器的库.为了保证优性能和高可复用性,大多数编解 码器从头开发的。
  • 5. libavformat 一个包含了所有的普通音视格式的解析器和产生器的库

学习ffmpeg 工具我们可以知道:ffmpeg 是使用命令行的形式,给予 cmd 一定的命令,实现相应的操作。

因此我们的实验原理:在程序中通过 cmd 控制台调用 ffmpeg.exe 工具,并给该工具发送对应的命令,完成所需操作,发命令时,cmd窗口隐藏在后台。

总体设计:

本项目有两种生成gif动态图方式: 1. 使用图片生成 2. 使用短视频生成

实现原理:在程序中通过cmd控制台调用ffmpeg.exe工具,并给该工具发送对应的命令,完成所需操作,发命令时,cmd窗口隐藏在后台。

我们还需要有一定的操作界面:依靠 duilib 库。

DuiLib库是一款由杭州月牙儿网络技术有限公司开发,轻量级的C++界面开发库,遵循开源BSD协议,可以免费用于商业项目。Duilib界面库的优势在于:

  • 1. 基于GDI在窗口上自绘,无其他依赖,未使用特殊或危险的系统调用,能够很好的解决传统MFC界面的一系列问题
  • 2. 使用XML来描述界面风格,界面布局,将界面和逻辑分离,同时易于实现各种超炫的界面效果如换色,换肤,透明等
  • 3. 完全兼容ActiveX控件(如常见的IE控件和Flash),也可以和MFC等界面库配合使用
  • 4. 可广泛用于互联网客户端、工具软件客户端、管理系统客户端、多媒体客户端(如KTV、触摸屏)、车载电脑系统、gps系统和手机客户端软件等。

许多知名公司都采用Duilib作为界面库,比如:华为网盘、PPS、金山快盘、酷我音乐、爱奇艺视频、百度杀毒、百度卫士等一些列产品。

注意:Duilib仅仅是基于Win32的一套UI库。因此要了解 Win32 程序相关知识。


Win32 的相关知识:

一个Win32应用程序可以分为程序代码和UI资源两大部分,两部分终是以rc整合成一个完整的exe可执行程序。所谓UI资源,指的是功能菜单、对话框外貌、程序图标、光标形状等东西。

代码示例,展示Win32 界面:

 #include <Windows.h> 
#include <tchar.h>
 
 
//消息回调函数 
LRESULT CALLBACK WinProc(HWND hWnd, UINT message, 
                            WPARAM wParam, LPARAM lParam) {    
    switch (message) {    
        case WM_CLOSE:        
            if (IDOK == MessageBox(hWnd, _T("你确定退出?"), 
                    _T("退出"), MB_OKCANCEL))  {            
                DestroyWindow(hWnd);  
                return 0; 
            }    
        case WM_DESTROY:  
            PostQuitMessage(0); 
            return 0;   
        default:   
            return DefWindowProc(hWnd, message, wParam, lParam);    
    } 
}

int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) {
    //Step1:注册一个窗口类    
	HWND hwnd; //窗口的句柄    
	WNDCLASSEX wc; //窗口类结构    
	wc.cbSize = sizeof(WNDCLASSEX);    
	wc.style = CS_VREDRAW | CS_HREDRAW;    
	wc.lpszMenuName = 0;   
	wc.lpszClassNa
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值