最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

寫一個(gè)shell腳本實(shí)現(xiàn)視頻處理

 更新時(shí)間:2022年07月08日 10:26:01   作者:大河1989  
Linux和Unix都擁有很多能夠處理圖像和視頻文件的應(yīng)用程序和工具,下面這篇文章主要給大家介紹了關(guān)于如何寫一個(gè)shell腳本來實(shí)現(xiàn)視頻處理的相關(guān)資料,需要的朋友可以參考下

需求

去年同事準(zhǔn)備做個(gè)公司內(nèi)部的大講堂網(wǎng)站,將一些內(nèi)部培訓(xùn)的視頻匯總,提供給公司同事觀看,網(wǎng)站搭建相對來說比較簡單,直接用Ant.design Pro+Eggjs實(shí)現(xiàn)。但是為了體驗(yàn)更好一些,我們準(zhǔn)備將視頻,根據(jù)內(nèi)容進(jìn)行切割,方便用戶快速找到自己感興趣的內(nèi)容,同時(shí)轉(zhuǎn)成m3u8上傳cdn,優(yōu)化視頻播放和緩沖的速度。

這就涉及到了視頻切割和格式轉(zhuǎn)換,傳統(tǒng)的做法是通過視頻剪輯軟件來處理即可,但是作為開發(fā),還是想用一些自動(dòng)化的方法來完成這個(gè)工作,畢竟時(shí)間最寶貴了??,因此就想到了直接使用shell腳本一鍵完成切割、轉(zhuǎn)換和上傳。

第一次寫shell腳本,也是邊學(xué)邊寫,所以肯定還有很多可以優(yōu)化的地方,和大家一起學(xué)習(xí)啊...??

視頻處理 ffmpeg

想要用shell處理視頻,首先要有處理視頻的命令行工具,這個(gè)不難找,百度一下就發(fā)現(xiàn)了ffmpeg,一個(gè)神級視頻處理庫。

FFmpeg 是視頻處理最常用的開源軟件。FFmpeg 本身是一個(gè)龐大的項(xiàng)目,包含許多組件和庫文件,最常用的是它的命令行工具。本文介紹 FFmpeg 命令行如何處理視頻,比桌面視頻處理軟件更簡潔高效。[借用一下阮一峰老師對ffmpeg的介紹]

關(guān)于ffmpeg以及視頻編解碼的介紹,可以去阮老師這邊看。

我們的需求是裁剪和格式轉(zhuǎn)換,這里也針對性介紹一下這兩個(gè)場景的命令。

裁剪

# 起始時(shí)間+時(shí)長
ffmpeg -ss [start] -i [input] -t [duration] -c copy [output]
# 起始時(shí)間+結(jié)束時(shí)間
ffmpeg -ss [start] -i [input] -to [end] -c copy [output]
  • -ss:裁剪的開始時(shí)間
  • -i:輸入文件
  • -to:裁剪的截止時(shí)間
  • -t:時(shí)間長度
  • -c copy:直接復(fù)制,不經(jīng)過重新編碼

格式轉(zhuǎn)換

ffmpeg -i demo.mp4 -profile:v baseline -level 3.0 
-start_number 0 -hls_time 10 -hls_list_size 0 -f hls output.m3u8
  • -profile:v baseline:輸出編碼指定具體的H.264標(biāo)準(zhǔn)。
  • -level:--
  • -start_number:--
  • -hls_time:每個(gè)切片的時(shí)間
  • -hls_list_size:設(shè)置播放列表保存的最多條目,設(shè)置為0會(huì)保存有所片信息
  • -f:指定視頻容器

配置參數(shù)

sed命令

為了后面方便處理不同的視頻,我希望將一些配置參數(shù)提取出來,配置文件config如下:

File=source.mp4 # 待處理文件地址
Cut_config=videos.csv # 時(shí)間戳數(shù)據(jù)
Output_path=./output/ # 裁剪、轉(zhuǎn)格式后視頻文件輸出路徑
Qiniu_prefix=videos/source/ # 上傳七牛的路徑

讀取腳本如下

file=`sed '/^File=/!d;s/.*=//' config`  
cutConfig=`sed '/^Cut_config=/!d;s/.*=//' config`  
outputPath=`sed '/^Output_path=/!d;s/.*=//' config`  
qiniuPrefix=`sed '/^Qiniu_prefix=/!d;s/.*=//' config` 

這里用到sed命令,sed 可依照腳本的指令來處理、編輯文本文件。在這里,我們主要是讀取配置文件中的鍵值對類型數(shù)據(jù)。

sed '/^File=/!d;s/.*=//' config: 找到File=開頭的行,然后!d刪除這一行之外的行,將==之前的字符替換為空字符串,然后返回的就是=后面的字符串。

讀取時(shí)間切片csv

視頻切片需要知道起止時(shí)間,以及切割完之后視頻的名字,這個(gè)數(shù)據(jù)組織方式比較適合csv,所以我們放到了csv中來管理,每一行代表一個(gè)視頻片段。

00:00:45,00:12:10,car-mainmaterial-from-commercial-vehicle
00:12:05,00:15:25,car-mainmaterial-from-nameplate
00:15:25,00:29:00,car-mainmaterial-from-certificate-registry
00:29:00,00:33:00,car-mainmaterial-from-driving-license
00:33:00,00:36:40,car-mainmaterial-from-cargo-import-permission
00:36:40,00:48:33,car-mainmaterial-from-practice-case

接下來就是解析csv文件。

# 變量聲明
count=0 # 計(jì)數(shù)
videos=() # 視頻列表

# 遍歷
for line in $(cat $cutConfig)
do 
    OLD_IFS="$IFS"
    IFS="," # 用,切割字符串
    arr=($line) # 切割完,得到三個(gè)字符串的數(shù)組
    IFS="$OLD_IFS" # 恢復(fù)IFS
    videos[$count]="$outputPath${arr[2]}" # 存儲(chǔ)裁剪后的視頻片段文件名
    count=$(($count+1))
    # ffmpeg裁剪文件
    ffmpeg -ss ${arr[0]} -t ${arr[1]} -i $file -vcodec copy -acodec copy $outputPath${arr[2]}.mp4 -loglevel quiet 
done

轉(zhuǎn)換視頻格式

# 轉(zhuǎn)換視頻格式
for video in ${videos[@]}
do
    ffmpeg -i $video.mp4 -profile:v baseline -level 3.0  -start_number 0 -hls_time 10 -hls_list_size 0 -f hls $video.m3u8
done

上傳七牛

# 上傳視頻
qshell qupload2 --src-dir=$outputPath --bucket=assets --key-prefix=$qiniuPrefix --skip-suffixes=mp4 --overwrite=true --rescan-local=true

end

獲取視頻的時(shí)間切換,簡單用video標(biāo)簽寫了一個(gè)界面,通過拖拽快速或去起止時(shí)間,然后導(dǎo)出一個(gè)制定格式的CSV文件。

 

到此這篇關(guān)于shell腳本實(shí)現(xiàn)視頻處理的文章就介紹到這了,更多相關(guān)shell腳本視頻處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Linux shell實(shí)現(xiàn)壓縮多個(gè)文件代碼實(shí)例

    Linux shell實(shí)現(xiàn)壓縮多個(gè)文件代碼實(shí)例

    這篇文章主要介紹了Linux shell實(shí)現(xiàn)壓縮多個(gè)文件代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Linux啟動(dòng)與自啟動(dòng)的實(shí)例詳解

    Linux啟動(dòng)與自啟動(dòng)的實(shí)例詳解

    這篇文章主要介紹了Linux啟動(dòng)與自啟動(dòng)的實(shí)例詳解的相關(guān)資料,希望通過本文大家能理解掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-09-09
  • 用來檢測輸入的選項(xiàng)$1是否在PATH中的shell腳本

    用來檢測輸入的選項(xiàng)$1是否在PATH中的shell腳本

    今天無意中發(fā)現(xiàn)一本挺有意思的shell編程的書,是e文的,內(nèi)容是101個(gè)shell案例,堅(jiān)持明天看一個(gè),寫點(diǎn)心得
    2016-08-08
  • Linux?grep?-q用法示例詳解

    Linux?grep?-q用法示例詳解

    grep指令用于查找內(nèi)容包含指定的范本樣式的文件,如果發(fā)現(xiàn)某文件的內(nèi)容符合所指定的范本樣式,預(yù)設(shè)grep指令會(huì)把含有范本樣式的那一列顯示出來,這篇文章主要介紹了Linux?grep?-q用法示例詳解,需要的朋友可以參考下
    2023-02-02
  • Linux?signal()函數(shù)的使用學(xué)習(xí)

    Linux?signal()函數(shù)的使用學(xué)習(xí)

    這篇文章主要為大家介紹了Linux?signal()函數(shù)的使用學(xué)習(xí)及示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • Shell[[]]檢測某個(gè)條件是否成立

    Shell[[]]檢測某個(gè)條件是否成立

    本文主要介紹了Shell[[]]檢測某個(gè)條件是否成立,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • Linux 中的Logwatch命令

    Linux 中的Logwatch命令

    在Linux系統(tǒng)操作中,logwatch能夠?qū)ο到y(tǒng)log報(bào)告進(jìn)行分析,用于Linux日志的處理,下面小編給大家詳細(xì)介紹下Linux 中的Logwatch命令,感興趣的朋友一起看看吧
    2017-09-09
  • Linux find命令及實(shí)用示例詳解

    Linux find命令及實(shí)用示例詳解

    Linux系統(tǒng)中的find命令是用于搜索文件和執(zhí)行操作的強(qiáng)大工具,通過指定搜索路徑和條件,用戶可以查找特定文件名、類型、權(quán)限等,并執(zhí)行如打印路徑、刪除文件等操作,文章通過多個(gè)示例,展示了find命令在實(shí)際應(yīng)用中的用法,感興趣的朋友一起看看吧
    2024-10-10
  • bash腳本截取字符串的兩種方法

    bash腳本截取字符串的兩種方法

    本文主要介紹了bash腳本截取字符串的兩種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Bash的For循環(huán)(根據(jù)每次遞增的數(shù))

    Bash的For循環(huán)(根據(jù)每次遞增的數(shù))

    需要執(zhí)行一個(gè)命令,每次消除500個(gè)id,通常寫的是遞增1的,記一筆,怕忘了
    2013-08-08

最新評論

临猗县| 九寨沟县| 神池县| 右玉县| 高台县| 方城县| 南陵县| 循化| 南靖县| 平谷区| 兴文县| 安塞县| 高淳县| 水城县| 织金县| 塘沽区| 隆回县| 泾源县| 万载县| 启东市| 固阳县| 肥东县| 南川市| 漠河县| 胶州市| 洞口县| 察雅县| 伊宁县| 高尔夫| 页游| 金门县| 承德县| 本溪市| 顺平县| 外汇| 沧州市| 重庆市| 咸丰县| 万载县| 祁连县| 芦山县|