Ubuntu中安裝最新FFmpeg及使用FFmpeg進行視頻圖片數據幀的提取

Ubuntu中安裝最新FFmpeg及視頻圖片數據幀的提取

如題所述本文是關於在Ubuntu中安裝FFmpeg,如何之爲最新版,那是因爲是直接從FFmpeg 源碼download官網 下載的源碼進行編譯安裝的。本文中安裝FFmpeg的方法援引這位博主分享的博文

https://blog.csdn.net/qq_38863413/article/details/105017775

依賴庫的安裝

  在進行FFmpeg的編譯安裝之前需要對其所依賴的一些庫安裝,如:yams, sdl1.2, sdl2.0,如下所示:

sudo apt-get install yasm
sudo apt-get install libsdl1.2-dev
sudo apt-get install libstdl2-dev

  但是在安裝第三個依賴庫:libstdl2-dev時出現狀況:libstdl2-dev
  無法通過apt找到安裝包,但是Ubuntu的庫有更新過,無奈之下只能從其官網下載源碼編譯安裝了,傳送門:libstdl2-dev源碼下載
SDL2.0
  解壓後,進行編譯安裝:

 1. ./configure 
 2. make 
 3. sudo make install

  OK,依賴庫安裝好之後,接下來就是安裝FFmpeg了。
FFmpeg
  同樣下載好源碼的壓縮包之後,解壓進入該文件目錄,編譯安裝:

 1. ./configure 
 2. make 
 3. sudo make install

  安裝的時間有點長,安裝好之後檢查安裝情況,可使用以下命令進行FFmpeg的版本的查詢,從而判斷是否安裝成功。
FFmpeg
  OK,FFmpeg安裝好了,solosolo進入正題,此次安裝FFmpeg的主要目的之一就是提取視頻中的圖片幀。不知道各位有沒遇到過這樣的情況,就是在視頻中忽然出現某一幀圖片是你很想拿來做壁紙的,但是用電腦截屏的話總是感覺沒有原視頻看起來清晰,不過這也和你屏幕的分辨率有關。AE這樣強大的視頻編輯處理軟件又吃筆記本內存,所以,本人選擇使用了FFmpeg這一強大的開源流媒體處理工具(庫)。所以我要做的就是在視頻中提取我想要的圖片幀保存起來。這樣的操作使用FFmpeg就是一句命令就能夠解決的事。
build
使用FFmpeg主要是按時間進行圖片幀的提取:
1、根據時間段進行圖片數據幀的提取,如下在視頻時間是2分53秒到2分55秒處按幀進行圖片的提取。

ffmpeg -i ./xxxxx.flv -ss 02:53 -to 02:55 -f image2 ./xxxxx-%d.png

實際使用如下:

lin@Dev:~/Videos$ ffmpeg -i ./Aimer.flv -ss 02:53 -to 02:55 -f image2 ./Aimer-%d.png
ffmpeg version 4.2.2 Copyright (c) 2000-2019 the FFmpeg developers
  built with gcc 7 (Ubuntu 7.5.0-3ubuntu1~18.04)
  configuration: 
  libavutil      56. 31.100 / 56. 31.100
  libavcodec     58. 54.100 / 58. 54.100
  libavformat    58. 29.100 / 58. 29.100
  libavdevice    58.  8.100 / 58.  8.100
  libavfilter     7. 57.100 /  7. 57.100
  libswscale      5.  5.100 /  5.  5.100
  libswresample   3.  5.100 /  3.  5.100
Input #0, flv, from './Aimer.flv':
  Metadata:
    description     : Codec by Bilibili XCode Worker v4.8.35(fixed_gap:False)
    metadatacreator : Version 1.9
    hasKeyframes    : true
    hasVideo        : true
    hasAudio        : true
    hasMetadata     : true
    canSeekToEnd    : true
    datasize        : 74368157
    videosize       : 71083119
    audiosize       : 3231802
    lasttimestamp   : 195
    lastkeyframetimestamp: 195
    lastkeyframelocation: 74369555
  Duration: 00:03:15.57, start: 0.080000, bitrate: 3042 kb/s
    Stream #0:0: Video: h264 (High), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 2908 kb/s, 25.03 fps, 25 tbr, 1k tbn, 50 tbc
    Stream #0:1: Audio: aac (LC), 44100 Hz, stereo, fltp, 128 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> png (native))
Press [q] to stop, [?] for help
Output #0, image2, to './Aimer-%d.png':
  Metadata:
    description     : Codec by Bilibili XCode Worker v4.8.35(fixed_gap:False)
    metadatacreator : Version 1.9
    hasKeyframes    : true
    hasVideo        : true
    hasAudio        : true
    hasMetadata     : true
    canSeekToEnd    : true
    datasize        : 74368157
    videosize       : 71083119
    audiosize       : 3231802
    lasttimestamp   : 195
    lastkeyframetimestamp: 195
    lastkeyframelocation: 74369555
    encoder         : Lavf58.29.100
    Stream #0:0: Video: png, rgb24, 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 200 kb/s, 25 fps, 25 tbn, 25 tbc
    Metadata:
      encoder         : Lavc58.54.100 png
frame=   50 fps=0.8 q=-0.0 Lsize=N/A time=00:00:02.00 bitrate=N/A speed=0.0327x    
video:48429kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown

  上述運行後的結果是frame= 50,即提取了50幀的圖片,圖片的數量與視頻的幀率相關。

2、視頻逐幀提取

 ffmpeg -i ./xxxxx.flv xxxxx-%d.png

3、截取某個時間點的圖片幀

 ffmpeg -i ./xxxxx.flv -ss 01:11 -f image2 ./xxxxx.png

  上述FFmpeg使用過程中所設計的參數如下:

參數 釋義
-i 表示輸入文件,後接需要進行處理的視頻文件
-ss 表示要提取的圖片幀所在的或者說是起始的時間戳
-to 和其字面的意思一樣,表示截取動作的終止的時間戳
-f 代表輸出文件,後面需要接 image2,並指明輸出文件的儲存路徑

更多詳情敬請訪問:ffmpeg Documentation 官網

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章