FixMyVideos

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 presentesPadrão 2
Número negativo ou grande absurdoPadrão 3
Número real, mas erradoVer 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

  1. Carregue o ficheiro.
  2. 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.
  3. 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

Carregue o seu ficheiro →

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 →