web-dev-qa-db-ja.com

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

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

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

追加の詳細を提供し、

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

さらに、私はffprobeを試しましたが、ビデオの継続時間も不正確に報告しているのがわかりました:(

12
Srini

あなたができることは、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 
 paste 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

情報出力のフレームが多すぎたり、行が多すぎたりすると、無関係な行になる可能性があることに注意してください。そこでは少し不正確なようです。

13
slhck