FFMPEGでサムネイルを作成する

notoです。

FFMPEGで複数サムネイルを切りだしたところ、稀にグレー一色のJPGファイルが書き出されている現象があったので、備忘録的なメモです。

問題があったコマンドです。

thumbnail.php
1
2
3
4
5
6
7
$time   = '00:00:10'; // 秒または、HH:MM:SS[.xxx]形式
$video  = 'hoge.mpg';
$img    = 'hoge.jpg';

$cmd = "ffmpeg -ss $time -i $video -vcodec mjpeg -vframes 1 -an -f image2 $img";
//コマンド ffmpeg -ss 00:00:10 -i hoge.mpg -vcodec mjpeg -vframes 1 -an -f image2 hoge.jpg
exec($cmd);

このコマンドを実行すると以下のワーニングが発生し、切り出したJPEGファイルがグレー一色となります。

1
warning: first frame is no keyframe

色々試してみたのですが、うまくいかず結局 ss オプションの代わりに、 itsoffset オプションを利用しました。

thumbnail.php
1
2
3
4
5
6
7
$time   = '00:00:10'; // 秒または、HH:MM:SS[.xxx]形式
$video  = 'hoge.mpg';
$img    = 'hoge.jpg';

$cmd = "ffmpeg -itsoffset -$time -i $video -vcodec mjpeg -vframes 1 -an -f image2 $img";
//コマンド ffmpeg -itsoffset -00:00:10 -i hoge.mpg -vcodec mjpeg -vframes 1 -an -f image2 hoge.jpg
exec($cmd);

この方法は確実にサムネイルを切りだすことができますが、切り出すまで時間がかかるというデメリットがあります。 んーもっといい方法はないですかね。

Comments