天天看點

ffmpeg轉碼器移植VC的工程:ffmpeg for MFC

本文介紹一個自己做的FFMPEG移植到VC下的開源工程:ffmpeg for MFC。本工程将ffmpeg工程中的ffmpeg轉碼器(ffmpeg.c)移植到了VC環境下。并且使用MFC做了一套簡單的界面。它可以完成一個視訊轉碼的基本功能:封裝格式以及編碼格式的轉換。通過本程式可以學習視訊轉碼器的原理,以及Windows的消息機制等知識。

ffmpeg轉碼器移植VC的工程:ffmpeg for MFC

平台: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

ffmpeg轉碼器移植VC的工程:ffmpeg for MFC

一.主界面

程式的主界面如圖所示。主界面中包含一個任務清單,其中包含了需要轉碼的任務。下方是轉碼的控制按鈕,并且包含了轉碼的進度資訊。

ffmpeg轉碼器移植VC的工程:ffmpeg for MFC

1.1.任務清單

任務清單包含了需要轉碼的任務。清單的上方包含了4個按鈕,包含了對任務清單的4種操作:添加,編輯,删除,清空。此外,在任務清單中選擇一個任務然後單擊右鍵,也可以在右鍵菜單中選擇這4項操作。這4項操作如下:

添加:新增加一個任務。

編輯:修改現有的一個任務。

删除:删除一個任務。

清空:删除所有的任務。

清單顯示了任務的資訊。包含:序号,輸入,大小,輸出,狀态。含義如下:

序号:編号。

輸入:輸入檔案名稱。

大小:輸入檔案大小。

輸出:輸出檔案名稱。

狀态:該任務所處的狀态(準備,進行中,已完成)。

1.2.控制按鈕

控制按鈕完成了對轉碼過程的控制功能。包含:開始,暫停,停止。

開始:系統開始轉碼。

暫停:系統暫停轉碼。

停止:系統停止轉碼。

二.任務資訊視窗

任務資訊視窗用于配置一條任務資訊。其中包含了三個部分:輸入和輸出,輸入檔案資訊,輸出配置。

ffmpeg轉碼器移植VC的工程:ffmpeg for MFC

2.1.輸入和輸出

輸入和輸出部分用于指定該任務的輸入檔案和輸出檔案。輸入檔案即準備進行轉碼的檔案,輸出檔案即轉碼後生成的檔案。可以直接在輸入框中輸入檔案路徑,也可以單擊輸入框右側的“檔案”按鈕選擇檔案。此外還可以直接将檔案拖拽至對話框的方式選擇輸入檔案。

選擇輸入檔案後,程式會檢查輸入檔案的格式資訊。如果輸入檔案不是視音頻檔案,程式會報出錯誤資訊。如果輸入檔案為視音頻檔案,程式會檢測該檔案的參數資訊,包括封裝格式,視訊編碼,音頻編碼等資訊。并将檢測結果顯示在“輸入檔案資訊”部分。

為了友善起見,選擇輸入檔案後,程式會在輸入檔案的目錄下生成名為“{輸入檔案名稱}_ffmfc.mkv”的輸出檔案。可以對該輸出檔案路徑和名稱進行更改。

2.2.輸入檔案資訊

包含:封裝格式,視訊比特率,時長,輸出像素格式,視訊編碼方式,幀率,畫面大小,采樣率,音頻編碼方式,聲道數。

2.3.輸出配置

封裝格式

輸入封裝格式:強制指定輸入檔案的格式。預設情況下ffmpeg是通過輸入檔案的字尾判斷檔案格式的。如果指定了這個選項,則按照該指定的格式對檔案進行解析。

輸出封裝格式:強制指定輸出檔案的格式。預設情況下ffmpeg是通過輸出檔案的字尾判斷檔案格式的。如果指定了這個選項,則按照該指定的格式對檔案進行轉碼。

視訊

比特率:視訊的碼率,預設800kbps。

編碼器:視訊編碼使用的編碼器。

幀率:視訊編碼使用的幀率,預設25fps。

音頻

比特率:音頻的碼率,預設64kbps。

編碼器:音頻編碼使用的編碼器。

采樣率:音頻的采樣率,預設44100Hz。

聲道數:音頻的聲道數,預設是2。

輸出的封裝格式,視訊編碼格式,音頻編碼格式以清單的形式顯示出來,可以自行選擇。

ffmpeg轉碼器移植VC的工程:ffmpeg for MFC
ffmpeg轉碼器移植VC的工程:ffmpeg for MFC
ffmpeg轉碼器移植VC的工程:ffmpeg for MFC

三.系統支援資訊視窗

系統支援資訊視窗清單顯示了系統的支援資訊。包括系統支援的:協定,輸入封裝格式,輸出封裝格式,視訊解碼器,音頻解碼器,以及其他解碼器(字幕解碼器)。例如從視訊解碼器清單中可以看出本程式支援的視訊編碼器包含libx264,libvpx等等。

ffmpeg轉碼器移植VC的工程:ffmpeg for MFC

四.菜單

程式上端的菜單中包含了更豐富的選項。一共分成5部分的功能:任務,控制,視圖,語言,幫助。下面分别介紹。

任務:對任務清單進行添加,編輯,删除,清空操作。

ffmpeg轉碼器移植VC的工程:ffmpeg for MFC

控制:控制轉碼的開始,暫停,停止。

ffmpeg轉碼器移植VC的工程:ffmpeg for MFC

語言:設定界面的語言。

ffmpeg轉碼器移植VC的工程:ffmpeg for MFC

五.英文界面

英文界面截圖如下所示。

主界面

ffmpeg轉碼器移植VC的工程:ffmpeg for MFC

任務資訊視窗

ffmpeg轉碼器移植VC的工程:ffmpeg for MFC

系統支援資訊視窗

ffmpeg轉碼器移植VC的工程:ffmpeg for MFC