本發(fā)明涉及視頻編輯技術領域,尤其是涉及一種基于ffmpeg的視頻編輯方法及裝置。
背景技術:
近年來,隨著手機性能的不斷提高、手機屏幕的尺寸不斷攀升、大屏幕掌上設備的不斷普及,催生了移動平臺媒體的誕生。手機拍攝視頻的用戶特別是青少年手機拍攝愛好者逐漸增多。應用移動終端拍攝的視頻效果較單調(diào),用戶在分享自己錄制的手機視頻的時候往往需要通過編輯加工后再發(fā)布出去,在此過程中,為滿足用戶的體驗需求,移動終端上進行視頻后期編輯的應用軟件相應而生。
對于android平臺上視頻的編輯,有多種方案可供選擇。
1.ffmpeg框架,對視頻進行一幀一幀解碼編碼處理。
2.第三方Java開源庫,比如優(yōu)秀的mp4parser。
3.Android4.1中新加入的API(Application Programming Interface,應用程序編程接口):MediaCodec。
以上方法都有各自的優(yōu)劣勢,其中ffmpeg框架,需要做JNI(Java Native Interface,Java本地接口)實現(xiàn)。通過編碼解碼可以裁剪任意長度視頻的任意中間長度區(qū)間,支持對視頻的多種處理;支持裁剪屏幕尺寸。
然而,移動終端如手機、平板,視頻編輯功能過于簡單,許多用戶選擇把需要編輯的視頻導入到電腦進行處理,然后再傳輸回移動終端中,過程復雜麻煩,給在外游玩或者辦公的用戶帶來了極大的不便。
因此,現(xiàn)有的移動終端視頻編輯存在著功能過于簡單、用戶使用不便等問題。
技術實現(xiàn)要素:
有鑒于此,本發(fā)明的目的在于提供一種基于ffmpeg的視頻編輯方法及裝置,以緩解現(xiàn)有的移動終端視頻編輯存在的功能過于簡單、用戶使用不便等問題。
第一方面,本發(fā)明實施例提供了一種基于ffmpeg的視頻編輯方法,應用于移動終端,該方法包括:
獲取并打開指定目錄下的視頻文件;
接收用戶輸入的操作指令,其中,所述操作指令包括視頻剪切指令、水印添加指令、錄音混合指令中的一種或多種;
當所述操作指令為所述視頻剪切指令時,對所述視頻文件進行剪切;
當所述操作指令為所述水印添加指令時,通過在軟編碼過程中啟用neon指令或者利用硬編碼添加水印至所述視頻文件;
當所述操作指令為所述錄音混合指令時,將錄音文件與所述視頻文件進行混合。
結(jié)合第一方面,本發(fā)明實施例提供了第一方面的第一種可能的實施方式,其中,所述通過在軟編碼過程中啟用neon指令或者利用硬編碼添加水印至所述視頻文件,包括:
檢查移動終端是否支持硬解碼和硬編碼;
若是,則調(diào)用移動終端的GPU對所述視頻文件進行硬解碼和硬編碼;
若否,則調(diào)用移動終端的CPU啟用neon指令對所述視頻文件進行軟解碼和軟編碼。
結(jié)合第一方面,本發(fā)明實施例提供了第一方面的第二種可能的實施方式,其中,通過在軟編碼過程中啟用neon指令或者利用硬編碼添加水印至所述視頻文件的過程中,還包括:
根據(jù)人眼視覺的時間特性,對添加水印中的所述視頻文件進行減幀處理,使添加水印后的所述視頻文件的輸出幀率達到預設幀率。
結(jié)合第一方面,本發(fā)明實施例提供了第一方面的第三種可能的實施方式,其中,所述通過在軟編碼過程中啟用neon指令或者利用硬編碼添加水印至所述視頻文件,包括:
獲取當前水印圖片列表中的水印圖片,并通過在軟編碼過程中啟用neon指令或者利用硬編碼將所述水印圖片添加至所述視頻文件。
結(jié)合第一方面的第三種可能的實施方式,本發(fā)明實施例提供了第一方面的第四種可能的實施方式,其中,所述水印添加指令包括文字內(nèi)容、圖片內(nèi)容、文字格式以及標簽樣式中的一種或者多種;
所述通過在軟編碼過程中啟用neon指令或者利用硬編碼添加水印至所述視頻文件之前,還包括:
根據(jù)所述水印添加指令,生成所述水印圖片;
將所述水印圖片存儲至水印圖片列表中。
結(jié)合第一方面,本發(fā)明實施例提供了第一方面的第五種可能的實施方式,其中,所述將錄音文件與所述視頻文件進行混合,包括:
獲取當前錄音列表中的所述錄音文件,將所述錄音文件與所述視頻文件進行混合。
結(jié)合第一方面的第五種可能的實施方式,本發(fā)明實施例提供了第一方面的第六種可能的實施方式,其中,所述錄音混合指令包括錄音插入時間;
所述將所述錄音文件與所述視頻文件進行混合的具體過程為:
將所述視頻文件分離為純音頻文件和純視頻文件;
根據(jù)所述錄音插入時間,將所述錄音文件進行延時;
將延時后的錄音文件與所述純音頻文件混合得到混頻文件;
將所述混頻文件與所述純視頻文件混合得到錄音混合后的視頻文件。
第二方面,本發(fā)明實施例還提供一種基于ffmpeg的視頻編輯裝置,包括:
視頻獲取模塊,用于獲取并打開指定目錄下的視頻文件;
操作接收模塊,用于接收用戶輸入的操作指令,其中,所述操作指令包括視頻剪切指令、水印添加指令、錄音混合指令中的一種或者多種;
視頻剪切模塊,用于當所述操作指令為所述視頻剪切指令時,對所述視頻文件進行剪切;
水印添加模塊,用于當所述操作指令為所述水印添加指令時,通過在軟編碼過程中啟用neon指令或者利用硬編碼添加水印至所述視頻文件;
錄音混合模塊,用于當所述操作指令為所述錄音混合指令時,將錄音文件與所述視頻文件進行混合。
結(jié)合第二方面,本發(fā)明實施例提供了第二方面的第一種可能的實施方式,其中,所述水印添加模塊包括:
檢查單元,用于檢查移動終端是否支持硬解碼和硬編碼;
GPU調(diào)用單元,用于若檢查移動終端支持硬解碼和硬編碼,則調(diào)用移動終端的GPU對所述視頻文件進行硬解碼和硬編碼;
CPU調(diào)用單元,用于若檢查移動終端不支持硬解碼和硬編碼,則調(diào)用移動終端的CPU啟用neon指令對所述視頻文件進行軟解碼和軟編碼。
結(jié)合第二方面,本發(fā)明實施例提供了第二方面的第二種可能的實施方式,其中,所述水印添加模塊包括:
減幀單元,用于根據(jù)人眼視覺的時間特性,對添加水印中的所述視頻文件進行減幀處理,使添加水印后的視頻文件的輸出幀率達到預設幀率。
本發(fā)明實施例帶來了以下有益效果:
本發(fā)明所提供的實施例中,首先獲取并打開指定目錄下的視頻文件,然后接收用戶輸入的操作指令,其中,該操作指令包括視頻剪切指令、水印添加指令、錄音混合指令中的一種或多種。當該操作指令為視頻剪切指令時,對視頻文件進行剪切;當該操作指令為水印添加指令時,通過在軟編碼過程中啟用neon指令或者利用硬編碼添加水印至視頻文件;當該操作指令為錄音混合指令時,將錄音文件與視頻文件進行混合。本發(fā)明通過利用ffmpeg視頻編輯庫,實現(xiàn)了在移動終端對視頻文件的視頻剪切、水印添加以及錄音混合等功能,使用戶可以隨時隨地利用移動終端進行視頻編輯,解決了現(xiàn)有的移動終端視頻編輯存在的處理過于簡單、用戶使用不便等問題。
本發(fā)明的其他特征和優(yōu)點將在隨后的說明書中闡述,并且,部分地從說明書中變得顯而易見,或者通過實施本發(fā)明而了解。本發(fā)明的目的和其他優(yōu)點在說明書、權(quán)利要求書以及附圖中所特別指出的結(jié)構(gòu)來實現(xiàn)和獲得。
為使本發(fā)明的上述目的、特征和優(yōu)點能更明顯易懂,下文特舉較佳實施例,并配合所附附圖,作詳細說明如下。
附圖說明
為了更清楚地說明本發(fā)明具體實施方式或現(xiàn)有技術中的技術方案,下面將對具體實施方式或現(xiàn)有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實施方式,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實施例提供的基于ffmpeg的視頻編輯方法的流程示意圖;
圖2為本發(fā)明實施例提供的基于ffmpeg的視頻編輯方法中錄音混合過程的流程示意圖;
圖3為本發(fā)明實施例提供的基于ffmpeg的視頻編輯方法中視頻編輯具體過程的流程示意圖;
圖4為本發(fā)明實施例提供的基于ffmpeg的視頻編輯裝置的結(jié)構(gòu)示意圖。
具體實施方式
為使本發(fā)明實施例的目的、技術方案和優(yōu)點更加清楚,下面將結(jié)合附圖對本發(fā)明的技術方案進行清楚、完整地描述,顯然,所描述的實施例是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
目前現(xiàn)有的移動終端視頻編輯存在著功能過于簡單、用戶使用不便等問題,基于此,本發(fā)明實施例提供的一種基于ffmpeg的視頻編輯方法及裝置,可以緩解現(xiàn)有的移動終端視頻編輯存在著功能過于簡單、用戶使用不便等問題,滿足用戶隨時隨地編輯視頻的需求。
為便于對本實施例進行理解,首先對本發(fā)明實施例所公開的一種基于ffmpeg的視頻編輯方法進行詳細介紹。
實施例一:
圖1示出了本發(fā)明實施例提供的基于ffmpeg的視頻編輯方法的流程示意圖,如圖1所示,該方法采用二次開發(fā)ffmpeg視頻編輯庫進行視頻編輯,應用于移動終端,具體為移動終端的Android平臺,包括:
步驟S110,獲取并打開指定目錄下的視頻文件。
具體地,用戶將需要編輯的視頻文件放到指定目錄下,本發(fā)明實施例,本發(fā)明提供的實施例,通過用戶點擊操作,獲取并打開該視頻文件。
步驟S120,接收用戶輸入的操作指令。
其中,該操作指令包括視頻剪切指令、水印添加指令、錄音混合指令中的一種或多種。其中,視頻剪切指令包括剪切開始時間、剪切結(jié)束時間;水印添加指令包括文字內(nèi)容、圖片內(nèi)容、文字格式以及標簽樣式中的一種或者多種,該文字格式包括文字大小、文字字體、文字顏色中的一種或者多種,該標簽樣式包括濾鏡、輸入效果、輸出效果、及文字排列方式中的一種或者多種;錄音混合指令包括錄音插入時間。
步驟S131,當該操作指令為視頻剪切指令時,對視頻文件進行剪切。
具體地,視頻文件打開后,通過用戶拖動視頻文件的播放進度條選擇剪切開始時間與剪切結(jié)束時間,然后點擊剪切按鈕,進而生成視頻剪切指令。本發(fā)明提供的方法中,接收到上述視頻剪切指令后,根據(jù)該視頻剪切指令對上述視頻文件進行剪切,從而得到剪切后的視頻文件。
步驟S132,當操作指令為水印添加指令時,通過在軟編碼過程中啟用neon指令或者利用硬編碼添加水印至視頻文件。
具體地,用戶點擊水印添加按鈕,添加想要輸入的文字內(nèi)容或者圖片內(nèi)容,并可點擊切換文字格式以及標簽樣式,或者圖片的標簽樣式。其中,標簽樣式可以以模板的形式存儲在模板庫中。用戶也可以選擇在視頻文件的固定時間段內(nèi)添加水印,時間選擇方式與上述步驟S131中剪切開始時間與剪切結(jié)束時間的選擇方式類似,在此不再贅述。
步驟S133,當操作指令為錄音混合指令時,將錄音文件與視頻文件進行混合。
用戶點擊錄音按鈕,并選擇需要添加的錄音文件,然后點擊已經(jīng)打開的視頻文件的播放進度條已確定錄音插入時間,從而將錄音文件插入至視頻文件中,可以達到解說視頻的效果。
用戶在完成視頻編輯后,點擊保存按鈕進行保存并預覽。具體地,可以保存至本地即移動終端的存儲器中,也可以通過連接網(wǎng)絡節(jié)點分享到云端網(wǎng)絡。
進一步地,上述步驟可通過在包含Android平臺的移動終端上安裝客戶端實現(xiàn)。
本發(fā)明所提供的實施例中,首先獲取并打開指定目錄下的視頻文件,然后接收用戶輸入的操作指令,其中,該操作指令包括視頻剪切指令、水印添加指令、錄音混合指令中的一種或多種。當該操作指令為視頻剪切指令時,對視頻文件進行剪切;當該操作指令為水印添加指令時,通過在軟編碼過程中啟用neon指令或者利用硬編碼添加水印至視頻文件;當該操作指令為錄音混合指令時,將錄音文件與視頻文件進行混合。本發(fā)明實施例通過利用ffmpeg視頻編輯庫,實現(xiàn)了在移動終端對視頻文件的視頻剪切、水印添加以及錄音混合等功能,使用戶可以隨時隨地利用移動終端進行視頻編輯,解決了現(xiàn)有的移動終端視頻編輯存在的處理過于簡單、用戶使用不便等問題。
為了便于對水印添加指令的處理,上述通過在軟編碼過程中啟用neon指令或者利用硬編碼添加水印至視頻文件之前,該方法還包括:根據(jù)水印添加指令,生成水印圖片;將該水印圖片存儲至水印圖片列表中。即在后續(xù)過程中將水印以圖片的形式添加至上述視頻文件中。具體地,按照用戶輸入的文字內(nèi)容或者圖片內(nèi)容,選擇的文字格式、標簽樣式等生成水印圖片。另外,為了方便后續(xù)對水印圖片的按需存取,將水印圖片存儲到當前水印圖片列表中。
進一步地,通過在軟編碼過程中啟用neon指令或者利用硬編碼添加水印至視頻文件,包括:獲取當前水印圖片列表中的水印圖片,并通過在軟編碼過程中啟用neon指令或者利用硬編碼將水印圖片添加至視頻文件。具體地,用戶可以為視頻文件添加多個水印,也就需要生成多個水印圖片,存儲至當前水印列表中。在接收到用戶的水印添加指令后,檢測當前水印圖片列表是否為空,若不為空,則獲取當前水印圖片列表中的水印圖片,并將該水印圖片通過在軟編碼過程中啟用neon指令或者利用硬編碼添加至視頻文件,然后檢測當前水印圖片列表是否為空,反復循環(huán),直至當前水印圖片列表為空;若為空,則執(zhí)行后續(xù)用戶輸入的其他操作指令,
添加水印的過程中,涉及到對視頻畫面像素的操作,一般都會經(jīng)過視頻解碼、視頻處理、視頻編碼三個步驟,采用現(xiàn)有技術處理一個60秒、視頻幀率為30幀每秒的視頻文件時,每一幀的處理都需要經(jīng)過視頻解碼、視頻處理、視頻編碼三個步驟,處理效率低,時間長。
在本發(fā)明實施例的步驟S132,添加水印至視頻文件的過程中,視頻解碼過程為軟解碼或者硬解碼,視頻編碼過程為軟編碼或者硬編碼。具體的,上述軟編碼和軟解碼是基于CPU(Central Processing Unit,中央處理器)的處理,幾乎適配所有類型包含Android平臺的移動終端;上述硬編碼和硬解碼是基于GPU(Graphics Processing Unit,圖形處理器)的處理。傳統(tǒng)ffmpeg視頻編輯庫默認是沒有啟動neon指令功能的,neon指令是一種128位單指令、多數(shù)據(jù)擴展結(jié)構(gòu),專門針對大規(guī)模并行計算而設計,其性能使非neon指令性能的2倍左右,在本發(fā)明提供的實施例中,在視頻編輯過程中,配置configure-enable neon,使得ffmpeg視頻編輯庫啟動neon指令,進而提高水印添加過程中,軟解碼與軟編碼的處理效率,減少視頻編輯處理時間。
為了進一步增強Android版本較低的低端移動終端的處理速度,最大化利用移動終端本身硬件性能來優(yōu)化視頻編輯處理效率,在本發(fā)明的一個實施例中,在添加水印過程中,采用ffmpeg進行硬編碼和硬解碼,就是調(diào)用移動終端的GPU的專門模塊進行編碼和解碼,減少CPU的運算,進一步提高視頻編輯的處理速度。上述硬編碼和硬解碼主要步驟為:
(a)利用JNI技術實現(xiàn)c++層對android平臺的java層的硬編碼和硬解碼的系統(tǒng)調(diào)用,如mediacodec的編解碼函數(shù)API,從而可以有效利用移動端硬件的GPU來加速視頻編輯的處理。
(b)實現(xiàn)與ffmpeg的libavcodec模塊里面匹配的接口適配函數(shù),如init(),encode(),decode(),flush()等接口函數(shù),將其通過configure配置作為擴展功能來編譯成為ffmpeg視頻編輯庫中的函數(shù),從而實現(xiàn)對ffmpeg的二次開發(fā),生成新的ffmpeg視頻編輯庫。當應用該新的ffmpeg視頻編輯庫進行視頻處理時,就會調(diào)用到上述新的ffmpeg視頻編輯庫中的上述擴展功能,實現(xiàn)硬編碼和硬解碼,從而加快視頻編輯的處理。
常用的視頻編解碼方案,即mediacodec和OpenGlde組合使用,mediacodec的底層實現(xiàn)中,會在后續(xù)音視頻的混合和分離的時候產(chǎn)生多余的拷貝操作,導致處理時間變長。本發(fā)明實施例通過上述硬編碼和硬解碼過程減少了拷貝操作,減少了視頻處理時間。
考慮到,有些移動終端不支持硬編碼與硬解碼,因此在一個實施例中,上述通過在軟編碼過程中啟用neon指令或者利用硬編碼添加水印至視頻文件,包括:檢查移動終端是否支持硬解碼和硬編碼;若是,則調(diào)用移動終端的GPU對視頻文件進行硬解碼和硬編碼;若否,則調(diào)用移動終端的CPU啟用neon指令對視頻文件進行軟解碼和軟編碼。這樣,實現(xiàn)了移動終端硬解碼和硬編碼、軟解碼和軟編碼的適配策略切換,以達到最優(yōu)的視頻處理效果。
為了進一步減少視頻編輯的時間,通過在軟編碼過程中啟用neon指令或者利用硬編碼添加水印至視頻文件的過程中,還包括:根據(jù)人眼視覺的時間特性,對添加水印中的視頻文件進行減幀處理,使添加水印后的視頻文件的輸出幀率達到預設幀率。例如,錄屏默認的幀率一般大于30幀每秒,我們根據(jù)人眼視覺的時間特性,在不影響視頻質(zhì)量的情況下,采用ffmpeg命令設置預設幀率為24幀每秒,這樣ffmpeg每秒處理的幀數(shù)減少,視頻編輯的時間下降。
進一步地,在上述步驟S133中,為了便于對錄音混合指令的處理,在一個實施例中,將用戶選擇混合的一個或者多個錄音文件存儲于錄音列表中。上述將錄音文件與視頻文件進行混合,包括:獲取當前錄音列表中的錄音文件,將錄音文件與視頻文件進行混合。在接收到用戶的錄音混合指令后,檢測當前錄音列表是否為空,若不為空,則獲取當前錄音列表中的錄音文件,將錄音文件與視頻文件進行混合,然后再次檢測當前錄音列表是否為空,反復循環(huán),直至當前錄音列表為空;若為空,則執(zhí)行后續(xù)用戶輸入的其他操作指令。
具體地,圖2示出了本發(fā)明實施例提供的基于ffmpeg的視頻編輯方法中錄音混合過程的流程示意圖,如圖2所示,上述將錄音文件與視頻文件進行混合的具體過程為:
步驟S1331,將視頻文件分離為純音頻文件和純視頻文件。
步驟S1332,根據(jù)錄音插入時間,將錄音文件進行延時。
步驟S1333,將延時后的錄音文件與純音頻文件混合得到混頻文件。
步驟S1334,將混頻文件與純視頻文件混合得到錄音混合后的視頻文件。
在一個實施例中,用戶需要在視頻文件播放的30秒處,插入錄音文件,則確定錄音插入時間為30秒,將錄音文件延時30秒,然后將延時30秒后的錄音文件與純音頻文件混合,得到混頻文件。
進一步,針對上述介紹的方法,本實施例提供了具體的命令行實現(xiàn)過程如下:
(1)利用AsyncTask實現(xiàn)每個編輯步驟的串行執(zhí)行。AsyncTask是Android平臺下異步任務的API(Application Programming Interface,應用程序編程接口)。Android的線程分為兩種,有一個線程叫做UI(User Interface,用戶界面)線程或者Main Thread,除了Main Thread之外的線程都可稱為Worker Thread。Main Thread主要負責控制UI頁面的顯示、更新、交互等。因此所有在UI線程中的操作要求越短越好,只有這樣用戶才會覺得操作比較流暢。一個比較好的做法是把一些比較耗時的操作,例如網(wǎng)絡請求、數(shù)據(jù)庫操作、復雜計算等邏輯都封裝到單獨的線程,這樣就可以避免阻塞主線程。因此,在本發(fā)明實施例中,將所有的執(zhí)行編輯命令的工作都放到工作線程執(zhí)行。
(2)基于Android平臺,利用JNI調(diào)用ffmpeg視頻編輯數(shù)據(jù)庫,視頻編輯的每個操作都由ffmpeg視頻編輯數(shù)據(jù)庫實現(xiàn)。具體的編輯步驟可以用以下命令行來描述:
A)剪切視頻命令:"ffmpeg-i"+inputPath+"-ss"+start+"-t"+(stop-start)+"-vcodec copy-acodec copy-y"+cachePath
ffmpeg:初始化ffmpeg視頻編輯庫
inputPath:輸入視頻路徑start:剪切開始時間
(stop-start):持續(xù)時間
-vcodec copy-acodec copy:拷貝音視頻數(shù)據(jù)
Cache:輸出視頻路徑
B)添加水印命令:"ffmpeg-i"+inputPath+"-i"+imagePath+"-filter_complex"+"overlay="+x+":"+y+":enable=\'between(t,"+start+","+stop+")\'"
inputPath:輸入視頻路徑imagePath:輸入的水印圖片的路徑
filter_complex:濾鏡overlay=x:y:輸入水印圖片的位置
":enable=\'between(t,"+start+","+stop+“)\’":同時添加多個水印
C)錄音混合命令,分為以下4條命令:
command1."ffmpeg-i"+originalPath+"-map 0:0-c:v copy-an"+videoPath+"-map 0:1-c:a copy-vn-y"+audioPath
從原始的視頻文件中提取出純音頻文件和純視頻文件。
command2."ffmpeg-i"+voicePath+"-strict experimental-c:a aac-b:a32k-filter_complex adelay="+(audioList.get(i).startTime*1000)+"-y"+voiceDelay
處理錄音文件使其延時n秒。
command3."ffmpeg-i"+audioPath+"-i"+voiceDelay+"-strict experimental-c:aaac-b:a 32k-filter_complex
amix=inputs=2:duration=first:dropout_transition=0-y"+audioOutput
把延時后的錄音文件和純音頻文件混合在一起,生成混頻文件。
command4."ffmpeg-i"+videoPath+"-i"+audioOutput+"-c:v copy-bsf:a aac_adtstoasc-c:a copy-y"+cachePath
把純視頻文件和混頻文件混合在一起。
進一步地,圖3示出了本發(fā)明實施例提供的基于ffmpeg的視頻編輯方法中視頻編輯具體過程的流程示意圖。該流程示意圖針對的用戶操作順序為剪切視頻、添加水印、混合錄音,如圖3所示,該具體過程包括:
步驟S201:獲取視頻文件。即獲取用戶選擇的指定目錄下的需要編輯的視頻文件。
步驟S202:接收視頻剪切指令。
具體地,視頻文件打開后,通過用戶拖動視頻文件的播放進度條選擇剪切開始時間與剪切結(jié)束時間,然后點擊剪切按鈕,進而生成視頻剪切指令。
步驟S203:對視頻文件進行剪切,從而獲得剪切后的第一視頻文件。
接收到上述視頻剪切指令后,根據(jù)該視頻剪切指令對上述視頻文件進行剪切,從而得到剪切后的第一視頻文件。
步驟S204:接收水印添加指令。
用戶點擊水印添加按鈕,添加想要輸入的文字內(nèi)容或者圖片內(nèi)容,并可點擊切換文字格式以及標簽樣式,或者圖片的標簽樣式。其中,標簽樣式可以以模板的形式存儲在模板庫中。
步驟S205:檢測當前水印圖片列表是否為空。
在接收到用戶的水印添加指令后,檢測當前水印圖片列表是否為空,若不為空,則執(zhí)行步驟S206,若為空,則執(zhí)行步驟S207。
步驟S206:獲取當前水印圖片列表中的水印圖片,并將該水印圖片添加至第一視頻文件。完成步驟S206后,執(zhí)行步驟S205。
利用步驟S205與步驟S206,將當前水印圖片列表中的水印圖片依次添加至第一視頻文件中,直至當前水印圖片列表為空,最后生成第二視頻文件。
步驟S207:接收錄音混合指令。
用戶的點擊錄音按鈕,并選擇需要添加的錄音文件,然后點擊已經(jīng)打開的視頻文件的播放進度條已確定錄音插入時間,從而將錄音文件插入至視頻文件中,可以達到解說視頻的效果。
步驟S208:檢測當前錄音列表是否為空。
在接收到錄音混合指令后,檢測當前錄音列表是否為空,若不為空,則執(zhí)行步驟S2091和步驟S2092,若為空,則執(zhí)行步驟S213。
步驟S2091:將第二視頻文件進行分離,從而生成純音頻文件和純視頻文件。
步驟S2092:從當前錄音列表中獲取錄音文件,并將該錄音文件進行延時。
其中,步驟S2091和S2092可以無先后順序。
步驟S210:將延時后的錄音文件與純音頻文件進行混合,得到混頻文件。
步驟S211:將混頻文件與純視頻文件進行混合。完成步驟S211后,執(zhí)行步驟S208。
利用步驟S208至步驟S211,將當前錄音列表中的所有錄音文件與第二視頻文件混合,直至當前錄音列表為空,最后生成第三視頻文件。
步驟S212:將第三視頻文件作為最終視頻文件輸出。
輸出最終視頻文件后,點擊保存按鈕進行保存并預覽。具體地,可以保存至本地即移動終端的存儲器中,也可以通過連接網(wǎng)絡節(jié)點分享到云端網(wǎng)絡。
值得強調(diào)的是,在本發(fā)明提供的方法中,視頻剪切指令、水印添加指令、錄音混合指令沒有先后順序,按照用戶輸入的操作順序進行視頻編輯步驟的執(zhí)行。當然可以提示用戶如何進行操作以及操作順序。
另外,在一個實施例中,當用戶輸入了水印添加操作與錄音混合操作時,可以將先將視頻文件分離為純視頻文件和純音頻文件,在不影響視頻質(zhì)量的情況下減小純視頻文件的幀率,然后將水印添加至減小幀率的純視頻文件中得到新純視頻文件,將純音頻文件與錄音文件混合得到新音頻文件,最后將新純視頻文件與新音頻文件混合為最終的視頻文件輸出。這樣,可以達到加快最終的視頻文件輸出的目的。
實施例二:
圖4示出了本發(fā)明實施例提供的基于ffmpeg的視頻編輯裝置的結(jié)構(gòu)示意圖。如圖4所示,該裝置包括:
視頻獲取模塊50,用于獲取并打開指定目錄下的視頻文件;
操作接收模塊60,用于接收用戶輸入的操作指令,其中,操作指令包括視頻剪切指令、水印添加指令、錄音混合指令中的一種或者多種;
視頻剪切模塊71,用于當操作指令為視頻剪切指令時,對視頻文件進行剪切;
水印添加模塊72,用于當操作指令為水印添加指令時,通過在軟編碼過程中啟用neon指令或者利用硬編碼添加水印至視頻文件;
錄音混合模塊73,用于當操作指令為錄音混合指令時,將錄音文件與視頻文件進行混合。
本發(fā)明所提供的實施例中,首先利用視頻獲取模塊50,獲取并打開指定目錄下的視頻文件,然后通過操作接收模塊60接收用戶輸入的操作指令,其中,該操作指令包括視頻剪切指令、水印添加指令、錄音混合指令中的一種或多種。視頻剪切模塊71用于當該操作指令為視頻剪切指令時,對視頻文件進行剪切;水印添加模塊72當該操作指令為水印添加指令時,通過在軟編碼過程中啟用neon指令或者利用硬編碼添加水印至視頻文件;錄音混合模塊73當該操作指令為錄音混合指令時,將錄音文件與視頻文件進行混合。本發(fā)明實施例通過利用ffmpeg視頻編輯庫,實現(xiàn)了在移動終端對視頻文件的視頻剪切、水印添加以及錄音混合等功能,使用戶可以隨時隨地利用移動終端進行視頻編輯,解決了現(xiàn)有的移動終端視頻編輯存在的處理過于簡單、用戶使用不便等問題。
進一步地,上述水印添加模塊72包括:
檢查單元,用于檢查移動終端是否支持硬解碼和硬編碼;
GPU調(diào)用單元,用于若檢查移動終端支持硬解碼和硬編碼,則調(diào)用移動終端的GPU對視頻文件進行硬解碼和硬編碼;
CPU調(diào)用單元,用于若檢查移動終端不支持硬解碼和硬編碼,則調(diào)用移動終端的CPU啟用neon指令對視頻文件進行軟解碼和軟編碼。
進一步地,上述水印添加模塊72包括:
減幀單元,用于根據(jù)人眼視覺的時間特性,對添加水印中的視頻文件進行減幀處理,使添加水印后的視頻文件的輸出幀率達到預設幀率。
進一步地,上述水印添加模塊72包括:
水印獲取與添加單元,用于獲取當前水印圖片列表中的水印圖片,并通過在軟編碼過程中啟用neon指令或者利用硬編碼將水印圖片添加至視頻文件。
進一步地,上述水印添加指令包括文字內(nèi)容、圖片內(nèi)容、文字格式以及標簽樣式中的一種或者多種;上述水印添加模塊72包括:
水印生成單元,用于根據(jù)水印添加指令,生成水印圖片;
水印存儲單元,用于將水印圖片存儲至水印圖片列表中。
進一步地,上述錄音混合模塊包括:
錄音獲取并混合單元,用于獲取當前錄音列表中的錄音文件,將錄音文件與視頻文件進行混合。
進一步地,上述錄音混合指令包括錄音插入時間;上述錄音混合模塊73包括:
分離單元,用于將視頻文件分離為純音頻文件和純視頻文件;
延時單元,用于根據(jù)錄音插入時間,將錄音文件進行延時;
音頻混合單元,用于將延時后的錄音文件與純音頻文件混合得到混頻文件;
音視頻混合單元,用于將混頻文件與純視頻文件混合得到錄音混合后的視頻文件。
本發(fā)明實施例提供的基于ffmpeg的視頻編輯裝置,與上述實施例提供的基于ffmpeg的視頻編輯方法具有相同的技術特征,所以也能解決相同的技術問題,達到相同的技術效果。
本發(fā)明實施例所提供的基于ffmpeg的視頻編輯方法及裝置的計算機程序產(chǎn)品,包括存儲了程序代碼的計算機可讀存儲介質(zhì),所述程序代碼包括的指令可用于執(zhí)行前面方法實施例中所述的方法,具體實現(xiàn)可參見方法實施例,在此不再贅述。
所屬領域的技術人員可以清楚地了解到,為描述的方便和簡潔,上述描述的基于ffmpeg的視頻編輯裝置的具體工作過程,可以參考前述方法實施例中的對應過程,在此不再贅述。
所述功能如果以軟件功能單元的形式實現(xiàn)并作為獨立的產(chǎn)品銷售或使用時,可以存儲在一個計算機可讀取存儲介質(zhì)中?;谶@樣的理解,本發(fā)明的技術方案本質(zhì)上或者說對現(xiàn)有技術做出貢獻的部分或者該技術方案的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在一個存儲介質(zhì)中,包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網(wǎng)絡設備等)執(zhí)行本發(fā)明各個實施例所述方法的全部或部分步驟。而前述的存儲介質(zhì)包括:U盤、移動硬盤、只讀存儲器(ROM,Read-Only Memory)、隨機存取存儲器(RAM,Random Access Memory)、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
此外,術語“第一”、“第二”、“第三”僅用于描述目的,而不能理解為指示或暗示相對重要性。
最后應說明的是:以上所述實施例,僅為本發(fā)明的具體實施方式,用以說明本發(fā)明的技術方案,而非對其限制,本發(fā)明的保護范圍并不局限于此,盡管參照前述實施例對本發(fā)明進行了詳細的說明,本領域的普通技術人員應當理解:任何熟悉本技術領域的技術人員在本發(fā)明揭露的技術范圍內(nèi),其依然可以對前述實施例所記載的技術方案進行修改或可輕易想到變化,或者對其中部分技術特征進行等同替換;而這些修改、變化或者替換,并不使相應技術方案的本質(zhì)脫離本發(fā)明實施例技術方案的精神和范圍,都應涵蓋在本發(fā)明的保護范圍之內(nèi)。因此,本發(fā)明的保護范圍應所述以權(quán)利要求的保護范圍為準。