-rオプションを使用して、ffmpegがビデオから抽出したフレームに関連付けられたタイムスタンプを抽出するにはどうすればよいですか?


12
ffmpeg -i myvid.mp4  -r  25  -t  100  image-%d.jpeg 

私はフレームを抽出するために使用しているコマンドであり、期待どおりに機能しています。ただし、フレームのタイムスタンプも確認したいと思います。どんな精度でも。100ミリ秒で十分です。ffmpegはこれを行うことができますか?

追加の詳細を提供し、

上記のコマンドを実行すると、約100個のJPEGが得られますが、これらのJPEGとビデオのフレームの間には1対1(または多対1)の対応があると思います。JPEG画像「i」として出力されたフレームのタイムスタンプを知りたいです。

さらにffprobeを試してみましたが、ビデオの長さでさえ不正確に報告します:(


何として?AFAIK jpegにはそのようなメタデータはありません。EXIFタイムスタンプはcapture時間用です。
ラジブ14年

JPEGにはメタデータはありませんが、mp4にはあるかもしれません。ffmpegに、後でJPEGSとしてエンコードするフレームと一緒にプルして、ファイルにタイムスタンプをダンプするように指示できますか?
スリニ14年

ffmpegコマンドからの完全なコンソール出力を含めてください。
llogan

ffprobeは、mp4ビデオストリームからタイムスタンプ情報を提供できます。フレームが複製またはドロップされる可能性がある場合、元のmp4タイムスタンプへの対応は何ですか?その場合、実行中にフレームごとに取得できるかどうかを確認するために、冗長設定を増やすことを検討します。「フレームに関連付けられたタイムスタンプ」とはどういう意味ですか。
dstob 14年

@dstobフレームに関連付けられたタイムスタンプは、入力ビデオのプレゼンテーションタイムスタンプです。つまり、各フレームを表示するタイミングは、ビデオの開始に対して相対的になります。
slhck 14年

回答:


13

できることは、fpsフィルターでフィルタリングしffprobe、生成されたフレームのタイムスタンプを表示することで、イメージの書き込みプロセスを「シミュレート」することです。これは、25 fpsで、50番目のフレーム(50番目の画像と同様)のPTSが2.00秒になることを意味します。

次のようにします:

ffprobe -f lavfi -i "movie=input.mp4,fps=fps=25[out0]" -show_frames -show_entries frame=pkt_pts_time -of csv=p=0

出力されます:

0
0.04
0.08
0.12
0.16
...

これらは、各出力画像のタイムスタンプです。実際に、フレームのリストとタイムスタンプを組み合わせることができます。

ls -1 image-*。jpeg> images.txt
ffprobe -f lavfi -i "movie = input.mp4、fps = fps = 25 [out0]" -show_frames -show_entries frame = pkt_pts_time -of csv = p = 0> frames.txt
images.txt、frames.txt、combined.txtを貼り付けます

次のファイルを作成します:

image-0001.jpeg 0
image-0002.jpeg 0.04
image-0003.jpeg 0.08
image-0004.jpeg 0.12

フレームが多すぎる場合や情報出力の行が多すぎる場合は、これにより余分な行が生じる可能性があることに注意してください。そこでは少し不正確に思えます。


これは、出力に設定された一定のフレームレートに関連するタイムスタンプですか、または出力されたjpegの元のmp4タイムスタンプとの対応ですか?
dstob

このタイムスタンプは、要求された出力フレームレートに基づいています。これは、出力画像とそれらの画像の元の入力ビデオフレームの両方に関係します。タイムベースは1つだけです。これは、フレームレートを変更すると、ffmpegが(もちろん)ビデオをより速く再生せず、各フレームのプレゼンテーション時間を「伸ばし」、不要なフレームをドロップするためです。
slhck

出力タイムベースを手動で作成しているときに、タイムベースが1つだけである必要があるのはなぜですか?もちろん、これは必ずしもそうとは限りませんが、最初の60 fpsビデオでは、ffmpegは入力のタイムスタンプを無視して独自のタイムベースを作成しました。
dstob 14年

正確にあなたが何を得ているのか理解していない。ffmpeg は、最初の入力ファイルのタイムベースとして解析するものを入力タイムベースとして選択します。あなたはもちろんで入力タイムスタンプを捨てるためにffmpegのを伝えることができ-vsync drop、それはIIRC、フィルタリング後に発生します。
slhck
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.