簡體   English   中英

使用FFMPEG提取幀?

[英]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
  • 此示例僅從第一個視頻流中獲取所需的信息; 否則,它還會顯示音頻條目等。

  • 如示例所示,不需要其他進程,例如grepsedawk或類似的東西。

  • 如果要刪除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.pngoutput_002.pngoutput_003.png等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM