如何用Serverless實現(xiàn)視頻剪輯批量化、自動化與定制化?

來源: 騰訊云云函數(shù)
作者:Woody
時間:2022-03-09
11367
大家平常接觸到的視頻剪輯通常都是使用Premiere,AE等這類專業(yè)工具來完成視頻剪輯。他們能完成一些復(fù)雜的效果,比如做宣傳視頻,廣告視頻等。

前言

640.jpg

開始講之前先解決大家看到這個標(biāo)題時心里的3個疑惑:

1.視頻剪輯不是用Adobe的軟件就可以做了嗎?

2.為什么要用Serverless?

3.如何寫代碼做視頻剪輯?

哪些視頻剪輯場景是Adobe等軟件無法完成的

大家平常接觸到的視頻剪輯通常都是使用Premiere,AE等這類專業(yè)工具來完成視頻剪輯。他們能完成一些復(fù)雜的效果,比如做宣傳視頻,廣告視頻等。

但有些企業(yè)在某些業(yè)務(wù)場景下是期望能批量且自動化的完成視頻剪輯。

比如以下幾種場景:

1.假設(shè)學(xué)校期望能在學(xué)生上完網(wǎng)課之后馬上呈現(xiàn)所有學(xué)生學(xué)習(xí)過程中的精彩視頻,配上學(xué)校的logo和宣傳語等,讓學(xué)生一鍵分享自己的成果。假設(shè)有1萬個學(xué)生,需要為每個學(xué)生制作獨一無二的視頻,所以需要批量且自動化的完成1萬個不同的視頻剪輯。

2.某次營銷活動中,需要為不同的用戶生成不同的頭像視頻來吸引用戶參與。每個用戶的頭像都是獨一無二的,生成的視頻也是獨一無二的,用戶可能成千上萬,因此自動化完成是必須的條件。

3.網(wǎng)紅運營公司期望能給所有主播生成統(tǒng)一的營業(yè)視頻??赡苡?00個主播,專門找一個人剪輯100個視頻好像勉強能接受,但如果每周都要剪一次不同的視頻呢?所以自動化,批量和可定制化的剪輯就成了主要需求。

以上的場景中有三個特點:

1.批量

2.自動化

3.可定制

對于符合以上特點的場景,是傳統(tǒng)的視頻剪輯工具或者模版化的視頻處理軟件無法輕松完成的。

為什么推薦用Serverless

因為視頻剪輯這樣的業(yè)務(wù)有幾個特點:

·使用時段集中。

·計算量大。

單獨購買高規(guī)格的服務(wù)器利用率很低,買便宜的服務(wù)器計算能力又跟不上。

因此Serverless按量計費的特點,以及高性能的計算能力,完美匹配了這樣的需求場景。

既能達(dá)到100%的利用率,又能按量使用它的高性能計算能力。

同時,騰訊云Serverless云函數(shù)擁有多變的可編程環(huán)境,可以使用任意熟悉的編程語言,靈活性很高。

如何通過寫代碼做視頻剪輯

本文章提到的所有視頻剪輯的功能,都是用FFmpeg這個工具,先給大家講講什么是FFmpeg。

FFmpeg(http://ffmpeg.org/)是一個用來做視頻處理的開源工具,它有非常強大的功能,它支持視頻剪輯、視頻轉(zhuǎn)碼、視頻編輯、音頻處理、添加文字、視頻拼接、拉流推流直播等功能。

我們通過不同的FFmpeg命令就可以編程完成不同的視頻剪輯功能,組合編排起來,就可以應(yīng)對各種批量自動化的場景了。

視頻剪輯批量化、自動化與定制化實踐

常見的視頻剪輯場景主要包含以下幾種:

1.視頻轉(zhuǎn)碼

2.視頻裁剪

3.視頻加文字

4.視頻加圖片

5.視頻拼接

6.視頻加音頻

7.視頻轉(zhuǎn)場

8.視頻特效

9.視頻加速慢速播放

接下來給大家展示一些具體的FFmpeg命令例子,如果你在本地安裝了FFmpeg,也可以在本地執(zhí)行這些命令。關(guān)于怎么安裝FFmpeg,可以去看官網(wǎng)的教程(http://ffmpeg.org/)。

// 將MOV視頻轉(zhuǎn)成mp4視頻

ffmpeg -i input.mov output.mp4


// 將原視頻的幀率修改為24

ffmpeg -i input.mp4 -r 24 -an output.mp4


// 將mp4視頻轉(zhuǎn)為可用于直播的視頻流

ffmpeg -i input.mp4 -codec: copy -bsf:v h264_mp4toannexb -start_number 0 -hls_time 10 -hls_list_size 0 -f hls output.m3u8


// 將視頻分別變?yōu)?80x360,并把碼率改400

ffmpeg -i input.mp4 -vf scale=480:360,pad=480:360:240:240:black -c:v libx264 -x264-params nal-hrd=cbr:force-cfr=1 -b:v 400000 -bufsize 400000 -minrate 400000 -maxrate 400000 output.mp4


// 給視頻添加文字,比如字幕、標(biāo)題等。

// `fontfile`是要使用的字體的路徑,`text`是你要添加的文字,

// `fontcolor`是文字的顏色,`fontsize`是文字大小,`box`是給文字添加底框。

// `box=1`表示enable,`0`表示disable,`boxcolor`是底框的顏色,black@0.5表示黑色透明度是50%,`boxborderw`是底框距文字的寬度

// `x`和`y`是文字的位置,`x`和`y`不只支持?jǐn)?shù)字,還支持各種表達(dá)式,具體可以去官網(wǎng)查看

ffmpeg -i input.mp4 -vf "drawtext=fontfile=/path/to/font.ttf:text='你的文字':fontcolor=white:fontsize=24:box=1:boxcolor=black@0.5:boxborderw=5:x=(w-text_w)/2:y=(h-text_h)/2" -codec:a copy output.mp4


// 給視頻添加圖片,比如添加logo、頭像、表情等。filter_complex表示復(fù)合的濾鏡,overlay表示表示圖片的x和y,enable表示圖片出現(xiàn)的時間段,從0-20秒

ffmpeg -i input.mp4 -i avatar.JPG -filter_complex "[0:v][1:v] overlay=25:25:enable='between(t,0,20)'" -pix_fmt yuv420p -c:a copy output.mp4


// 視頻拼接,list.txt里面按順序放所有要拼接的視頻的文件路徑,如下。

// 注意,如果視頻的分辨率不一致會導(dǎo)致拼接失敗。

ffmpeg -f concat -safe 0 -i list.txt -c copy -movflags +faststart output.mp4

// list.txt的格式如下

file 'xx.mp4'

file 'yy.mp4'


// 視頻加音頻,stream_loop表示是否循環(huán)音頻內(nèi)容,-1表示無限循環(huán),0表示不循環(huán)。shortest表示最短的MP3輸入流結(jié)束時完成編碼。

ffmpeg -y -i input.mp4 -stream_loop -1 -i audio.mp3 -map 0:v -map 1:a -c:v copy -shortest output.mp4

FFmpeg能做的事情非常多,這里就不一一講解了。更多的玩法可以在FFmpeg官網(wǎng)上探索。

對于音頻的編輯也是同樣的道理,F(xiàn)Fmpeg也支持單獨對音頻進(jìn)行編輯。

運行FFmpeg命令

因為Python運行這些命令比較便捷,所以我們可以使用python來運行所有的FFmpeg命令。

同時,python在騰訊云Serverless云函數(shù)上運行性能也比較好,部署也方便。

通過Python來使用FFmpeg的視頻剪輯代碼在文章最后有開源鏈接,并且,在官網(wǎng)上也有模版可以直接使用,幾乎覆蓋了常見的音視頻剪輯等操作。

這里就展示一個簡單的調(diào)用代碼示例。

child = subprocess.run('./ffmpeg -i input.mov output.mp4',

                               stdout=subprocess.PIPE,

                               stderr=subprocess.PIPE, close_fds=True, shell=True)

if child.returncode == 0:

  print("success:", child)

else:

  print("error:", child)

raise KeyError("處理視頻失敗, 錯誤: ", child)

在Serverless部署

上面提到的常見的視頻剪輯場景我已經(jīng)實現(xiàn)并開源了,下載代碼直接部署到Serverless就可以使用了,下載地址:

https://github.com/woodyyan/ffmpeg-composition

https://github.com/woodyyan/ffmpeg-splice

這里分為了兩個函數(shù),一個負(fù)責(zé)處理單個視頻,一個負(fù)責(zé)把多個視頻拼接成一個視頻并配上背景音樂。

目前支持以下功能:

1.在視頻中添加文字

2.視頻分辨率轉(zhuǎn)換

3.在視頻中添加圖片

4.視頻拼接

5.添加背景音樂

源碼里展示的只是常見的一些視頻剪輯場景,大家可以根據(jù)自己的業(yè)務(wù)需要,編寫自己的視頻剪輯邏輯。

方式一:Github Action自動部署

1.Fork倉庫。

2.在倉庫的Settings-Secrets-Actions中添加TENCENT_SECRET_ID和TENCENT_SECRET_KEY兩個密鑰。ID和KEY可以在騰訊云的訪問控制里面獲取。

3.添加之后,在Action中就可以發(fā)起部署了。每次修改代碼推送后,也會自動觸發(fā)Action部署。

4.如果需要有一些自定義的配置,請修改serverless.yml。

5.云函數(shù)最終會自動部署到TENCENT_SECRET_ID所在的賬號下。

方式二:云函數(shù)控制臺手動部署

1.下載代碼。

2.在根目錄把所有文件和文件夾一起打包成一個ZIP文件。

3.去云函數(shù)控制臺(https://console.cloud.tencent.com/scf/list),新建一個函數(shù)。

4.選擇從頭開始:

a.選擇python語言。

b.上傳ZIP文件。

c.函數(shù)內(nèi)存建議選擇較大的內(nèi)存。

d.開啟異步執(zhí)行。

e.執(zhí)行超時時間根據(jù)視頻大小建議設(shè)置長一點,比如30秒以上。

f.配置觸發(fā)器,選擇API網(wǎng)關(guān)觸發(fā)器,關(guān)閉集成響應(yīng)。

5.完成部署后,就可以通過API網(wǎng)關(guān)的URL開始調(diào)用了。

真實案例回顧

一個做網(wǎng)課的學(xué)校,需要每次在學(xué)生上完網(wǎng)課之后把上網(wǎng)課的錄像制作成一段30秒的視頻,作為學(xué)生的學(xué)習(xí)成果。

此案例有幾個關(guān)鍵的信息點:

1.通常一堂課有200個學(xué)生,需要同時制作200個視頻。

2.需要把1小時的上課視頻剪輯成30秒。

3.由于每個學(xué)生的上課屏幕有所不同,因此錄制的視頻都是不同的。

4.最終的成果視頻還需要加上學(xué)生的名字和頭像。

5.學(xué)生結(jié)束上課的時間很集中,因此制作視頻時會有短時高并發(fā)。

6.每次上完課的時候才會需要制作視頻,時段比較固定且集中。

綜合上述特點,用騰訊云Serverless云函數(shù)來做這樣的視頻剪輯帶來了多個好處:

1.解決了200個并發(fā)的問題,不需要自己搭建過多的服務(wù)器。

2.解決了只在發(fā)生時段使用的問題,其他時段都沒有成本產(chǎn)生。

3.解決了需要較強計算能力快速制作視頻的問題。

下面是這個案例的參考架構(gòu)圖:

640.png

總結(jié)

通過編排、組合、復(fù)用上面列舉的各種音視頻剪輯的場景,就能制作出各種各樣想要的效果。

然后把視頻剪輯中用來控制各種效果的參數(shù),變成調(diào)用服務(wù)時傳入的參數(shù),就能實現(xiàn)各種效果的定制化了。

最后再總結(jié)一下通過這種寫代碼的方式完成視頻剪輯的使用場景:

1.解決通過修改個別參數(shù)來批量制作視頻的場景。

2.解決通過用戶觸發(fā)來自動化制作視頻的場景。

3.解決不同場景需要不同定制化的制作視頻的場景。

同時,利用騰訊云Serverless云函數(shù)來完成視頻剪輯,同樣也解決了以下幾個問題:

1.因為通常視頻剪輯不是全天運行,利用騰訊云Serverless云函數(shù)按量付費的特性能優(yōu)化成本。

2.因為視頻剪輯通常是重計算場景,利用騰訊云Serverless云函數(shù)可選的高規(guī)格配置來應(yīng)對這種重計算場景。

3.在批量制作視頻的場景中通常會存在高并發(fā),利用騰訊云Serverless云函數(shù)自動彈性伸縮的特性能輕松應(yīng)對高并發(fā)。

立即登錄,閱讀全文
版權(quán)說明:
本文內(nèi)容來自于騰訊云云函數(shù),本站不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。文章內(nèi)容系作者個人觀點,不代表快出海對觀點贊同或支持。如有侵權(quán),請聯(lián)系管理員(zzx@kchuhai.com)刪除!
優(yōu)質(zhì)服務(wù)商推薦
更多
掃碼登錄
打開掃一掃, 關(guān)注公眾號后即可登錄/注冊
加載中
二維碼已失效 請重試
刷新
賬號登錄/注冊
個人VIP
小程序
快出海小程序
公眾號
快出海公眾號
商務(wù)合作
商務(wù)合作
投稿采訪
投稿采訪
出海管家
出海管家