Tenho vários vídeos que quero verificar se estão completos ou não. Alguns deles podem ser baixados parcialmente, mas não estão com defeito. Como posso verificar com eficiência se esses vídeos foram completamente baixados?
Se eu tivesse os links, teria verificado o tamanho deles, mas não tenho.
Eu tentei usar ffprobe
e mediainfo
. ffprobe
relata problemas menores em arquivos baixados parcialmente, mas também relata problemas semelhantes com alguns dos arquivos completamente baixados. Devo usar ffmpeg
para ler os arquivos inteiros e comparar a duração dos vídeos para verificar se eles foram baixados? Existe uma solução melhor?
Respostas:
ffmpeg
é uma ferramenta independente de sistema operacional capaz de determinar se um arquivo de vídeo foi completamente baixado. O comando abaixo instruiffmpeg
a ler o vídeo de entrada e codificar o vídeo para nada. Durante o processo de codificação, quaisquer erros, como quadros ausentes, são enviados para test.log.Se um arquivo de vídeo não for totalmente baixado, haverá muitas linhas no arquivo test.log. Por exemplo, .1 MB faltando em um arquivo de vídeo produziu 71 linhas de erros. Se o vídeo estiver totalmente baixado e não tiver sido corrompido, nenhum erro será encontrado e nenhuma linha será impressa no test.log.
Editar
No exemplo que dei acima, testei o arquivo inteiro porque o vídeo de teste que baixei era um torrent, que pode ter pedaços ausentes em todo o arquivo.
Adicionar
-sseof -60
à lista de argumentos verificará os últimos 60 segundos do arquivo, o que é consideravelmente mais rápido.Você precisará de uma versão mais recente do ffmpeg, 2.8 faltando o sinalizador sseof, então usei o 3.0.
fonte
ffmpeg
? Quero dizer, procurar 99% sem processar todo o vídeo e verificar se funciona bem sem erros.-ss
e-sseof
, o ffmpeg lê e processa o arquivo inteiro. Enfim, abrir o vídeo no VLC e clicar perto do final seria mais rápido.MediaInfo exibe uma linha:
se um arquivo não estiver completo conforme o esperado pelas especificações de formato.
Como tecnicamente não há diferença entre um arquivo erroneamente (não atendendo às especificações sobre os limites do arquivo) arquivos compactados e parcialmente baixados, é tecnicamente impossível fazer a diferença entre um arquivo com erros e um arquivo parcialmente baixado.
Outro teste (avançado) pode ser feito, por exemplo, lendo o índice de um arquivo .mp4 e verificando se o deslocamento do arquivo + tamanho do último quadro está dentro do tamanho do arquivo que você obtém, mas não é exatamente o que você está procurando for (se houver metadados, por exemplo, pôsteres no arquivo de origem, no final do arquivo, e o arquivo for truncado imediatamente antes deste poster, o download parcial ainda não será detectado em todos os casos). Não está implementado no MediaInfo, mas você pode adicionar uma solicitação de recurso do MediaInfo .
Em todos os casos, é muito difícil detectar todos os downloads parciais, porque o tamanho total do arquivo não é indicado na maioria dos formatos de arquivo de vídeo, assim você pode ter certeza de que um arquivo está truncado, mas não pode ter certeza de que um arquivo não está truncado. A única maneira de garantir que você baixou o arquivo completo é obter o tamanho do arquivo em outro lugar (e melhor: ter seu hash, por exemplo, MD5).
PS: esta questão não é específica para nenhum sistema operacional.
fonte
-f
(exibição de informações completas). Poderia ajudar na obtenção deTruncated
campo?mediainfo * | grep -E "^(IsTruncated|Complete name)"
onde o nome do arquivo correspondente está sendo exibido diretamente acima da linha "IsTruncated: Yes".Eu tinha um arquivo em que o ffmpeg (v3.1.1) com -sseof -60 não mostrava nenhum aviso e apenas saía sem indicação de que algo estava errado. O Mediainfo também não mostrou que o arquivo foi truncado. Apenas deixar de fora a -sseof -60 reportaria qualquer erro com o ffmpeg. Então, voltei a tentar o ffprobe. Parecia um pouco mais rápido que ffmpeg.
produziu essa saída
Ainda não encontrei nenhum falso positivo (conforme relatado pelo OP).
Edit : ffprobe estava nos meus arquivos de teste cerca de 10% mais rápido que o ffmpeg, mas apenas se você o instruir a usar todos os núcleos com a opção '-threads 0'. Caso contrário, ele usa apenas um núcleo / thread e é mais lento.
fonte