[程式] 用 ffmpeg 拍縮時攝影(mac)

ffmpeg 是一個開源、跨平台的轉檔程式,以前在裝 openCV 的時候好像有看過,這篇記錄一下怎麼用 ffmpeg 來節圖、組裝成新的影片以及示範成果。

ffmpeg 的官方文件可以在>這邊< 找到。順便參考>這個網誌<(說明在 Win / Linux 如何做到)。不過我還是超級新手就參考他們的指令,並參考官網改一下參數而已。

安裝: >參考這邊<

ffmpeg 可以用 Homebrew 套件管理工具安裝,可以先輸入以下指令:

$brew info ffmpeg

會跑出一些編譯時的選項可以設定。決定好了以後,輸入:

$brew install ffmpeg --編譯設定

比如:(官網推薦)

brew install ffmpeg --with-fdk-aac --with-ffplay --with-freetype --with-libass --with-libquvi --with-libvorbis --with-libvpx --with-opus --with-x265
裝置資訊:

要查詢電腦上有哪些裝置可以支援錄影,可以用下面的指令查詢:

ffmpeg -f avfoundation -list_devices true -i ''

在我電腦上的回應是:

ffmpeg version 3.2 Copyright (c) 2000-2016 the FFmpeg developers
  built with Apple LLVM version 8.0.0 (clang-800.0.42.1)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/3.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-opencl --disable-lzma --enable-nonfree --enable-vda
  libavutil      55. 34.100 / 55. 34.100
  libavcodec     57. 64.100 / 57. 64.100
  libavformat    57. 56.100 / 57. 56.100
  libavdevice    57.  1.100 / 57.  1.100
  libavfilter     6. 65.100 /  6. 65.100
  libavresample   3.  1.  0 /  3.  1.  0
  libswscale      4.  2.100 /  4.  2.100
  libswresample   2.  3.100 /  2.  3.100
  libpostproc    54.  1.100 / 54.  1.100
[AVFoundation input device @ 0x7fa820506100] AVFoundation video devices:
[AVFoundation input device @ 0x7fa820506100] [0] FaceTime HD 攝影機(內建)
[AVFoundation input device @ 0x7fa820506100] [1] Capture screen 0
[AVFoundation input device @ 0x7fa820506100] AVFoundation audio devices:
[AVFoundation input device @ 0x7fa820506100] [0] Built-in Microphone

影片輸入的部分,索引0 是內建的 iSight 攝影機,索引1 則是電腦螢幕錄影。另外聲音輸入就只有內建的麥克風(索引0)。

及時顯示:

用 ffplay 的指令,可以及時顯示錄影的畫面:

ffplay -f avfoundation -video_size 1920x1080 -framerate 30  -i 0

-f 好像是影像來源,在比較新的系統上,請打上 avfoundation ,就可以找到不同的網路攝影機。
-i 指定你要用的攝影機/檔案來源,索引請見上面。

播放開始後,可以按「?」表示好奇,「q」表示想離開。

錄影:

錄影的流程大概是如下的: 攝影機 -(avfoundation)-> ffmpeg -(編碼 etc. )-> 儲存檔案

指令 flag 位置很重要,以 「-i」為界,之前是輸入的檔案的設定,之後則是輸出檔案的設定。

 

錄製縮時時,可以參考以下指令:

$ ffmpeg -f avfoundation -video_size 1920x1080 -framerate 30 -pix_fmt 0rgb -i 0 -s 1920x1080 -r 0.5 -qscale:v 1  %05d.jpg
  • -f avfoundation:指定影片來源
  • -video_size 1920×1080:輸入的影片解析度,這邊要看相機支援是多少。
  • -framerate 30:fps ,每秒幾禎。
  • -pix_fmt 0rgb

-i 0 :指定用訊號來源為 索引0 的攝影機。

  • -s 1920×1080 :指定存檔的解析度。
  • -r 0.5:每幾秒儲存一張圖片每秒幾禎的樣子,設定 5 的話一秒會存五張,不知道跟 -framerate 有什麼差異。
  • -qscale:v 1
  • %05d.jpg 檔名,表示以 xxxx.jpg 為名,號碼較小時則前方為數字動補零到5位。
影片製作:

這邊弄了很久才搞定,因為指定一秒播幾張的設定一直不對,直到看了>這邊<,終於順利指定一秒播的張數!

ffmpeg -s 1920x1080 -framerate 60 -i %05d.jpg -s 1920x1080 -framerate 60 -vcodec h264 -b:v 12000000 Part3_60fps2.mp4

-i 以前:

  • -framerate 60 :這邊就是設定的重點,以每秒六十張的速度播放,預設是25的樣子。

-i %05d.jpg:指定輸入的檔案,這邊是指定格式是「xxxxx.jpg」的檔案

-i 之後:輸出設定:

  • -s 1920×1080 :指定輸出解析度。
  • -framerate 60 :設定輸出禎數。
  • -vcodec h264 :指定編碼器。
  • -b:v 12000000 :設定 bitrate,越高畫質可能越好,但是檔案會變大
  • Part3_60fps2.mp4 :輸出檔名。
範例:

下面是範例輸出,以網路攝影機拍攝我拍樂高小人偶的過程:

請多多指教!

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料