Loading... # ADAS实车测试录屏损坏修复实践 ## 一、背景 实车测试过程中,我们通常需要使用录屏软件记录测试过程,以便后续回放分析。在一次测试中电脑意外死机,导致录屏中断,录屏生成的MP4文件损坏无法正常播放。 ## 二、解决思路 首先需要了解录屏软件写入MP4的过程怎样的,通过搜索了解,可以简单分为三个步骤: 1. **初始化** :创建文件,写入固定的文件头(`ftyp`),并提前预留索引(`moov`)的空间。 2. **录制中** :将采集到的音视频帧数据,追加写入到数据区(`mdat`)。这一步不依赖索引 。 3. **停止时** :点击停止录制,软件再开始遍历写入的所有数据,计算出每一帧的位置和时长,生成完整的索引表(`moov`),填入预留的位置。 由此初步判断本次视频文件损坏是由于录制过程中断,导致索引还未来得及写入。修复的核心思路是:用一个健康的同源视频文件提取头部信息,再结合损坏文件中的音视频数据流,重新封装成一个完整的MP4文件。 网上搜到的工具不少,有付费的也有免费的。考虑到这次损坏大概率只是缺moov索引,我就选了免费且针对性强的工具——`recover_mp4.exe`。 ## 三、修复步骤 参考了这篇[文章](https://blog.mzh.ren/zh/posts/2024/03/ffmpeg-fix-broke-video/)的方法,具体操作如下: **准备工作:** 1. 安装FFmpeg 2. 下载 `recover_mp4.exe` 工具并解压 3. 将损坏的视频文件(假设为 `bad.mp4`)和一个**同设备&同参数&同软件**录制的健康视频文件(假设为 `good.mp4`)放在同一目录下 ### **第1步:分析健康视频,生成头部信息** 在命令行中切换到该目录,执行: ```Shell recover_mp4.exe good.mp4 --analyze ``` 这一步会分析健康视频的比特率、分辨率等信息,生成 `video.hdr` 和 `audio.hdr` 两个头部信息文件。 ### **第2步:从损坏文件中恢复数据流** 执行: ```Shell recover_mp4.exe bad.mp4 recovered.h264 recovered.aac ``` 这一步会从损坏的视频文件中提取出H.264视频裸流和AAC音频裸流,生成 `recovered.h264` 和 `recovered.aac` 两个文件。所谓"裸流",就是不包含封装信息的原始数据流。执行时间取决于文件大小,过程中可能输出一些警告(如“found broken frame”),是正常情况,工具会跳过个别损坏严重的帧。 ### **第3步:用FFmpeg重新封装** 执行: ```Shell ffmpeg.exe -r 60 -i recovered.h264 -i recovered.aac -bsf:a aac_adtstoasc -c:v copy -c:a copy recovered.mp4 ``` 参数说明: * `-r 60`:指定帧率(根据实际情况调整) * `-i recovered.h264` 和 `-i recovered.aac`:指定输入的音视频裸流文件 * `-bsf:a aac_adtstoasc`:将AAC的ADTS格式转换为MP4容器更适合的格式 * `-c:v copy` 和 `-c:a copy`:直接复制音视频流,不重新编码(速度快且无损) 执行完成后,生成 `recovered.mp4`,即修复好的视频文件。 ## 四、总结 核心逻辑很简单:用健康视频的封装结构作模板,把损坏视频里还能用的音视频数据填进去,重新打包成一个新MP4。 几点注意事项: 1. 健康视频需要与损坏视频来自同一设备、同一录制软件、同一录制参数(分辨率、帧率、编码格式等),否则头部信息不匹配会导致修复失败 2. 如果修复后的视频播放异常,可以尝试调整 `-r` 参数匹配原始帧率 3. 此方法对录制中断导致的文件损坏修复成功率较高,但如果视频数据本身严重损坏,则可能无法恢复 修复后确认画面完整可用,核对了几个关键时间点的画面没有问题,当天的问题顺利定位。不得不说,一个小工具解决了大麻烦,省下了一趟重测的时间。 最后修改:2026 年 08 月 26 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏