
昨天我正在用手機拍攝一個場景,但突然應用程式崩潰了,當我嘗試打開生成的 m4v 時,它說它已損壞。
我已將視訊檔案(大約 36MB)下載到我的電腦上,我正在嘗試開啟並修復它。你能建議我一種方法嗎?
FFMPEG資訊
正如評論中所建議的,我嘗試使用此命令檢查 FFMPEG 對該文件的說法
ffmpeg.exe -i VID_20120425_144739.m4v -c:v copy -c:a copy out.mp4 2> log.txt
這是結果:
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
最近兩行顯示為紅色。
答案1
可以使用以下命令修復損壞的 mp4 或 m4v 文件未截斷。
對於此方法,您需要來自同一設備的另一個視訊文件不是破碎的。
如何安裝untrunc
為了進行編譯,您需要安裝 Linux(最好是 Ubuntu)和使用命令列的基本能力。您也可以跳過這一部分並untrunc
透過 Docker 運行(請參閱下面的答案),如果你有的話。
這是要做的:
使用以下命令安裝一些必備庫:
sudo apt-get install libavformat-dev libavcodec-dev libavutil-dev
從 GitHub 儲存庫取得 Untrunc 的原始碼(選擇一種方法):
wget https://github.com/ponchio/untrunc/archive/master.zip && unzip master.zip && cd untrunc-master
- 或者
git clone https://github.com/ponchio/untrunc.git && cd untrunc
使用以下命令編譯原始碼(全部一行):
g++ -o untrunc file.cpp main.cpp track.cpp atom.cpp mp4.cpp -L/usr/local/lib -lavformat -lavcodec -lavutil
(您可以嘗試跳過此步驟並使用現成的可執行文件,但它對我不起作用)
然後你就可以實際修復影片了。您需要損壞的影片和範例工作影片。
如何修復影片
找到另一個可用的視頻,最好來自同一台攝影機,並且最好至少與損壞的視頻一樣長;如果可能的話,也可以採用相同的解決方案(我相信這可能會有所幫助,但不是必需的)。
在解壓縮並編譯 Untrunc 的資料夾中執行此命令,但/path/to/...
用 2 個視訊檔案取代這些位元:
./untrunc /path/to/working-video.m4v /path/to/broken-video.m4v
然後它應該開始工作並希望生成一個名為的可播放文件broken-video_fixed.m4v
就這樣你就完成了!
VLC 媒體播放器現在應該能夠播放該檔案。然而,它可能會報告錯誤的長度資訊(Untrunc 嘗試猜測/解決這個問題,但並不總是正確)。要解決此問題,請嘗試透過其他程式重新編碼影片。
[感謝 slhck 的評論提出嘗試 Untrunc 的建議。
[非常感謝 Federico Ponchio 首先編寫 Untrunc 來解決這個問題。
答案2
您可以安裝docker
(適用於所有主要作業系統)並執行:
docker run -v $(pwd):/vol -it synctree/untrunc /vol/GOOD-reference-file.MP4 /vol/BAD-corrupt-file.mdt
該語法適用於 Linux 或 macOS 下的 Bash。這裡,GOOD-reference-file.MP4
和BAD-corrupt-file.md5
必須都在目前目錄中,並且該目錄將掛載到/vol
Docker 容器中。
閱讀周圍的其他評論以獲得更深入的解釋。
這對我來說是最快的!
答案3
如果其他人偶然發現了這一點,我也嘗試了 sparrowt 正在談論的應用程序,但它對我不起作用(請參閱我在開發人員存儲庫中創建的一些錯誤報告)。也許這是因為它不是 mp4 檔案而是 MOV 檔案...
對我有幫助的是這篇文章:http://muzso.hu/2012/11/14/how-to-fix-a-broken-mp4-mov-video-ffmpeg-reports-moov-atom-not-found
它們連結到一個名為「HD Video Repair Utility」的程式(http://grauonline.de/cmsimple2_6/en/?解決方案:HD_Video_Repair_Utility),比寶藏便宜很多(http://aeroquartet.com/movierepair/repair)。他們甚至指出,它有一個早期版本(1.5 版),不需要任何成本(http://nagasoft.cn/download/videorepair1.5.zip)!
我嘗試使用 1.5 版本修復該文件並使其部分正常工作。使用 ffmpeg 重新編碼後(出現一些錯誤),我意識到音訊的一部分消失了。在日誌中(很高興視頻修復實用程式有一些),在給定時間之後沒有進一步提及音訊。我會照原樣接受...
答案4
如果 untrunc 不支援檔案中的編解碼器,您可以嘗試使用十六進位編輯器修復它:
- 取得另一個具有相同格式的文件,我有一個更大的文件,但可能任何長度都可以
- 在十六進制編輯器中開啟這兩個文件
mdat
將“ok”檔案中的部分替換為mdat
“broken”檔案中的部分,不含標題(即僅複製“mdat”之後的位元組)- 它可能已經像這樣工作了,如果沒有,“mdat”之前的 4 個位元組指定該
mdat
部分的大小,當前值將是舊大小(“ok”檔案mdat
部分大小),將其替換為新大小(“損壞的”文件mdat
部分大小)
我最終編寫了一個簡單的程式來做到這一點:https://github.com/golimarrrr/fix-3gp
程式和手動使用十六進位編輯器都應該建立相同的固定文件