1. 程式人生 > >ubuntu16.04下使用ffmpeg從視訊中擷取影象

ubuntu16.04下使用ffmpeg從視訊中擷取影象

一、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

總結 自己跳進(但現已爬出)的那些坑

  1. 網上有很多ffmpeg的安裝方法,複雜且易出錯,這種是最簡便、最好用的方法。
  2. ffmpeg在Ubuntu比在Windows下好用,但是需要批量處理。
  3. 路徑中若包含空格,在空格前一定要用轉義符\。
  4. 視訊檔案中出現*.mov 、*.MOV,要區分大小寫。
  5. ffmpeg在圖片命名前一定要加上 image2,雖然我不知道為什麼,但開始沒有加一直報錯。
  6. ffmpeg中輸出圖片命名%03d.jpg,每個視訊都是從001開始,若想把所有視訊輸出圖片放一個資料夾,一定要注意命名,否則會覆蓋。 【我太蠢了 = =
  7. 在shell語法中,使用定義過的變數,前面要加$。

好好學習,天天向上。明天會更好。

參考連結: