web-dev-qa-db-ja.com

ffmpegの画像からビデオへのスクリプトは誰ですか?

たくさんの画像を撮り、それらからビデオスライドショーを作りたいと思っています。そのためのアプリがありますよね?うん、かなりの数のようだ。問題は、スライドを音楽に同期させたいことです。これまでに見たすべてのアプリでは、各スライドを1秒の倍数でしか表示できません。 140 bpmに収まるように、1.714285714秒の倍数で表示してほしい。

私が見たツールは一般的に内部にffmpegがあるように見えるので、おそらくこの種のことはスクリプトで実行できます。しかし、ffmpegには非常に多くのオプションがあります...誰かが何か近いものを持っていることを願っています。

最大約100枚のスライドがあります。スライドは3.428571428秒間表示する必要があるか、2回だけ表示できると思います。

11
danja

ビデオから画像を抽出することも、多くの画像からビデオを作成することもできます。

ビデオから画像を抽出する場合:

ffmpeg -i foo.avi -r 1 -s WxH -f image2 foo-%03d.jpeg

これにより、ビデオから1秒あたり1つのビデオフレームが抽出され、「foo-001.jpeg」、「foo-002.jpeg」などの名前のファイルに出力されます。画像は、新しいWxH値に合うように再スケーリングされます。限られた数のフレームのみを抽出する場合は、上記のコマンドを-vframesまたは-tオプションと組み合わせて、または-ssと組み合わせて使用​​して、特定の時点から抽出を開始できます。多くの画像からビデオを作成する場合:

ffmpeg -f image2 -i foo-%03d.jpeg -r 12 -s WxH foo.avi

構文foo-%03d.jpegは、シーケンス番号を表すためにゼロが埋め込まれた3桁で構成される10進数を使用することを指定します。これは、C printf関数でサポートされている構文と同じですが、通常の整数を受け入れる形式のみが適しています。

これはドキュメントからの抜粋です。詳細については、ffmpegの ドキュメント ページを確認してください。

24
svrx

Ffmpegのごく最近のバージョンの場合(おおよそ2013年の終わりから)

以下は、現在のディレクトリ内のすべてのpng画像からビデオスライドショーを作成します(ビデオコーデックlibx264またはwebmを使用)。このコマンドは、連続した番号と順序の画像名を受け入れます(_img001.jpg_、_img002.jpg_、_img003.jpg_)およびランダムな画像の束。

(各画像の長さは5秒

_ffmpeg -r 1/5 -pattern_type glob -i '*.png' -c:v libx264 out.mp4   # x264 video
ffmpeg -r 1/5 -pattern_type glob -i '*.png'              out.webm  # WebM video
_

Ffmpegの古いバージョンの場合

これにより、_img001.png_という名前の一連のpng画像からビデオスライドショーが作成されます(ビデオコーデックlibx264またはwebmを使用) 、_img002.png_、_img003.png_、…

(各画像の長さは5秒

_ffmpeg -f image2 -r 1/5 -i img%03d.png -vcodec libx264 out.mp4     # x264 video
ffmpeg -f image2 -r 1/5 -i img%03d.png                 out.webm    # WebM video
_

Ffmpegの最新バージョンを使用している場合は、次のコマンドを少し変更する必要があります。

これにより、各画像の長さが15秒のスライドショーが作成されます。

_ffmpeg -f image2 -r 1/15 -i img%03d.png out.webm
_

1つの画像からビデオを作成する場合は、これで十分です(出力ビデオの長さは30秒に設定されます) :

_ffmpeg -loop 1 -f image2 -i img.png -t 30 out.webm
_

番号が付けられて順番に並べられた画像(_img001.jpg_、_img002.jpg_、_img003.jpg_)がなく、ランダムな画像の束がある場合は、次の方法を試してください。

_cat *.jpg | ffmpeg -f image2pipe -r 1 -vcodec mjpeg -i - out.webm
_

またはpng画像の場合:

_cat *.png | ffmpeg -f image2pipe -r 1 -vcodec png -i - out.webm
_

これにより、現在のディレクトリにあるすべてのjpg/png画像が読み取られ、パイプを使用して1つずつffmpegの入力に書き込まれ、そこからビデオが生成されます。

重要:一連のすべての画像は、同じサイズ(xおよびyの寸法)および形式である必要があります。

説明:FFmpegに入力ファイルのFPSオプション(フレーム/秒)を非常に低い値に設定するように指示することで、出力でFFmpegの重複フレームを作成しました。このようにして、各画像をしばらくの間画面に表示することができました。これまで、任意の分数をフレームレートとして設定できることを確認しました。 1分あたり140ビートは-r 140/60になります。

出典: FFmpeg wiki


ビデオから画像を作成する場合

_ffmpeg -i video.mp4 img%03d.png
_

これにより、_img001.png_、_img002.png_、_img003.png_、…という名前の画像が作成されます。

24
erik

私はこれを使って終わりました:

mencoder "mf://html/*.png" -ovc x264 -mf  fps=1.16666667  -o output.avi

その後、LiVESでサンプルレートを変更します。

詳細(および最終結果のビデオ)を次の場所にロードします: http://hyperdata.org/hackit/mirror

3
danja