使用FFMpeg获取视频的中间帧?

video ffmpeg

7609 观看

4回复

2167 作者的声誉

我想知道如何使用FFMpeg来拍摄视频的中间帧。我已经编写了C#以在某个时间抓取一个帧(即在第二个3时拉一帧)。但我还没弄明白如何使用FFMpeg命令找到视频的中间部分。

作者: Jon Dewees 的来源 发布者: 2009 年 6 月 30 日

回应 (4)


4

1823 作者的声誉

FFmpeg可以帮助您获得视频的帧速率和长度,因此您可以将一个乘以另一个并除以2以获得中间帧的数量。

即30秒视频以每秒15帧的速度运行:30 * 15 = 450/2 = 225,这意味着你需要抓住第225帧。

作者: Nicolas 发布者: 30.06.2009 11:45

10

713 作者的声誉

决定

这可以简化,但这里有一些旧的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}");   
作者: Derek Gathright 发布者: 29.07.2009 05:32

0

1 作者的声誉

这个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
作者: Георги Стефанов 发布者: 09.11.2014 05:08

3

42297 作者的声誉

使用简单的shell脚本,您可以使用它ffprobe来获取持续时间,bc计算半点,以及ffmpeg制作帧:

input=input.mp4; ffmpeg -ss "$(bc -l <<< "$(ffprobe -loglevel error -of csv=p=0 -show_entries format=duration "$input")/2")" -i "$input" -frames:v 1 half.png

这消除了任何需要PHP, ,echoawktrgrepsed等。

作者: LordNeckbeard 发布者: 27.01.2016 12:11
32x32