untrunc:不重新编码修复损坏 MP4/MOV 视频文件
【免费下载链接】untruncRestore a truncated mp4/mov. Improved version of ponchio/untrunc项目地址: https://gitcode.com/gh_mirrors/un/untrunc
很多 MP4/MOV 文件"播不了",并不等于数据真的丢失。这类损坏的本质,是 MP4 的索引与结构信息丢失——音视频数据流可能还完整保存在存储卡上,只是播放器找不到入口。开源工具 untrunc 针对的就是这类视频修复:它以同设备的正常视频为模板,重新扫描损坏文件的原始数据并重建索引。全程不改动编码数据,不重新编码,画质原样保留。
它是什么,能处理什么
untrunc 是一款面向 MP4/MOV/3GP 容器的命令行修复工具。本项目是 ponchio/untrunc 的积极维护改进版,性能提升显著,支持大于 2GB 的文件,并扩展覆盖 GoPro、Sony XAVC 等常见运动相机素材。
适用:
- 数据仍在、仅 moov 索引丢失,播放器无法识别文件(录制中断电、中途拔卡的典型情况)
- MP4、M4V、MOV、3GP 容器
不适用:
- AVI、MKV 等非 MP4 系容器
- 视频数据本身已大面积损毁,或手上没有可用作参考的视频
首次上手:拿到修复视频的最短路径
前提是准备一份参考视频:与损坏文件出自同一台设备、录制参数(分辨率、帧率、编码)一致,参数越接近,成功率越高。
首次使用需要一次构建,以 Ubuntu/Debian 为例:
sudo apt-get install libavformat-dev libavcodec-dev libavutil-dev git clone https://gitcode.com/gh_mirrors/un/untrunc && cd untrunc make && sudo cp untrunc /usr/local/bin其他平台的构建环境有差异,具体方式见项目 README。
构建完成后执行核心命令,第一个参数传正常文件,第二个传损坏文件:
untrunc healthy.mp4 broken.mp4运行结束后,同目录会生成 broken.mp4_fixed.mp4。用播放器打开它,检查时长是否完整、画面与声音是否正常,这一步的验证结果才算数。
修复原理背后的事
MP4 文件由一连串"原子"组成,其中 moov 盒记录了每块数据的位置与大小,相当于一份文件目录。untrunc 先解析健康视频的 moov 结构建立模板,再逐字节扫描损坏文件,识别样本边界与数据块,最后用模板替换丢失的索引、生成新的 moov。正因如此,参考视频必须与损坏文件来自相同设备、相同结构,否则数据边界无法对齐。
核心逻辑分布在这几个模块:修复主流程在 src/mp4.cpp,原子解析在 src/atom.cpp,轨道与样本表重建在 src/track.cpp,H.264 编码细节在 src/avc1/。
边界、失败与排查
untrunc 修复的是"目录",不是"内容":数据本身完整时,修复结果基本无损;若数据块缺失或被覆写,只能部分恢复,缺失片段无法凭空补齐。
常见的失败征兆有两种:运行结束后没有生成 _fixed 文件;或者生成了文件但仍无法播放、时长明显偏短。日志中反复出现"unknown sequences",通常说明损坏文件的数据边界与参考视频对不上,多半是两台设备或两种参数录制的文件被错配。
排查时先加 -v 获取详细日志,再对照参考视频检查来源与参数:
untrunc -v healthy.mp4 broken.mp4修复前后的好习惯
- 给每台重要设备录一段正常测试视频并单独存放,它是日后视频修复的关键参考
- 修复成功后先完整播放验证新文件,再决定是否删除原文件;验证通过前保留原件
修复成功率主要取决于参考视频与损坏文件的匹配程度,参数越接近,把握越大。把"提前留一份参考视频"变成习惯,下次损坏发生时,你就有明确的修复路径可循。
【免费下载链接】untruncRestore a truncated mp4/mov. Improved version of ponchio/untrunc项目地址: https://gitcode.com/gh_mirrors/un/untrunc
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考