如何打开和修复 m4v 或 mp4 视频文件?

如何打开和修复 m4v 或 mp4 视频文件?

昨天我用手机拍摄一个场景,但突然应用程序崩溃了,当我尝试打开生成的 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 运行(请参阅下面的答案),如果你有的话。

以下是具体做法:

  1. 使用此命令安装一些先决条件库:

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

  2. 从 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
  3. 使用此命令(一行)编译源代码:

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

    (您可以尝试跳过此步骤并使用现成的可执行文件,但对我来说不起作用)

  4. 然后你就可以真正修复视频了。你需要损坏的视频和示例工作视频。

如何修复视频

找到另一个可以正常工作的视频,最好是来自同一台摄像机的视频,并且视频长度至少要与坏掉的视频一样长;如果可能的话,分辨率也要相同(我相信这可能有帮助,但并不是必需的)。

在解压并编译 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.MP4BAD-corrupt-file.md5必须都位于当前目录中,并且目录将挂载到/volDocker 容器中。

阅读其他评论以获得更深入的解释。

这对我来说是最快的!

答案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/?Solu​​tions:HD_Video_Repair_Utility),比 Treasured 便宜得多(http://aeroquartet.com/movierepair/repair)。他们甚至指出,有一个早期版本(1.5 版)是免费的(http://nagasoft.cn/download/videorepair1.5.zip)!

我尝试使用 1.5 版修复文件,部分恢复了工作。使用 ffmpeg 重新编码后(出现一些错误),我意识到部分音频消失了。在日志中(幸好视频修复实用程序有一些),在给定时间之后没有进一步提及音频。我会照原样处理...

答案4

如果 untrunc 不支持文件中的编解码器,您可以尝试使用十六进制编辑器修复它:

  1. 获取另一个具有相同格式的文件,我得到了一个更大的文件,但可能任何长度都可以
  2. 在十六进制编辑器中打开两个文件
  3. mdat将“ok”文件中的部分替换为mdat“broken”文件中的部分,不带标题(即仅复制“mdat”之后的字节)
  4. 它可能已经这样工作了,如果不是,'mdat' 之前的 4 个字节指定了mdat部分的大小,当前值将是旧的大小(“ok”文件部分大小),用新大小(“broken”文件部分大小)mdat替换它mdat

我最终编写了一个简单的程序来实现这一点:https://github.com/golimarrrr/fix-3gp

程序和手动使用十六进制编辑器都应该创建相同的固定文件

相关内容