10

FFMpegを使用してビデオの中央フレームを取得する方法を知りたいです。私はすでにC#を作成して、特定の時間にフレームを取得します(つまり、2番目の3で1つのフレームをプルします)。しかし、FFMpegコマンドを使用してビデオの真ん中を見つける方法をまだ理解していません。

4

4 に答える 4

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}");   
于 2009-07-29T05:32:15.283 に答える
8

単純なシェルスクリプトを使用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

これによりecho、 PHP 、、、、、、などが不要になります。awktrgrepsed

于 2016-01-27T00:11:44.403 に答える
4

FFmpegは、ビデオのフレームレートと長さを取得するのに役立ちます。そのため、一方を他方で乗算し、2で除算して、中央のフレームの数を取得できます。

つまり、毎秒15フレームで実行される30秒間のビデオの場合:30 * 15 = 450/2 = 225、つまり225番目のフレームを取得する必要があります。

于 2009-06-30T23:45:18.753 に答える
-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
于 2014-11-09T17:08:36.013 に答える