Bagaimana cara membuka dan memperbaiki file video m4v atau mp4?

59

Kemarin saya sedang syuting adegan dengan telepon saya tetapi tiba-tiba aplikasi crash dan ketika saya mencoba untuk membuka m4v yang dihasilkannya dikatakan rusak.

Saya telah mengunduh file video (sekitar 36MB) di PC saya dan saya mencoba untuk membuka dan memperbaikinya. Bisakah Anda menyarankan saya cara untuk melakukannya?

Info FFMPEG

Seperti yang disarankan dalam komentar saya mencoba memeriksa apa yang dikatakan FFMPEG tentang file itu dengan perintah ini

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

Ini dia hasilnya:

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

Dua baris terbaru ditampilkan dengan warna merah.

Itik jantan
sumber
OS saya adalah Windows 7 tetapi jika perlu saya dapat menyiapkan mesin virtual dengan distro berbasis Linux.
Drake
@ Slhck Terima kasih atas bantuannya, saya melakukan apa yang Anda sarankan dan memperbarui pertanyaan.
Drake
7
Ah, itulah yang saya harapkan. Atom MOOV adalah sepotong data yang diperlukan untuk mengakses stream video mentah di dalam wadah MP4 / M4V. Ada banyak alat "perbaikan video" online, tetapi saya tidak akan memercayai sebagian besar dari mereka. Anda tentu dapat memberi mereka kesempatan - tetapi jangan membayar untuk apa pun. Apa yang tampak menjanjikan adalah Untrunk , yang tampaknya diberi kode untuk masalah yang tepat ini (yaitu atom MOOV yang hilang). Atau AtomicParsley . Semoga berhasil!
slhck
1
Bagaimana cara saya memperbaiki mp4 yang rusak dengan AtomicParsley?
chovy

Jawaban:

60

Dimungkinkan untuk memperbaiki file mp4 atau m4v yang rusak menggunakan Untrunc .

Untuk metode ini, Anda memerlukan file video lain dari perangkat yang sama yang tidak rusak.

Bagaimana cara meng-install untrunc

Untuk kompilasi Anda memerlukan instalasi Linux (idealnya Ubuntu) dan kemampuan dasar untuk menggunakan baris perintah. Anda juga dapat melewati bagian ini dan menjalankannya untruncmelalui Docker (lihat jawaban di bawah ), jika Anda memilikinya.

Inilah yang harus dilakukan:

  1. Instal beberapa perpustakaan prasyarat dengan perintah ini:

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

  2. Dapatkan kode sumber untuk Untrunc dari repo GitHub (pilih satu metode):

    • wget https://github.com/ponchio/untrunc/archive/master.zip && unzip master.zip && cd untrunc-master
    • atau git clone https://github.com/ponchio/untrunc.git && cd untrunc
  3. Kompilasi kode sumber menggunakan perintah ini (semua satu baris):

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

    (Anda dapat mencoba melewatkan langkah ini dan menggunakan executable yang disediakan, tetapi tidak berhasil bagi saya)

  4. Maka Anda benar-benar dapat memperbaiki video. Anda membutuhkan video yang rusak & contoh video yang berfungsi.

Cara memperbaiki video

Cari video lain yang berfungsi, idealnya dari kamera yang sama dan lebih baik setidaknya selama yang rusak; juga resolusi yang sama jika memungkinkan (saya percaya ini dapat membantu meskipun tidak penting).

Jalankan perintah ini di folder tempat Anda membuka ritsleting dan mengkompilasi Untrunc tetapi ganti /path/to/...bit dengan 2 file video Anda:

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

Maka seharusnya churn pergi dan mudah-mudahan menghasilkan file yang dapat diputar bernama broken-video_fixed.m4v

Sudah selesai!

VLC Media Player sekarang seharusnya dapat memutar file. Namun mungkin melaporkan informasi panjang yang salah (Untrunc mencoba menebak / menyelesaikannya, tetapi tidak selalu benar). Untuk memperbaikinya, coba enkode ulang video melalui program lain.

[Terima kasih atas komentar slhck untuk saran untuk mencoba Batalkan Panggilan.]

[Terima kasih banyak kepada Federico Ponchio yang telah mengkode Untrunc sejak awal, untuk menyelesaikan masalah yang sebenarnya ini.]

burung pipit
sumber
Keren, terima kasih telah memberikan instruksi lengkap di sini!
slhck
3
Terima kasih @Alex saya telah memperbarui tautannya. Yang mengherankan Readme di github didasarkan pada jawaban ini!
sparrowt
1
Akan memberikan solusi berbasis windows. < superuser.com/questions/938185/recover-incomplete-video-files > karena saya tidak memiliki akses internet di distro linux saya.
Rogue
2
FWIW ini tidak menghasilkan video yang dapat diputar untuk saya - tetapi menjalankan recover_mp4_to_h264 melalui anggur bekerja dengan baik.
The Compiler
1
Untrunc bekerja untuk saya, tetapi saya harus meletakkan kedua file video di subdirektori dari folder .untrunc tersembunyi bernama untrunc-master. Kemudian, jalankan: ./untrunc goodfile.mp4 badfile.mp4 Butuh sekitar 3 menit untuk file 2gb dan saya hanya perlu menyinkronkan ulang audio. Yang lainnya baik-baik saja.
user8547
8

Jika orang lain menemukan ini, saya juga mencoba sparrowt aplikasi yang sedang dibicarakan, tetapi tidak berhasil bagi saya (lihat beberapa laporan bug yang saya buat di repositori pengembang). Mungkin ini karena itu bukan file mp4 tetapi file MOV ...

Apa yang membantu saya adalah posting ini: http://muzso.hu/2012/11/14/how-to-fix-a-broken-mp4-mov-video-ffmpeg-reports-moov-atom-not-found

Mereka menautkan ke program yang disebut "Utilitas Perbaikan Video HD" ( http://grauonline.de/cmsimple2_6/en/?Solutions:HD_Video_Repair_Utility ), yang jauh lebih murah daripada Treasured ( http://aeroquartet.com/movierepair/repair ) . Mereka bahkan menunjukkan, bahwa ada versi sebelumnya (versi 1.5) yang tidak memerlukan biaya apa pun ( http://nagasoft.cn/download/videorepair1.5.zip )!

Saya mencoba memperbaiki file menggunakan versi 1.5 dan membuatnya sebagian berfungsi. Setelah pengkodean ulang dengan ffmpeg (ada beberapa kesalahan di sana), saya menyadari, bahwa sebagian dari audio sudah tidak ada. Dalam log (dengan senang hati Video Repair Utility memiliki beberapa), tidak ada lagi penyebutan audio setelah waktu tertentu. Saya akan menganggapnya apa adanya ...

SimonSimCity
sumber
3
DROPBOX url sudah mati. menemukan alternatif: nagasoft.cn/download/videorepair1.5.zip
T.Todua
2
@ T.Todua, terima kasih telah memberi tahu. Saya telah mengganti tautan-dropbox dengan tautan yang Anda berikan.
SimonSimCity
8

Anda dapat menginstal docker(tersedia untuk semua sistem operasi utama) dan menjalankan:

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

Sintaksnya adalah untuk Bash di Linux atau macOS. Di sini, GOOD-reference-file.MP4dan BAD-corrupt-file.md5keduanya harus berada di direktori Anda saat ini, dan direktori tersebut akan dipasang ke /voldalam wadah Docker.

Baca komentar lain di sekitar untuk penjelasan lebih mendalam.

Ini yang tercepat bagiku!

abourget
sumber
Terima kasih @slhck, Dockerfiletersedia di sini jika ada yang ingin melihat apa yang akan dijalankan sebelum menjalankannya di komputer Anda: github.com/synctree/docker-untrunc Ada juga Dockerfiledi untruncrepositori yang sebenarnya sekarang - saya belum menguji atau membandingkan secara terperinci tetapi menyebutkannya di sini untuk kelengkapan: github.com/ponchio/untrunc/blob/master/Dockerfile
sparrowt
7

@sparrowt Instruksi Anda saat ini tidak berfungsi pada instalasi Ubuntu 16.10 saya yang terbaru. Saya mendapat kesalahan berikut saat mengompilasi yang tidak dibuka:

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();

Seperti yang dijelaskan dalam repositori untrunc , Anda mungkin perlu mengunduh libav secara terpisah daripada menggunakan versi di repositori Ubuntu. Kode berikut ini berfungsi untuk saya:

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

Ini membuat file bernama broken-video_fixed.mp4 yang berfungsi untuk saya. Terima kasih banyak telah memulai utas ini.

freeseek
sumber
1
Terima kasih! Pada baris kompilasi untrunc saya memiliki beberapa kesalahan di sepanjang baris "referensi tidak terdefinisi untuk` BZ2_bzDecompressInit '", saya harus menambahkan -lbz2
Andrew Smart
Itu tidak dapat menangani file besar. Hanya menyerah.
Ken Sharp
Apakah libav Anda bertentangan dengan h264dec.h? karena track.cppsedang mencoba untuk memasukkannya dan saya tidak dapat menemukannya di mana pun: /
x29a
Ketergantungan itu ditambahkan dengan commit github.com/ponchio/untrunc/commit/… pada 10 Oktober 2017. Saya percaya sekarang Anda harus donwload libav-12.2 daripada libav-0.8.7
freeseek
Akhirnya berhasil ini di Ubuntu 14.04.5 LTS. Harus menjalankan sudo apt-get install yasm, sudo apt-get install libbz2-devdan, untuk mengatasi referensi yang tidak terdefinisi ke 'clock_gettime', tambahkan -lrtke akhir g++baris perintah (lihat stackoverflow.com/a/2418175/550712 ). Itu dikonversi sekitar 2/3 dari video saya.
Mark Berry
2

Jika untrunc tidak mendukung codec di dalam file Anda, Anda dapat mencoba memperbaikinya dengan hex editor:

  1. dapatkan file lain dengan format yang sama, saya punya yang lebih besar tapi mungkin panjangnya bisa
  2. buka kedua file dalam hex editor
  3. ganti mdatbagian di file "ok" dengan mdatbagian di file "broken", tanpa header (mis. salin hanya byte setelah 'mdat')
  4. itu mungkin sudah akan bekerja seperti itu, jika tidak, 4 byte sebelum 'mdat' menentukan ukuran mdatbagian, nilai saat ini akan menjadi ukuran lama ("ok" mdatukuran bagian file ), ganti dengan ukuran baru (" rusak " mdatukuran bagian file )

Saya akhirnya coding program sederhana untuk melakukannya: https://github.com/golimarrrr/fix-3gp

Baik program dan dengan tangan menggunakan hex editor harus membuat file tetap yang sama

golimar
sumber
-3

Sudahkah Anda mencoba membuka file dengan VLC Player ? Biasanya cukup baik memperbaiki file yang rusak.

Carlos Manta
sumber
8
Saya pikir ini mungkin berlaku untuk file AVI di mana indeks dapat dibangun ke dalam memori, tetapi file MP4 kesalahan "moov atom tidak ditemukan" selama pemrosesan ffmpeg tidak memainkan apa pun di VLC.
Minggu
2
VLC gagal memainkannya juga, dalam kasus saya (file .mov)
rogerdpack