Bir m4v veya mp4 video dosyasını açmak ve onarmak nasıl?


59

Dün telefonumla bir sahneyi çekiyordum ama aniden uygulama çöktü ve m4v'yi açmaya çalıştığımda bunun bozuk olduğunu söylüyor.

Bilgisayarıma video dosyalarını (yaklaşık 36 MB) indirdim ve açmaya ve tamir etmeye çalışıyorum. Bana bunu yapmanın bir yolunu önerebilir misin?

FFMPEG bilgisi

Yorumlarda önerildiği gibi, FFMPEG'in bu komutla bu dosya hakkında ne söylediğini kontrol etmeye çalışıyorum

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

İşte sonuç:

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

En son iki satır kırmızı renkte gösterilir.


İşletim sistemim Windows 7'dir, ancak gerekirse Linux tabanlı dağıtım ile sanal bir makine hazırlayabilirim.
Drake

@slhck Yardımlarınız için teşekkürler, önerdiğiniz şeyi yaptım ve soruyu güncelledim.
Drake

7
Ah, beklediğim buydu. MOOV atomu, MP4 / M4V kabının içindeki ham video akışlarına erişmek için gereken bir veri parçasıdır. Çevrimiçi çok sayıda "video onarımı" aracı var, ancak çoğu kişiye güvenmezdim. Kesinlikle onlara bir şans verebilirsiniz - sadece hiçbir şey için ödeme yapmayın. Umut verici görünen şey , bu kesin problem için (yani eksik bir MOOV atomu) kodlanmış gibi görünen Untrunk . Veya AtomicParsley . İyi şanslar!
slhck

1
Bozuk bir mp4'ü AtomicParsley ile nasıl düzeltirim?
Chovy

Yanıtlar:


60

Untrunc kullanarak bozuk mp4 veya m4v dosyasını onarmak mümkündür .

Bu yöntem için aynı cihazdan başka bir video dosyası gerek olmadığı kırık.

Nasıl kurulur untrunc

Derleme için bir Linux kurulumuna (ideal olarak Ubuntu) ve komut satırını kullanabilmeniz için temel bir donanıma ihtiyacınız var. Ayrıca, bu bölümü atlayıp untruncDocker üzerinden çalıştırabilirsiniz ( aşağıdaki cevaba bakınız ).

Bu ne yapmalı:

  1. Bu komutla önkoşul bazı kütüphaneler kurun:

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

  2. GitHub deposundan Untrunc kaynak kodunu alın (bir yöntem seçin):

    • wget https://github.com/ponchio/untrunc/archive/master.zip && unzip master.zip && cd untrunc-master
    • veya git clone https://github.com/ponchio/untrunc.git && cd untrunc
  3. Bu komutu kullanarak kaynak kodunu derleyin (tümü bir satır):

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

    (bu adımı atlamayı ve sağlanan hazır yürütülebilir dosyayı kullanmayı deneyebilirsiniz, ancak benim için işe yaramadı)

  4. O zaman aslında videoyu düzeltebilirsiniz. Hem kırık videoya hem de örnek çalışan bir videoya ihtiyacınız var.

Video nasıl düzeltilir?

İdeal olarak aynı kameradan ve tercihen en az kırıldığı sürece başka bir çalışma videosu bulun; Ayrıca, eğer mümkünse aynı karar (bunun gerekli olmasına rağmen yardımcı olacağına inanıyorum).

Bu komutu çözdüğünüz ve açtığınız klasörde Untrunc çalıştırın, ancak /path/to/...bitleri video dosyalarınızla değiştirin:

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

O zaman çalkalanmalı ve umarım denilen çalınabilir bir dosya üretmelidir. broken-video_fixed.m4v

İşte bu işin bitti!

VLC Media Player şimdi dosyayı oynatabiliyor olmalıdır. Ancak yanlış uzunluk bilgisini rapor ediyor olabilir (Untrunc bunu tahmin etmeye / denemeye çalışır, ancak her zaman doğru yapmaz). Bunu düzeltmek için videoyu başka bir program aracılığıyla yeniden kodlamayı deneyin.

[Slhck'ın Untrunc'u denemek için önerisine yaptığı yorum için teşekkürler.]

[Bu sorunu çözmek için öncelikle Untrunc'u kodlayan Federico Ponchio'ya çok teşekkürler.]


Harika, burada tüm talimatları sağladığınız için teşekkürler!
slhck

3
Thanks @Alex Bağlantıyı güncelledim. Eğlenceli bir şekilde github'daki Benioku yazısı bu cevaba dayanıyor!
Serçe

1
Windows tabanlı bir çözüm verirdi. Linux dağıtımlarımda internet erişimim olmadığı için < superuser.com/questions/938185/recover-incomplete-video-files >.
RogUE

2
FWIW bu benim için herhangi bir oynatılabilir video üretmedi - ancak şarap yoluyla recover_mp4_to_h264 kullanıyordum .
Derleyici

1
Untrunc benim için çalıştı, ancak her iki video dosyasını da isimli gizli .untrunc klasörünün alt dizinine koymak zorunda kaldım untrunc-master. Sonra çalıştırın: ./untrunc goodfile.mp4 badfile.mp4 2GB dosya için yaklaşık 3 dakika sürdü ve sadece sesi yeniden senkronize etmek zorunda kaldım. Her şey yolunda idi.
user8547

8

Başkası bunun üzerine tökezlerse, uygulama serisinin bahsettiğini de denedim, ama benim için işe yaramadı (geliştiriciler deposunda oluşturduğum bazı hata raporlarına bakın). Belki de bunun nedeni bir mp4 dosyası değil, bir MOV dosyası olmasıydı ...

Bana yardımcı olan bu yazıydı: http://muzso.hu/2012/11/14/how-to-fix-a-broken-mp4-mov-video-ffmpeg-reports-moov-atom-not-found

Treasure'dan ( http://aeroquartet.com/movierepair/repair ) çok daha ucuz olan "HD Video Onarım Yardımcı Programı" ( http://grauonline.de/cmsimple2_6/en/?Solutions:HD_Video_Repair_Utility ) adlı bir programa bağlanırlar . Hatta daha önce hiçbir ücret ödemeyen eski bir sürümünün (sürüm 1.5) olduğunu da belirtti ( http://nagasoft.cn/download/videorepair1.5.zip )!

1.5 sürümünü kullanarak dosyayı onarmayı denedim ve kısmen çalışmasını sağladım. Ffmpeg ile yeniden kodladıktan sonra (bazı hatalar var), sesin bir kısmının gittiğini fark ettim. Günlüklerde (memnuniyetle Video Onarım Yardımcı Programının bir kısmı vardır), belirli bir süre sonra sesden daha fazla söz edilmedi. Olduğu gibi alacağım ...


3
DROPBOX url öldü. alternatif bulundu: nagasoft.cn/download/videorepair1.5.zip
T.Todua

2
@ T.Todua, bildirdiğiniz için teşekkürler. Dropbox-linkini verdiğiniz link ile değiştirdim.
SimonSimCity

8

docker(Tüm büyük işletim sistemlerinde kullanılabilir) yükleyebilir ve çalıştırabilirsiniz:

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

Sözdizimi, Linux ya da macOS altındaki Bash içindir. Burada GOOD-reference-file.MP4ve BAD-corrupt-file.md5her iki geçerli dizinde olmalıdır ve dizin monte edilecektir /volDocker kapta.

Daha ayrıntılı açıklama için etrafındaki diğer yorumları okuyun.

Bu benim için en hızlıydı!


Thanks @slhck, Dockerfileherkes bilgisayarınızda çalıştırmadan önce neyin işe yarayacağını görmek isterse burada mevcuttur: github.com/synctree/docker-untrunc Şu anda Dockerfilegerçek untruncdepoda da bir tane var - Test etmedim veya karşılaştırılmadım : detaylı olarak onları tamamlama amacıyla burada söz github.com/ponchio/untrunc/blob/master/Dockerfile
sparrowt

7

@sparrowt Geçerli talimatlarınız son Ubuntu 16.10 kurulumumda çalışmadı. Untrunc derlerken aşağıdaki hatayı aldım:

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

Unrunc deposunda açıklandığı gibi , Ubuntu deposundaki sürümü kullanmak yerine libav'ı ayrı olarak indirmeniz gerekebilir. Aşağıdaki kod benim için çalıştı:

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

Bu benim için çalışan broken-video_fixed.mp4 adlı bir dosya oluşturdu. Bu konuyu başlattığın için çok teşekkür ederim.


1
Teşekkür ederim! Unrunc derleme satırında "BZ2_bzDecompressInit" tanımsız başvurusu "satırları boyunca birkaç hatam vardı, -lbz2
Andrew Smart

Büyük dosyaları kaldıramaz. Sadece pes ediyorum.
Ken Sharp,

Libav'ınız a içerir h264dec.hmi? çünkü track.cppdahil etmeye çalışıyor ve hiçbir yerde bulamıyorum: /
x29a

Bu bağımlılık işlemek ile eklenmiştir github.com/ponchio/untrunc/commit/... 2017 Sana libav-12.2 ziyade İNDİRMEMENİZİ zorunda şimdi inan 10 Ekim'de libav-0.8.7
freeseek

Sonunda Ubuntu 14.04.5 LTS'de çalışacak. Çalıştırmak zorunda sudo apt-get install yasm, sudo apt-get install libbz2-devekleyin ve 'clock_gettime' için tanımlanmamış bir referans üstesinden gelmek için -lrtsonuna g++(bakınız komut hattı stackoverflow.com/a/2418175/550712 ). Videomun yaklaşık 2 / 3'ünü dönüştürdü.
Mark Berry,

2

Untrunc, dosyanızın içindeki codec bileşenini desteklemiyorsa, onu bir hex editörü ile düzeltmeyi deneyebilirsiniz:

  1. aynı formatta başka bir dosya al, daha büyük bir tane aldım ancak muhtemelen herhangi bir uzunluk işe yarayacak
  2. iki dosyayı da bir hex editörde aç
  3. yerine mdatile "Tamam" dosyasında bölümü mdat(yani 'mdat' sonra sadece bayt kopya) başlığı olmadan, "kırık" dosyasında bölümünde
  4. Muhtemelen zaten çalışacaktı, eğer değilse, 'mdat' öncesi 4 bayt, mdatbölümün boyutunu belirtiyorsa , geçerli değer eski boyutta olacaktır ("tamam" dosya mdatbölümü boyutu), yerine yeni boyut (" bozuk "dosya mdatbölümü boyutu)

Bunu yapmak için basit bir program kodlama bitti: https://github.com/golimarrrr/fix-3gp

Hem program hem de hex editörü kullanarak aynı sabit dosyayı oluşturmalıdır


-3

Dosyayı VLC Player ile açmayı denediniz mi? Hasar görmüş dosyaların onarımında genellikle oldukça iyidir.


8
Bunun endeksin belleğe yerleştirilebileceği AVI dosyaları için geçerli olabileceğini düşünüyorum, ancak MP4 dosyası ffmpeg işlemi sırasında "moov atomu bulunamadı" hatasıyla VLC'de hiçbir şey oynamıyor.
Paz

2
VLC de oynamıyor, benim durumumda (.mov dosyası)
rogerdpack
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.