Como abrir e reparar um arquivo de vídeo m4v ou mp4?

47

Ontem eu estava filmando uma cena com meu celular, mas de repente o aplicativo travou e quando eu tento abrir o m4v gerado ele diz que está corrompido.

Eu baixei os arquivos de vídeo (cerca de 36MB) no meu PC e estou tentando abrir e reparar. Você pode me sugerir uma maneira de fazer isso?

Informações do FFMPEG

Como sugerido nos comentários, tento verificar o que o FFMPEG me diz sobre esse arquivo com este comando

ffmpeg.exe -i VID_20120425_144739.m4v -c:v copy -c:a copy out.mp4 2> log.txt

Aqui está o resultado:

ffmpeg version N-40126-ga4b58fd Copyright (c) 2000-2012 the FFmpeg developers
  built on Apr 26 2012 03:29:50 with gcc 4.6.3
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-runtime-cpudetect --enable-avisynth --enable-bzlib --enable-frei0r --enable-libass --enable-libcelt --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-libnut --enable-libopenjpeg --enable-librtmp --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libutvideo --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib
  libavutil      51. 47.100 / 51. 47.100
  libavcodec     54. 15.100 / 54. 15.100
  libavformat    54.  3.100 / 54.  3.100
  libavdevice    53.  4.100 / 53.  4.100
  libavfilter     2. 72.100 /  2. 72.100
  libswscale      2.  1.100 /  2.  1.100
  libswresample   0. 11.100 /  0. 11.100
  libpostproc    52.  0.100 / 52.  0.100
[mov,mp4,m4a,3gp,3g2,mj2 @ 003fc940] moov atom not found
VID_20120425_144739.m4v: Invalid data found when processing input

As últimas duas linhas são exibidas em vermelho.

    
por Drake 26.04.2012 / 14:13

6 respostas

49

É possível reparar o arquivo mp4 ou m4v quebrado usando Untrunc .

Para este método, você precisa:

  • outro arquivo de vídeo que não está quebrado

  • uma instalação linux (eu usei o Ubuntu 12.04) e habilidade básica de usar uma linha de comando.

Isso é o que fazer:

  1. Instale algumas bibliotecas de pré-requisitos com este comando:

    sudo apt-get install libavformat-dev libavcodec-dev libavutil-dev

  2. Faça o download do código-fonte do Untrunc no repositório do github:

    wget https://github.com/ponchio/untrunc/archive/master.zip

  3. Descompacte o código-fonte:

    unzip master.zip

  4. Entre no diretório em que foi descompactado:

    cd untrunc-master

  5. Compile o código-fonte usando este comando (toda a linha):

    g++ -o untrunc file.cpp main.cpp track.cpp atom.cpp mp4.cpp -L/usr/local/lib -lavformat -lavcodec -lavutil

    (você pode tentar pular esta etapa e usar o executável fornecido, mas não funcionou para mim)

  6. Então você pode consertar o vídeo. Você precisa do vídeo quebrado e de um exemplo de vídeo em funcionamento.

    Idealmente, o vídeo deve ser da mesma câmera & tenho a mesma resolução (a minha era, mas poderia funcionar sem). Além disso, se for pelo menos tão longo quanto o quebrado (de preferência aproximadamente o mesmo) isso pode ajudar.

    Execute este comando na pasta onde você descompactou e compilou o Untrunc, mas substitua os bits / path / to / ... pelos seus 2 arquivos de vídeo:

    ./untrunc /path/to/working-video.m4v /path/to/broken-video.m4v

    Em seguida, ele deve se desfazer e produzir um arquivo reproduzível chamado broken-video_fixed.m4v

É isso mesmo que você terminou!

O VLC Media Player agora deve poder reproduzir o arquivo. No entanto, ele pode estar relatando informações incorretas sobre o tamanho (o Untrunc tenta adivinhar isso, mas nem sempre acerta). Para corrigir isso, tente recodificar o vídeo por meio de outro programa.

[Graças ao comentário do slhck sobre a sugestão de experimentar o Untrunc.]

[Muito obrigado a Federico Ponchio por codificar Untrunc em primeiro lugar, para resolver este problema exato.]

    
por 16.05.2013 / 18:42
6

Se alguém se deparar com isso, eu também tentei o aplicativo que o sparrowt estava falando, mas não funcionou para mim (veja alguns relatórios de bugs que eu criei no repositório de desenvolvedores). Talvez isso tenha sido porque não era um arquivo mp4, mas um arquivo MOV ...

O que me ajudou foi este post: moov-atom-not-found "> link

Eles se conectam a um programa chamado "HD Video Repair Utility" ( link ), que é muito mais barato do que Treasured ( link ). Eles até apontaram que havia uma versão anterior (versão 1.5) que não custava nada ( link )!

Eu tentei reparar o arquivo usando a versão 1.5 e o trabalhei parcialmente. Depois de re-codificar com o ffmpeg (percebi alguns erros lá), percebi que uma parte do áudio tinha desaparecido. Nos logs (de bom grado o Video Repair Utility tem alguns), não houve mais menção de áudio após um determinado tempo. Eu vou levar como está ...

    
por 27.09.2013 / 14:10
6

@sparrowt Suas instruções atuais não funcionaram na minha instalação recente do Ubuntu 16.10. Eu recebi o seguinte erro enquanto compilava o untrunc:

track.cpp: In member function ‘int Codec::getLength(unsigned char*, int)’:
track.cpp:204:40: error: ‘avcodec_alloc_frame’ was not declared in this scope
   AVFrame *frame = avcodec_alloc_frame();

Como explicado no repositório untrunc , talvez seja necessário fazer o download da libav separadamente, em vez de usar a versão no repositório do Ubuntu. O código a seguir funcionou para mim:

sudo apt-get install unzip yasm g++ zlib1g-dev libbz2-dev
cd /tmp/
wget https://github.com/ponchio/untrunc/archive/master.zip
unzip master.zip
cd untrunc-master
wget http://libav.org/releases/libav-12.2.tar.xz
tar xvf libav-12.2.tar.xz
cd libav-12.2
./configure
make
cd ..
g++ -o untrunc file.cpp main.cpp track.cpp atom.cpp mp4.cpp -I./libav-12.2 -L./libav-12.2/libavformat -lavformat -L./libav-12.2/libavcodec -lavcodec -L./libav-12.2/libavresample -lavresample -L./libav-12.2/libavutil -lavutil -lpthread -lz -lbz2
./untrunc /path/to/working-video.mp4 /path/to/broken-video.mp4

Isso criou um arquivo chamado broken-video_fixed.mp4 que funcionou para mim. Muito obrigado por iniciar este tópico.

    
por 05.02.2017 / 17:59
3

Se você tem uma distribuição recente do Ubuntu, você pode instalar docker e executar:

docker run -v 'pwd':/vol -it synctree/untrunc /vol/GOOD-reference-file.MP4 /vol/BAD-corrupt-file.mdt

Leia os outros comentários para obter explicações mais detalhadas.

Este foi o mais rápido para mim!

    
por 28.09.2017 / 19:22
0

Caso o untrunc não suporte o codec dentro do seu arquivo, você pode tentar corrigi-lo com um editor hexadecimal:

  1. obter outro arquivo com o mesmo formato, obtive um arquivo maior, mas provavelmente qualquer tamanho funcionará
  2. abra os dois arquivos em um editor hexadecimal
  3. substitua a seção mdat no arquivo "ok" pela seção mdat no arquivo "quebrado", sem o cabeçalho (ou seja, copie somente os bytes depois de 'mdat')
  4. provavelmente já funcionaria assim, se não, os 4 bytes antes de 'mdat' especificam o tamanho da seção mdat , o valor atual será o tamanho antigo (arquivo "ok" mdat tamanho da seção) , substitua-o pelo novo tamanho (arquivo "quebrado" mdat tamanho da seção)

Acabei de codificar um programa simples para isso: link

Tanto o programa quanto manualmente, usando o editor hexadecimal, devem criar o mesmo arquivo fixo

    
por 13.07.2018 / 15:55
-2

Você já tentou abrir o arquivo com o VLC Player ? Geralmente é muito bom em reparar arquivos danificados.

    
por 27.03.2013 / 00:13