基於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'