[英]extracting frames using FFMPEG?
我正在嘗試使用ffmpeg(或openCV-可以接受建議)和python編寫代碼從視頻文件中提取16幀圖像,但是在弄清楚如何入門時遇到了很多麻煩。
我可以直接在python中使用ffmpeg命令行嗎? 如果是這樣,是否有命令獲取片段的長度和幀速率? 如何以相等的間隔拉框架?
任何幫助,將不勝感激! 謝謝!
我可以使用ffmpeg附帶的ffprobe獲取元數據信息。
Module Subprocess是一種使用python外部工具並返回退出狀態或檢查Output的方式,如下面的示例所示。 然后,您可以將python變量分配給ffprobe的解析輸出。 使用shell = True存在安全問題。 這至少可以幫助您入門,並且您可以找出避免以后使用它的方法。
import subprocess
dur_check = subprocess.check_output('ffprobe -v error -show_format We\ Code\ Hard.mp4 | grep duration')
duration = dur_check.split('=')[1]
哪個將返回:
'192.631667'
然后,fps有所不同。
fps_check = subprocess.check_output('ffprobe We\ Code\ Hard.mp4 2>&1 | grep fps',shell=True)
fps = fps_check.split(' ')[4].strip()
哪個返回:
'29.97 fps'
我可以直接在python中使用ffmpeg命令行嗎?
是。 我沒有使用Python的經驗,但是tink3r的答案對我來說就像一個例子。
如果是這樣,是否有命令獲取片段的長度和幀速率?
是。 使用ffprobe
。
$ ffprobe -v error -select_streams v:0 -show_entries stream=duration,avg_frame_rate -of default=nw=1:nk=0 input.mp4
avg_frame_rate=24/1
duration=888.000000
此示例僅從第一個視頻流中獲取所需的信息; 否則,它還會顯示音頻條目等。
如示例所示,不需要其他進程,例如grep
, sed
, awk
或類似的東西。
如果要刪除avg_frame_rate=
和duration=
鍵,則將nk=0
更改為nk=1
。
Python人喜歡JSON格式,對嗎? 如果是這種情況,則可以將-of default=nw=1:nk=0
更改為-of json
。
有關更多示例,請參見FFmpeg Wiki:FFprobe技巧 。
如何以相等的間隔拉框架?
您可以使用選擇過濾器 。 每十秒鍾選擇一幀的示例:
ffmpeg -i -vf "select='not(mod(t\,10))'" -vsync vfr output_%03d.png
這將導致output_001.png
, output_002.png
, output_003.png
等。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.