Eu vi esse tópico, que quase exatamente faz o que eu quero, mas na verdade estou procurando dividir na detecção de cenas.
Por exemplo, digamos que eu tenha uma mulher na tela entre 0:01 -> 0:05, depois um homem em uma cena diferente das 0:06 -> 0:09, e uma segunda mulher na tela entre 0:10 - > 0:14
Isso (idealmente) criaria três videoclipes diferentes. Eu realmente gostaria que fosse até o nível do quadro, se possível, com detecção automática para quando as cenas mudarem.
** ATUALIZADA **
Ok, estou começando bem. Eu fiz o seguinte usando o FFProbe:
ffprobe -show_frames -of compact=p=0 -f lavfi "movie=foo.mp4,select=gt(scene\,.4)" > foo.txt
O que me dá uma lista de carimbos de data e hora que parecem estar exatamente corretos! Agora, o próximo passo - como faço para pegar esta lista de carimbos de data e hora e inseri-los novamente no ffmpeg para dividi-lo? Aqui está um exemplo dos registros de data e hora.
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
fonte
Respostas:
Você pode usar diretamente
ffmpeg
para detectar e extrair cenas em tempo real, sem a necessidade de imprimir e analisar informações de quadros:o
-vsync vfr
é necessária porque as imagens extração não funciona com framerate variável por padrão, consulte # 1644 .fonte
More than 1000 frames duplicated
.Processe seu texto para obter seus carimbos de data e hora e imprimi-los em um arquivo .txt, use o .txt no segmentador ffmpeg.
A precisão não será perfeita e há muitos problemas nos quais você pode se deparar, a menos que tenha controle total sobre o conteúdo recebido.
Vale a pena notar que esse tipo de trabalho é um tópico atual de pesquisa; portanto, novamente, pode produzir resultados imperfeitos.
fonte