昨天我用手机拍摄一个场景,但突然应用程序崩溃了,当我尝试打开生成的 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 repo 获取 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 Media Player 现在应该能够播放该文件。但是,它可能报告了错误的长度信息(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
它们链接到一个名为“高清视频修复实用程序”的程序(http://grauonline.de/cmsimple2_6/en/?Solutions:HD_Video_Repair_Utility),比 Treasured 便宜得多(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”文件部分大小),用新大小(“broken”文件部分大小)mdat
替换它mdat
我最终编写了一个简单的程序来实现这一点:https://github.com/golimarrrr/fix-3gp
程序和手动使用十六进制编辑器都应该创建相同的固定文件