我想知道如何使用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. FFmpeg的視頻縮略圖幀提取
- 2. 如何從使用ffmpeg的視頻中提取單個幀?
- 3. 無法更改視頻關鍵幀間隔使用的ffmpeg
- 4. 用ffmpeg重複一幀填充視頻的中間部分
- 5. 使用OpenCV從.avi視頻獲取幀
- 6. 從Youtube視頻獲取幀視頻
- 7. 從Xuggler中的幀中獲取視頻
- 8. 在Ubuntu中使用ffmpeg提取視頻的時間
- 9. 使用ffmpeg設置視頻中的B幀
- 10. 從FFmpeg獲取視頻的高寬比
- 11. 如何使用MATLAB從不同幀頻的視頻獲取時間信息?
- 12. 使用FFmpeg捕獲視頻流
- 13. Swift - 從視頻中獲取所有幀
- 14. 使用ffmpeg從視頻中提取低/質量好的音頻
- 15. 如何在C++中使用ffmpeg從視頻中提取音頻?
- 16. ffmpeg:從視頻中提取圖像及其幀數?
- 17. 將FFMPEG視頻並排,通過幀數
- 18. 使用ffmpeg在每隔幾幀插入視頻內的圖像
- 19. 在視頻使用與音頻的ffmpeg
- 20. 使用ffmpeg從視頻捕獲的視頻創建視頻拼貼
- 21. 使用ffmpeg覆蓋視頻
- 22. 如何使用的ffmpeg到Android用於獲取視頻文件的幀中的Android
- 23. 使用ffmpeg無法從視頻中提取mp3音頻
- 24. 視頻幀捕獲
- 25. 用matlab提取視頻幀
- 26. 如何使用libav從h264視頻獲取sps結構ffmpeg
- 27. 使用ffmpeg從視頻獲取屏幕截圖
- 28. 如何從Qt框架中的視頻逐幀獲取幀?
- 29. 的ffmpeg以從視頻中提取
- 30. 使用mciSendCommand捕獲視頻幀
感謝,這正是我一直在尋找! – 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