2011-08-08 7 views
6

私はFFmpegを使って画像に単一のフレームを抽出しています。FFmpeg -ss奇妙な振る舞い

ffmpeg.exe -ss 00:30:00 -i video.avi -y -an -vframes 1 test.png 

唯一の違いは、の順である - :

ffmpeg.exe -i video.avi -ss 00:30:00 -y -an -vframes 1 test.png 

が...ほぼ同じである以下、よりかなり時間がかかりますが、瞬間:いくつかのグーグルが、それはその実行を判明しますiと-ss。これは意図的な「機能」ですか?この違いの技術的な理由がありますか?

答えて

6

これは教育的な推測です。 -ss-iの前に出現すると、入力の指示として扱われるため、ビデオストリームの最初のフレームは30秒のものになります。 -ss-iの後に出現すると、それがエフェクトとして扱われ、最初の30秒間のフレームが読み込まれて削除され、パフォーマンスの違いにつながります。

6

wberryの答えは確かに非常に教育を受けたものです。ドキュメントを読むと、さらに助けることができる:

「-ss位置(入力/出力)」を入力オプション(-i前)として使用

は、位置へのこの入力ファイルに努めます。 (出力ファイル名の前に)出力オプションとして使用すると、タイムスタンプが位置に達するまで入力をデコードして破棄します。これは遅くなりますが、より正確です。

(位置秒またはHHのいずれかであってもよい:MM:SS [.XXX]フォーム。)私は現在書いhttp://ffmpeg.org/ffmpeg.html#Main-optionsに見られるような)

オーディオグラバーアプリケーションを使用しています。そのため、私はより低速ですがより正確な方法を使用しています。最良のアプローチを選択するのはあなた次第です。

1

-iの前に-ssがあると、最も近いキーフレーム(H.264は250のGOPを使用するため、H.264ファイルでは25fpsで10秒ごとです)に移動します。これは本当に高速になるので、最初の-ssの後の小数点位置に行くために、-iの後に-ssを追加することができます。

-iの後に-iを置くと、正確な場所が検索されますが、非常に遅いです。

は例と私もちょうど映像コンテンツからサムネイルを生成し、アプリを終了した

1

詳細についてはhttps://trac.ffmpeg.org/wiki/Seekingを参照してください。これをチェックアウトする必要

http://ffmpeg.org/trac/ffmpeg/wiki/Seeking%20with%20FFmpeg

それは迅速フレーム選択で、フレームtime精度を提供し、統一コマンドに(両方の位置から)-ssフラグを組み合わせた方法が記載されています。

ffmpeg -ss 00:02:30 -i Underworld.Awakening.avi -ss 00:00:30 -vframes 1 out3.jpg

と、単一のビデオから複数の親指のような他の可能なトリックへのリンクが含まれています。