我想知道如何使用FFMpeg來抓取視頻的中間幀。我已經寫了C#來在特定時間抓取一幀(即在第3秒拉一幀)。但我還沒有弄清楚如何使用FFMpeg命令找到視頻的中間部分。使用FFMpeg獲取視頻的中間幀?
8
A
回答
8
這可能是簡化的,但這裏有一些舊的PHP代碼,我應該這樣做。 (添加位置到FFmpeg的,如果它不是在你的路徑)
$output = shell_exec("ffmpeg -i {$path}");
preg_match('/Duration: ([0-9]{2}):([0-9]{2}):([^ ,])+/', $output, $matches);
$time = str_replace("Duration: ", "", $matches[0]);
$time_breakdown = explode(":", $time);
$total_seconds = round(($time_breakdown[0]*60*60) + ($time_breakdown[1]*60) + $time_breakdown[2]);
shell_exec("ffmpeg -y -i {$path} -f mjpeg -vframes 1 -ss " . ($total_seconds/2) . " -s {$w}x{$h} {$output_filename}");
4
FFmpeg可以幫助您獲得幀率和視頻的長度,因此您可以將一個乘以另一個併除以2以獲得中間幀的編號。
即,對於以15幀/秒運行的30秒視頻:30 * 15 = 450/2 = 225,這意味着您需要抓住第225幀。
0
這個bash命令的作品就像一個魅力(測試):
avconv -i 'in.mpg' -vcodec mjpeg -vframes 1 -an -f rawvideo -s 420x300 -ss avconv -i in.mpg 2>&1 | grep Duration | awk '{print $2}' | tr -d , | awk -F ':' '{print ($3+$2*60+$1*3600)/2}' out.jpg
2
例
假設你正在使用Linux你可以使用ffprobe
得到持續,bc
計算點半,然後ffmpeg
使框架:
eval "$(ffprobe -v error -of flat=s=_ -show_entries format=duration input.mp4)"
ffmpeg -ss "$(echo "$format_duration/2" | bc)" -i input.mp4 -q:v 2 -frames:v 1 half.jpg
這消除了任何需要使用awk
,tr
,grep
,sed
等
或者,你可以使用select filter和消除bc
,但選擇濾波器可能會很慢。
大約持續
的說明,如果該文件被損壞或不正確地截斷從ffprobe
持續時間可能不正確。持續時間可以通過輸入與ffmpeg
則指出在控制檯輸出的第二到最後一行time=
完全解碼得到證實:
ffmpeg -i input -f null -
…
frame= 2600 fps=569 q=-0.0 Lsize=N/A time=00:01:48.50 bitrate=N/A
video:244kB audio:20344kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
相關問題
- 1. 如何在Android中使用ffmpeg從mp4視頻獲取視頻幀?
- 2. 從視頻中提取幀 - PHP-FFMpeg
- 3. Android FFMPEG示例使用NDK從視頻獲取幀
- 4. 使用ffmpeg獲取python中的視頻持續時間
- 5. FFmpeg的視頻縮略圖幀提取
- 6. 如何從使用ffmpeg的視頻中提取單個幀?
- 7. 使用ffmpeg從未壓縮的y4m視頻中提取幀
- 8. 使用ffmpeg和android提取視頻中的第一幀ndk
- 9. ffmpeg每秒提取一幀視頻?
- 10. 從視頻中獲取幀
- 11. 無法更改視頻關鍵幀間隔使用的ffmpeg
- 12. 用ffmpeg重複一幀填充視頻的中間部分
- 13. 使用OpenCV從.avi視頻獲取幀
- 14. 使用opencv獲取幀視頻
- 15. 使用ffmpeg製作視頻w /幀之間暫停
- 16. 從Youtube視頻獲取幀視頻
- 17. 如何使用FFMPEG在0,5,10秒僅提取3個視頻幀?
- 18. 從Xuggler中的幀中獲取視頻
- 19. 在Ubuntu中使用ffmpeg提取視頻的時間
- 20. DirectShow - 獲取視頻幀
- 21. 視頻取向使用的ffmpeg
- 22. 在opencv中獲取CV_CAP_PROP_POS_FRAMES的視頻幀
- 23. 獲取HTML5視頻中的幀編號
- 24. 從c#中的視頻獲取幀#
- 25. 使用ffmpeg設置視頻中的B幀
- 26. 從FFmpeg獲取視頻的高寬比
- 27. FFMPEG - 從視頻中提取
- 28. FFmpeg視頻分割時的幀丟失
- 29. 如何使用MATLAB從不同幀頻的視頻獲取時間信息?
- 30. 使用FFmpeg捕獲視頻流
感謝,這正是我一直在尋找! – 2009-07-29 23:08:39
@Derek Gathright請給我一些基本的細節,以開始使用ffmpeg。請看看我的[問題](http://stackoverflow.com/questions/10071408/how-to-get-frames-of-video-file-in-android)。 – 2012-04-25 04:56:46