ubuntu16.04下使用ffmpeg從視訊中擷取影象
阿新 • • 發佈:2019-01-30
一、ubuntu16.04下安裝ffmpeg
新增、更新源,並下載安裝。
sudo add-apt-repository ppa:djcj/hybrid
sudo apt-get update
sudo apt-get install ffmpeg
二、使用ffmpeg從視訊中擷取影象
ffmpeg -i video.avi -r 5 -s 960*540 -q:v 2 -f image2 %03d.jpg
- -i 輸入視訊。
- -r 抽取的幀率,即從視訊中每秒鐘抽取圖片的數量,5代表每秒抽取5幀。
- -s resize從視訊中擷取影象的大小
- -q:v 2 高清晰度(若不加圖片會變得模糊)。
- -f 儲存圖片使用的格式(不要掉了image2
- %03d.jpg 輸出圖片的命名。
三、批量處理視訊
#!/bin/bash PATH=/root/anaconda3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin export PATH OLDIFS="$IFS" IFS=$"\n" a=0 for file in *.MOV do echo $file a=$[$a+1] ffmpeg -i $file -r 5 -s 960*540 -q:v 2 -f image2 /home/fairy/workspace/dataset/textile-August06/Fabric1/1"_R"$a"_"%03d.jpg done b=0 for file in *.avi do echo $file b=$[$b+1] ffmpeg -i $file -r 5 -s 960*540 -q:v 2 -f image2 /home/fairy/workspace/dataset/textile-August06/Fabric1/1"_L"$b"_"%03d.jpg done
資料夾裡有兩種格式的視訊(*.MOV和*.avi),把資料夾中所有視訊輸出的圖片放在一個資料夾下。
補充:shell中實現i++操作
a=1
a=$(($a+1))
a=$[$a+1]
a=`expr $a + 1`
let a++
let a+=1
總結 自己跳進(但現已爬出)的那些坑
- 網上有很多ffmpeg的安裝方法,複雜且易出錯,這種是最簡便、最好用的方法。
- ffmpeg在Ubuntu比在Windows下好用,但是需要批量處理。
- 路徑中若包含空格,在空格前一定要用轉義符\。
- 視訊檔案中出現*.mov 、*.MOV,要區分大小寫。
- ffmpeg在圖片命名前一定要加上 image2,雖然我不知道為什麼,但開始沒有加一直報錯。
- ffmpeg中輸出圖片命名%03d.jpg,每個視訊都是從001開始,若想把所有視訊輸出圖片放一個資料夾,一定要注意命名,否則會覆蓋。 【我太蠢了 = =
- 在shell語法中,使用定義過的變數,前面要加$。
好好學習,天天向上。明天會更好。
參考連結: