シーン検出によるFFMPEGを使用したビデオの分割


17

私はこのスレッドを見ましたが、これはほぼ正確に私が望むことをしますが、実際にはシーン検出の分割を探しています。

大きな.movビデオファイルを黒いフレームで小さなファイルに自動的に分割します(シーンの変更)?

たとえば、0:01-> 0:05からスクリーンに女性がいて、0:06-> 0:09から別のシーンに男性がいて、0:10からスクリーンに2人目の女性がいるとします- > 0:14

これにより(理想的には)3つの異なるビデオクリップが作成されます。可能であれば、シーンが変化したときの自動検出を使用して、フレームレベルまで下げてください。

** 更新しました **

いいスタートを切りました。FFProbeを使用して以下を実行しました。

ffprobe -show_frames -of compact=p=0 -f lavfi "movie=foo.mp4,select=gt(scene\,.4)" > foo.txt

正確に正しいと思われるタイムスタンプのリストが表示されます!次に、次のステップ-このタイムスタンプのリストを取得し、ffmpegに入力して分割する方法を教えてください。タイムスタンプの例を次に示します。

media_type=video|key_frame=1|pkt_pts=972221|pkt_pts_time=10.802456|pkt_dts=972221|pkt_dts_time=10.802456|best_effort_timestamp=972221|best_effort_timestamp_time=10.802456|pkt_duration=N/A|pkt_duration_time=N/A|pkt_pos=5083698|pkt_size=6220800|width=1920|height=1080|pix_fmt=rgb24|sample_aspect_ratio=1:1|pict_type=I|coded_picture_number=0|display_picture_number=0|interlaced_frame=0|top_field_first=0|repeat_pict=0|tag:lavfi.scene_score=0.503364
media_type=video|key_frame=1|pkt_pts=2379878|pkt_pts_time=26.443089|pkt_dts=2379878|pkt_dts_time=26.443089|best_effort_timestamp=2379878|best_effort_timestamp_time=26.443089|pkt_duration=N/A|pkt_duration_time=N/A|pkt_pos=12736403|pkt_size=6220800|width=1920|height=1080|pix_fmt=rgb24|sample_aspect_ratio=1:1|pict_type=I|coded_picture_number=0|display_picture_number=0|interlaced_frame=0|top_field_first=0|repeat_pict=0|tag:lavfi.scene_score=1.000000
media_type=video|key_frame=1|pkt_pts=2563811|pkt_pts_time=28.486789|pkt_dts=2563811|pkt_dts_time=28.486789|best_effort_timestamp=2563811|best_effort_timestamp_time=28.486789|pkt_duration=N/A|pkt_duration_time=N/A|pkt_pos=13162601|pkt_size=6220800|width=1920|height=1080|pix_fmt=rgb24|sample_aspect_ratio=1:1|pict_type=I|coded_picture_number=0|display_picture_number=0|interlaced_frame=0|top_field_first=0|repeat_pict=0|tag:lavfi.scene_score=0.745838
media_type=video|key_frame=1|pkt_pts=2627625|pkt_pts_time=29.195833|pkt_dts=2627625|pkt_dts_time=29.195833|best_effort_timestamp=2627625|best_effort_timestamp_time=29.195833|pkt_duration=N/A|pkt_duration_time=N/A|pkt_pos=13485087|pkt_size=6220800|width=1920|height=1080|pix_fmt=rgb24|sample_aspect_ratio=1:1|pict_type=I|coded_picture_number=0|display_picture_number=0|interlaced_frame=0|top_field_first=0|repeat_pict=0|tag:lavfi.scene_score=0.678877

新しい質問を既存の質問に編集したり、新しい質問をしたり、タイムスタンプを取得する方法についてはこれを再度参照しないでください。
djsmiley2k-CoW

回答:


4

ffmpegフレーム情報を印刷および解析することなく、シーンをその場で検出および抽出するために直接使用できます。

ffmpeg -i foo.mp4 -vf select='gt(scene\,0.4)' -vsync vfr frame%d.png

-vsync vfr画像の抽出が見る、デフォルトでは、可変フレームレートで動作していないため、要求され#1644


このメソッドは、警告でffmpegをクラッシュさせますMore than 1000 frames duplicated
ashleedawg

1
実際に小さなビデオをどのように作成しましたか?上記のコマンドは、小さなmp4ビデオではなく、png画像を作成します。
フアンパブロフェルナンデス

3

テキストを処理してタイムスタンプを取得し、.txtファイルに印刷します。ffmpegセグメンターで.txtを使用します。

正確性は完璧ではなく、着信コンテンツを完全に制御できない限り、多くの問題が発生する可能性があります。

このタイプの作業は現在の研究テーマであるため、不完全な結果が生じる可能性があることに注意してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.