Interessante. Eu acho que isso pode ser bastante tratável se o tamanho do vídeos não são muito grandes (ou você está bem em fazer isso em vários pedaços).
Veja o que estou pensando:
-
O que você realmente quer no final é uma comparação lado-a-lado, quase como
sdiff
-
Mas, em vez de números de linha, você quer um índice de tempo.
-
E, em vez de uma linha de texto, você quer um quadro de vídeo que possa comparar com algum nível de certeza contra outro
Vou assumir ferramentas padrão do Unix, a menos que seja especificado de outra forma. Eles estão disponíveis para todos os sistemas operacionais incluindo o Windows .
Então, que tal isso:
-
Extraia todos os quadros de cada vídeo para um PNG.
Você pode fazer isso com
ffmpeg
, consulte este post de superusuário Você terá um diretório cheio de JPGs numerados. -
Certifique-se de que cada um tenha a mesma proporção. Para este exemplo, digamos que seja 450x320. O ImageMagick pode ajudá-lo se você não o tiver.
-
Agora a parte complicada. Estamos tentando comparar quadros de fontes completamente diferentes e queremos tentar fazer sem nada computacionalmente caro, como visão de computador ou uma rede neural.
Aqui está a minha ideia: reduzir cada imagem para um pequeno PNG a preto e branco de tamanho 1 / 10th.
Então, se você tivesse esta foto de cat.jpg:
ComumpoucodeImageMagick:
convertcat.jpg-typegrayscale-resize45x32-depth1x.png
torna-se:(ampliadoparavocêverafoto,semtrocadilhos):Agora, isso é exclusivo o suficiente para ser uma assinatura de quadro, mas não é tão único (eu acho) que não podemos obter uma soma de verificação estável
-
Repita para cada quadro. Execute um script assim duas vezes, sobre cada conjunto de quadros.
#!/bin/sh for f in 'ls -1' do: convert $f -type grayscale -resize 45x32 -depth 1 - | cksum >> 1.txt done
Então, você receberá um
2.txt
para o outro arquivo. -
Numere cada arquivo. Você pode ficar chique e fazer videocódigo de timestamps, mas nós vamos use apenas
nl
:$ nl -ba 1.txt > 1n.txt $ nl -ba 2.txt > 2n.txt
-
O grand finale. Use a ferramenta Unix
comm
altamente subestimada para mostrar o que o mesmo entre 1 e 2:$ comm -12 1n.txt 2n.txt
Experimente! Eu aposto que funcionaria! : -)