基于FFmpeg的教学资源库的非MP4视频转换为MP4流程
基于FFmpeg的教学资源库的非MP4视频转换为MP4流程
运行环境:
Win2003(或者Win2008 64bit,优先此步)、SQL Server 2005(或者SQL Server2008)
执行方式:
批处理方式执行,已转换视频列表、写入数据库;错误日志写入本机的执行程序下面。
1.转换步骤描述
1、非MP4视频列表
连接教学资源库数据库,查找本机的非MP4视频资源,得到非MP4视频列表。
2、生成原视频的MD5码
将所有的原视频生成MD5码。
3、判断该视频是否已经转换
比对新旧两个数据表,得到未转换的视频列表。
4、视频异步转换
根据非MP4视频列表,采用异步方式、批量将视频转换为MP4格式。转换前需要做的判断:是否有足够的视频存储空间(可用空间是否大于原视频的大小)、CPU使用率是否达到阈值(60%)、该视频是否已经转换过。
5、生成新视频MD5
6、新视频列表
新建数据库,保存已转换视频列表。包括SID、原地址、新地址、原MD5、新MD5、转换时长、转换完成时间。
7、异常处理
遇到以下情况:
空间不足、CPU超过阈值,
停止转换,生成报错日志,保存在本地的服务器。
2.转换流程
1)多台存储服务器异步视频转换
多台存储服务器异步视频转换
2)教学资源库非MP4视频列表转换流程
原来存储在数据库的视频(wmv格式)的是没有MD5码,程序生成MD5码。
教学资源库非MP4视频列表转换流程
3)单次视频转换流程
单次视频转换流程
3)列表
已转换的视频列表
SID |
原地址 |
新地址 |
原MD5 |
新MD5 |
转换时长 |
转换完成时间 |
|
|
|
错误日志
SID |
错误原因 |
报错时间 |
|
|
|
|
|
|
|
注:MD5值是一种密码值,要是视频内容没有改变过,那么上传和下载的视频的MD5值是一样的。
3.具体实现
1、命令行登录sql server 2008r2
在命令行窗口下 SQL code 1.使用osql >osql -Slocalhost -Usa -Ppass >use 数据库名称 >select * from sysobjects
2.使用sqlcmd sqlcmd -U sa -P pass -S localhost
2、视频转换
1)按照原来的大小、尺寸转换
start
ffmpeg.exe -i culture.wmv iCulture5.mp4
exit
2)acc编码
start
ffmpeg.exe -i culture.wmv -vcodec libx264 -preset ultrafast -profile:v baseline -acodec aac -strict experimental -s 640*480 -b 568k -ab 128k iCulture.mp4
exit
-vcodec libx264 使用h264转换
-acodec aac 音频编码用AAC
-b 800 视频数据流量,-b xxx的指令则使用固定码率,数字随机,1500以上没有效果;还可以用动态码率,如:-qscale 4、-qscale 6,4的质量比6的高。
-s 640*480 视频大小
-ab 128k 音频数据流量,一般选择32、64、96、128
3、代码
程序执行步骤
1、 从202.205.161.177(sa,sa.net)的MDER_CENTER_DATA数据库的[MDER_CENTER].[dbo].[COMM_SYS_STORAGESERVER]表找到本服务器IP对应的SERVER_ID。(STORAGEPATH是视频文件存储的路径)
2、 根据SERVER_ID ,在[MDER_CENTER].[dbo].[COMM_MEDIA_INFO]数据库中遍历得到本地数据库的所有wmv格式的视频文件。
得到本服务器ID、未转换的wmv格式的视频文件
" select * from [MDER_CENTER].[dbo].[COMM_MEDIA_INFO] where STORAGE_SERVERID='" + serverID +
"' AND RESOURCE_URL like '%.wmv' AND MEDIA_ID not in (select MEDIA_ID from [MDER_CENTER].[dbo].[COMM_CONVERTMP4_INFO] )";
select * from [MDER_CENTER].[dbo].[COMM_MEDIA_INFO]
where STORAGE_SERVERID='22222222-2222-2222-2222-222222222222'
update [MDER_CENTER].[dbo].[COMM_MEDIA_INFO]
set STORAGE_SERVERID='88888888-44af-4310-9468-17ec508e838'
where MEDIA_ID='d2168944-c004-4df1-b572-7e5e90165ad8'
update [MDER_CENTER].[dbo].[COMM_SYS_STORAGESERVER]
set STORAGEPATH='E:/video/'
where SERVER_ID='22222222-2222-2222-2222-222222222222'