Please enable Javascript to view the contents

如何利用FFmpeg修复损坏的视频文件

最近有个朋友在录屏一个视频会议的时候,电脑突然死机了。等电脑重启后,发现录制的视频文件损坏了。他找了很多软件,都没有找到一个能够修复损坏视频的工具。于是,他找到了我,希望我能帮他修复这个视频文件。他说请我吃饭,顺便带一条龙来服务。我这个人呢特别重视友情,想也没想就答应了。

视频文件损坏的原因

视频文件损坏的原因有很多,比如:

  1. 电脑死机、断电、关机等突然停止录制视频的情况。
  2. 存储介质损坏,比如硬盘坏道、U盘损坏等。
  3. 视频文件本身损坏,比如下载的视频文件损坏、传输过程中损坏等。

本质上,应该就是视频封装出错或者视频流出错。视频封装出错的话,可以尝试重新封装。视频流出错的话,可以尝试重新编码。

视频修复工具

我在网上找了一些视频修复工具,切实可行的有很多。比如:

Kernel Video Repair

Video Repair Tool to Repair Corrupt Single/Multiple Video Files including MP4, MOV, MKV, AVI

这个工具可以修复各种损坏的视频文件,包括手机、相机、摄像机、存储卡、监控摄像头、航拍器、行车记录仪等设备录制的视频文件。

Kernel Video Repair

这个工具操作很简单,上传损坏的视频文件,再上传一个健康的视频文件,点击修复按钮。它会分析视频文件,检测损坏的部分,然后用健康的视频文件修复损坏的部分。修复完成后,免费版只能下载修复后的视频前30秒。付费后可以下载完整的修复后的视频。

支持批量修复,可以一次修复多个视频文件。只需上传一个健康的视频文件,它就可以用这个健康的视频文件修复多个损坏的视频文件。

付费版的价格是:29美元/年,79美元/年(含其它套件功能)。

Stellar Repair for Video

Video Repair Tool to Repair Corrupt MP4, MOV and other Video Files

Stellar Repair for Video 是一款专业的视频修复工具,它可以修复一些比较严重的损坏。

Stellar Repair for Video

Stellar 操作起来也比较简单,操作逻辑和 Kernel Video Repair 类似。

上传视频文件,点击修复按钮。这个时候它会分析视频文件,检测损坏的部分。

然后在高级修复选项中,会让你上传一个健康的视频文件,用来修复损坏的视频文件。

修复完成后,可以预览修复后的视频文件。如果满意,可以保存修复后的视频文件。但是要付费,49刀/年。

免费的视频修复方法

从上面两个工具的操作逻辑来看,视频修复的本质就是用健康的视频文件修复损坏的视频文件。这个操作逻辑很简单,只要有一个健康的视频文件,就可以用它来修复损坏的视频文件。

这个健康的视频,根据原视频的设定重新制作一段sample就可以。

上面两个工具都是收费的,如果不想花钱,可以使用 FFmpeg 来修复损坏的视频文件。

FFmpeg 是一个非常强大的开源多媒体处理库,它可以处理音频、视频和其他类型的多媒体文件。在修复破损视频的过程中,FFmpeg 主要通过以下步骤来工作:

  1. 解析:FFmpeg 首先会解析视频文件,尝试理解其内部结构,包括视频流、音频流、元数据等。

  2. 错误检测:在解析过程中,FFmpeg 会检测到任何可能的错误或损坏。例如,如果某个帧的数据丢失或损坏,FFmpeg 会标记它。

  3. 错误修复:一旦检测到错误,FFmpeg 会尝试修复它。这可能包括重新同步音频和视频流、丢弃损坏的帧、或者尝试从其他帧中恢复丢失的数据。

  4. 重编码:修复错误后,FFmpeg 会重新编码视频,生成一个新的、没有错误的版本。

下面推荐一个利用 FFmpeg 修复损坏视频文件的工具。

recover_mp4.exe

recover_mp4.exe 是一个命令行工具,可以用来修复损坏的 MP4 文件。它是基于 FFmpeg 的,所以需要先安装 FFmpeg(安装:略)。

下载链接:

recover_mp4 Old Versions Downloads - VideoHelp

下载后解压,就两个可执行文件和两个说明文件。

recover_mp4

我们把损坏的视频文件和一个健康的视频文件放到同一个目录下,然后打开命令行工具,切换到这个目录下。

第1步,分析好的视频文件。根据好的视频的比特率,分辨率等信息,生成头部信息。

1
recover_mp4.exe good.mp4 --analyze

步骤1

步骤1完成分析后,会成生 video.hdr 和 audio.hdr 两个文件。

步骤1 结果

并提示下一步操作。

第 2 步:从损坏的文件中恢复数据流,例如

1
recover_mp4.exe bad.mp4 recovered.h264 recovered.aac

步骤2

步骤2完成后,会生成 recovered.h264 和 recovered.aac 两个文件。

步骤2 结果

h264本来是编码格式,当作封装格式时表示的是H.264裸流格式,所谓裸流就是不含封装信息的流,也就是没穿衣服的流。aac等封装格式类似。

第 3 步:通过FFmpeg 从数据流(recovered.h264 和 recovered.aac)中重新创建 MP4/MOV 文件。

1
ffmpeg.exe -r 30 -i recovered.h264 -i recovered.aac -bsf:a aac_adtstoasc -c:v copy -c:a copy recovered.mp4

其中 -r 30 表示帧率,-i recovered.h264-i recovered.aac 表示输入文件,-bsf:a aac_adtstoasc 的作用是将 ADTS 封装的 AAC 音频转换为更适合 MPEG-4 或其他容器的格式。-c:v copy-c:a copy 表示视频和音频不重新编码,直接复制。

步骤3

执行完成后,会生成 recovered.mp4 文件。视频文件修复完成。

分享

码中人
作者
码中人
Web Developer