Estou tentando usar ferramentas de linha de comando para corresponder ao valor de hash que o Plex.app calcula para arquivos de filme (aparentemente, é um hash SHA1 do primeiro bloco (4k) de um filme em vez do filme inteiro).
Eu tentei usar o seguinte para obter um hash usando ferramentas de linha de comando, mas sem surpresa os dois hashes não correspondem.
file="/path/to/mp4"
dd bs=4k count=1 if="$file" | openssl sha1
1+0 records in
1+0 records out
4096 bytes transferred in 0.000012 secs (341333333 bytes/sec)
7785d5d6d611a27ac03dfdff8a2c89e9ffeffa3b
file="/path/to/mp4"
head -c 4096< "$file" | openssl sha1
7785d5d6d611a27ac03dfdff8a2c89e9ffeffa3b
Usando ffprobe
percebi que a maioria dos dados no início desse arquivo mp4 são as configurações de codificação e não o fluxo de vídeo. Me fez pensar que qualquer processo que o Plex use provavelmente evita as configurações de codificação do arquivo, pois elas podem ser exatamente as mesmas.
Tendo em mente que pode haver muitas razões pelas quais os valores não correspondem ao que seriam as ferramentas adequadas para tentar duplicar seu cálculo de hash.
Você pode fazer isso diretamente usando o ffmpeg.
ffmpeg -hide_banner -v 0 -f data -start 0 -end 4096 -i subfile:input.mp4 -map 0 -f hash -hash sha160 -
Isso lerá a entrada de byte
0
para byte antes do deslocamento4096
e calculará um hash SHA-1 (160b).O resultado é impresso como
Observe que um MP4 nem sempre tem o cabeçalho na frente. Além disso, o cabeçalho contém muito mais do que configurações de codificação de vídeo.
Para fazer isso, você precisa descobrir como exatamente o aplicativo Plex calcula esse hash. Você pode encontrar a fonte do Plex no Github .
Para atender melhor à sua necessidade real, o que você está tentando alcançar no final? Talvez haja alguma maneira mais fácil de chegar lá.