本文介紹一個本身作的FFMPEG移植到VC下的開源project:ffmpeg for MFC。本project將ffmpegproject中的ffmpeg轉碼器(ffmpeg.c)移植到了VC環境下。html
並且使用MFC作了一套簡單的界面。它可以完畢一個視頻轉碼的基本功能:封裝格式以及編碼格式的轉換。git
經過本程序可以學習視頻轉碼器的原理。以及Windows的消息機制等知識。github
平臺:VC2010web
類庫:FFmpeg,MFC函數
眼下正在無缺中。先不上傳到CSDN下載了。post
在SourceForge上創建了一個項目。學習
項目主頁編碼
SourceForge:https://sourceforge.net/projects/ffmpegformfc/.net
Github:https://github.com/leixiaohua1020/ffmpegmfccode
開源中國: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,並且包括了轉碼的進度信息。
任務列表包括了需要轉碼的任務。列表的上方包括了4個button,包括了對任務列表的4種操做:加入,編輯,刪除,清空。此外,在任務列表中選擇一個任務而後單擊右鍵,也可以在右鍵菜單中選擇這4項操做。
這4項操做例如如下:
加入:新添加一個任務。
編輯:改動現有的一個任務。
刪除:刪除一個任務。
清空:刪除所有的任務。
列表顯示了任務的信息。包括:序號,輸入,大小。輸出,狀態。
含義例如如下:
序號:編號。
輸入:輸入文件名。
大小:輸入文件大小。
輸出:輸出文件名。
狀態:該任務所處的狀態(準備,處理中,已完畢)。
控制button完畢了對轉碼過程的控制功能。包括:開始,暫停,中止。
開始:系統開始轉碼。
暫停:系統暫停轉碼。
中止:系統中止轉碼。
任務信息窗體用於配置一條任務信息。當中包括了三個部分:輸入和輸出,輸入文件信息。輸出配置。
輸入和輸出部分用於指定該任務的輸入文件和輸出文件。
輸入文件即準備進行轉碼的文件。輸出文件即轉碼後生成的文件。可以直接在輸入框中輸入文件路徑,也可以單擊輸入框右側的「文件」button選擇文件。此外還可以直接將文件拖拽至對話框的方式選擇輸入文件。
選擇輸入文件後。程序會檢查輸入文件的格式信息。假設輸入文件不是視音頻文件。程序會報出錯誤信息。假設輸入文件爲視音頻文件,程序會檢測該文件的參數信息。包括封裝格式,視頻編碼,音頻編碼等信息。
並將檢測結果顯示在「輸入文件信息」部分。
爲了方便起見,選擇輸入文件後。程序會在輸入文件的文件夾下生成名爲「{輸入文件名}_ffmfc.mkv」的輸出文件。
可以對該輸出文件路徑和名稱進行更改。
包括:封裝格式,視頻比特率,時長。輸出像素格式。視頻編碼方式。幀率,畫面大小,採樣率。音頻編碼方式,聲道數。
封裝格式
輸入封裝格式:強制指定輸入文件的格式。
默認狀況下ffmpeg是經過輸入文件的後綴推斷文件格式的。假設指定了這個選項,則依照該指定的格式對文件進行解析。
輸出封裝格式:強制指定輸出文件的格式。默認狀況下ffmpeg是經過輸出文件的後綴推斷文件格式的。假設指定了這個選項,則依照該指定的格式對文件進行轉碼。
視頻
比特率:視頻的碼率,默認800kbps。
編碼器:視頻編碼使用的編碼器。
幀率:視頻編碼使用的幀率,默認25fps。
音頻
比特率:音頻的碼率,默認64kbps。
編碼器:音頻編碼使用的編碼器。
採樣率:音頻的採樣率,默認44100Hz。
聲道數:音頻的聲道數,默認是2。
輸出的封裝格式,視頻編碼格式,音頻編碼格式以列表的形式顯示出來。可以自行選擇。
系統支持信息窗體列表顯示了系統的支持信息。包括系統支持的:協議,輸入封裝格式,輸出封裝格式,視頻解碼器,音頻解碼器。以及其它解碼器(字幕解碼器)。
好比從視頻解碼器列表中可以看出本程序支持的視頻編碼器包括libx264。libvpx等等。
程序上端的菜單中包括了更豐富的選項。一共分紅5部分的功能:任務。控制,視圖,語言,幫助。
如下分別介紹。
任務:對任務列表進行加入,編輯。刪除,清空操做。
控制:控制轉碼的開始,暫停,中止。
語言:設置界面的語言。
英文界面截圖例如如下所看到的。
主界面
任務信息窗體
系統支持信息窗體