A duração do vídeo mostra 0:00 — Como corrigir
O ficheiro tem centenas de megabytes (ou gigabytes). A miniatura de pré-visualização do Finder/Explorer pode até estar a ser mostrada. Mas a duração mostra "0:00" no QuickTime, em Obter informações do Finder, na caixa de diálogo de importação do Premiere e no "ffprobe". O vídeo aparentemente não tem duração.
Isto é quase sempre um problema de metadados, não um problema de conteúdo. Os dados do vídeo estão no ficheiro. A informação que diz a duração do vídeo — é isso que está em falta ou corrompido.
Onde está a duração num MP4/MOV
A duração é armazenada no átomo "mvhd" (cabeçalho do filme) dentro do MOOV e também por faixa em "tkhd" e "mdhd". Todos os três devem coincidir. Se o MOOV estiver totalmente em falta, todos os três estão em falta — a duração é lida como 0 porque não há nada de onde ler.
Três padrões:
Padrão 1: MOOV em falta → a duração mostra 0
A mesma causa de raiz que MOOV atom not found: a gravação foi interrompida antes de o índice ser escrito. O campo de duração não existe em nenhum lugar do ficheiro.
Indício: o ficheiro é grande, mas o "ffprobe" devolve "moov atom not found" e a duração é indicada como 0 ou "N/A".
Este é o caso mais recuperável.
Padrão 2: MOOV existe, mas tem escala de tempo = 0 ou duração = 0
O MOOV está lá; o campo de duração dentro de "mvhd" está definido como zero (ou a escala de tempo é zero, o que faz com que a duração exibida seja zero por divisão). Isto acontece por vezes com MOOV de gravação parcial que não terminaram de preencher a duração antes de a câmara falhar.
Indicador: o "ffprobe" devolve uma contagem de fluxo e informações de codec, mas uma duração de 0 ou N/A. O ficheiro é reproduzido, mas o reprodutor não consegue procurar e não mostra nenhuma barra de progresso.
Muitas vezes corrigido por um re-mux que recalcula a duração a partir dos carimbos de data/hora dos fotogramas:
ffmpeg -i broken.mp4 -c copy fixed.mp4
O FFmpeg recalcula a duração a partir dos carimbos de data/hora ao nível do codec e grava um novo MOOV.
Padrão 3: estouro de inteiro em gravações muito longas
Menos comum. Algumas ferramentas antigas armazenam a duração como um valor de 32 bits com uma escala de tempo alta, que transborda para gravações com mais do que algumas horas. O valor passa para um número negativo ou é lido como zero.
Indício: o ficheiro é de uma gravação de várias horas (câmara de segurança, transmissão ao vivo, evento longo). O re-mux do FFmpeg corrige isto escrevendo uma duração de 64 bits quando necessário.
Como descobrir qual o padrão
ffprobe -v error -show_format broken.mp4
Observe o resultado:
| Valor 'duration' | Padrão |
|---|---|
| 'N/A' e aviso "moov atom not found" | Padrão 1 |
| '0.000000' com informações de fluxo presentes | Padrão 2 |
| Número negativo ou grande absurdo | Padrão 3 |
| Número real, mas errado | Ver abaixo |
Se a duração for real, mas errada — por exemplo, o ficheiro mostra 12 minutos, mas a gravação foi na verdade de 47 minutos — esse é um padrão separado de "duração errada", geralmente uma incompatibilidade de escala de tempo. Re-mux com FFmpeg corrige-o na maioria das vezes.
O que pode tentar fazer por si mesmo
Para o padrão 1: consulte o guia de recuperação MOOV.
Para os padrões 2 e 3, a correção mais simples é o re-mux do FFmpeg:
ffmpeg -i broken.mp4 -c copy out.mp4
Isto reescreve o MOOV com a duração calculada a partir dos carimbos de data/hora dos fotogramas. Normalmente funciona.
Se '-c copy' não corrigir a duração, force a recodificação do fluxo de áudio (que regenera de forma fiável os metadados de carimbo de data/hora):
ffmpeg -i broken.mp4 -c:v copy -c:a aac out.mp4
Se nenhum dos dois funcionar, os dados de carimbo de data/hora no fluxo do codec também estão danificados e está no território de recuperação mais difícil.
Como a nossa recuperação lida com ficheiros de duração zero
- Padrão 1 — síntese MOOV completa a partir de fotogramas. A duração é calculada a partir da contagem e do tempo dos fotogramas detetados em 'mdat'.
- Padrão 2 / 3 — O MOOV é reconstruído do zero (não confiamos no existente). Duração escrita com valores de 64 bits quando a duração da gravação o justifica; escala de tempo escolhida para corresponder à taxa natural do codec.
- 'co64' para ficheiros com mais de 4 GB para que os deslocamentos de blocos não transbordem juntamente com a correção da duração.
O que faz
- Carregue o ficheiro.
- Pré-visualização gratuita de 5 segundos cerca de 1 minuto depois. A duração no ficheiro recuperado mostrará a duração real da gravação.
- Pague apenas se funcionar.
FAQ
O meu ficheiro mostra a duração correta no VLC, mas 0:00 no QuickTime. Leitor permissivo vs. leitor rigoroso. O VLC calcula a duração a partir dos carimbos de data/hora dos fotogramas, mesmo quando o MOOV indica 0; o QuickTime confia no MOOV. O Re-mux corrige ambos.
O ficheiro é de uma câmara de segurança / câmara de tablier — a duração está errada em gravações de várias horas. Padrão provável 3 (excesso de inteiros). O re-mux do FFmpeg com as compilações atuais corrige isto na maioria dos casos.
O meu ficheiro recuperado tem uma duração, mas o reprodutor não procura. Muitas vezes, falta um "stss" (tabela de amostra de sincronização) — o leitor tem duração, mas não tem um mapa de fotogramas-chave para procurar. A recuperação reconstrói 'stss' a partir de posições observadas de IDR / keyframe.
Obtenho duração zero num ficheiro da recuperação de outra ferramenta. A recuperação dessa ferramenta pode ter produzido um MOOV parcial. Carregue o ficheiro original (pré-recuperação) — vamos refazê-lo do zero.
As minhas filmagens estão seguras? Servidor em França, eliminadas automaticamente após 48 horas, nunca usadas para treinar nada ou partilhadas. Política de privacidade.
Relacionado
- Átomo MOOV não encontrado
- Não é possível encontrar dados essenciais
- Como funciona o nosso motor de recuperação
Pré-visualização gratuita · Sem compromisso
Pronto(a) para recuperar o seu vídeo?
Carregue o seu ficheiro. Obtenha uma pré-visualização gratuita de 5 segundos em cerca de um minuto. Pague apenas se a pré-visualização parecer correta.
Carregue o seu vídeo →