欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

寫一個shell腳本實現視頻處理

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

需求

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

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

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

視頻處理 ffmpeg

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

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

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

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

裁剪

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

格式轉換

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標準。
  • -level:--
  • -start_number:--
  • -hls_time:每個切片的時間
  • -hls_list_size:設置播放列表保存的最多條目,設置為0會保存有所片信息
  • -f:指定視頻容器

配置參數

sed命令

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

File=source.mp4 # 待處理文件地址
Cut_config=videos.csv # 時間戳數據
Output_path=./output/ # 裁剪、轉格式后視頻文件輸出路徑
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 可依照腳本的指令來處理、編輯文本文件。在這里,我們主要是讀取配置文件中的鍵值對類型數據。

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

讀取時間切片csv

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

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 # 計數
videos=() # 視頻列表

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

轉換視頻格式

# 轉換視頻格式
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

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

 

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

相關文章

  • Linux 中的Setfacl命令

    Linux 中的Setfacl命令

    setfacl命令可以用來細分linux下的文件權限。接下來通過本文給大家分享Linux 中的Setfacl命令,感興趣的朋友一起看看吧
    2017-09-09
  • nginx日志切割腳本分享

    nginx日志切割腳本分享

    nginx日志太大怎么辦,只有分割一下了,這篇文章就介紹了一下nginx日志切割腳本,需要的朋友可以參考下
    2014-03-03
  • Linux命令學習之用戶切換su,sudo命令詳解

    Linux命令學習之用戶切換su,sudo命令詳解

    在操作過程中需要使用特定的用戶進行特定的操作,多數情況下是因為權限,比如要修改一個文件,只有root用戶有權限修改,那么就要切換到root用戶下進行操作,本文給大家講解Linux命令學習之用戶切換su,sudo命令,感興趣的朋友跟隨小編一起看看吧
    2023-02-02
  • 查看linux中某個端口(port)是否被占用的方法

    查看linux中某個端口(port)是否被占用的方法

    下面小編就為大家?guī)硪黄榭磍inux中某個端口(port)是否被占用的方法。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • linux shell流程控制語句實例講解(if、for、while、case語句實例)

    linux shell流程控制語句實例講解(if、for、while、case語句實例)

    linux shell有一套自己的流程控制語句,其中包括條件語句(if),循環(huán)語句(for,while),選擇語句(case)。下面我將通過例子介紹下,各個語句使用方法
    2014-04-04
  • Shell腳本編程30分鐘入門(小結)

    Shell腳本編程30分鐘入門(小結)

    這篇文章主要介紹了Shell腳本編程30分鐘入門(小結),小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • 詳解Shell if else語句的具體使用方法

    詳解Shell if else語句的具體使用方法

    這篇文章主要介紹了詳解Shell if else語句的具體使用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • Linux 中awk 提取包含某個關鍵字的段落

    Linux 中awk 提取包含某個關鍵字的段落

    AWK是一種處理文本文件的語言,是一個強大的文本分析工具。這篇文章主要介紹了Linux 中awk 提取包含某個關鍵字的段落實例代碼,需要的朋友可以參考下
    2020-01-01
  • 解決linux的redhat版上mysql字符亂碼的問題

    解決linux的redhat版上mysql字符亂碼的問題

    下面小編就為大家?guī)硪黄鉀Qlinux的redhat版上mysql字符亂碼的問題。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • Linux 中LVS NAT 配置步驟的詳解

    Linux 中LVS NAT 配置步驟的詳解

    這篇文章主要介紹了Linux 中LVS NAT 配置步驟的詳解的相關資料,這里列出詳細的實現步驟,需要的朋友可以參考下
    2017-08-08

最新評論