使用FFmpeg的获取视频的中间帧?(Use FFMpeg to get middle frame

2019-07-29 11:04发布

我不知道如何使用FFmpeg的中把握视频的中间帧。 我已经写在C#抢在一定的时间框架(即在拉第二个3一帧)。 但是我还没有搞清楚如何找到视频的使用FFmpeg的命令中间。

Answer 1:

这可以简化,但这里的一些老的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}");   


Answer 2:

FFmpeg的帮助你得到的帧速率和视频的长度,这样你就可以通过2其他,然后除以乘一个获得中间帧的数量。

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



Answer 3:

通过简单的shell脚本可以使用ffprobe拿到机器可读的持续时间的输出, bc来计算点半,和ffmpeg使框架:

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

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



Answer 4:

这个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


文章来源: Use FFMpeg to get middle frame of a video?
标签: video ffmpeg