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

Jon*_*ees 9 video ffmpeg

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

Der*_*ght 11

这可以简化,但这里有一些旧的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}");   
Run Code Online (Sandbox Code Playgroud)


llo*_*gan 8

通过简单的 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
Run Code Online (Sandbox Code Playgroud)

这消除了对 PHP echoawktrgrepsed、 等的任何需要。