untrunc:免费修复截断 MP4 的完整指南,3 条命令跑通
2026/8/24 8:53:55 网站建设 项目流程

untrunc:免费修复截断 MP4 的完整指南,3 条命令跑通

【免费下载链接】untruncRestore a truncated mp4/mov. Improved version of ponchio/untrunc项目地址: https://gitcode.com/gh_mirrors/un/untrunc

视频突然黑屏,或播放器直接报"文件损坏",但你确定它上次还正常播放——这多半不是画面没了,而是 MP4 文件被截断了。untrunc 就是干这件事的免费开源工具:拿一段同设备的健康视频当模板,重建损坏视频的文件索引,恢复可播放,全程不重新编码。本文先带你在几分钟内跑通第一次修复,再讲原理和失败对策。

01 安装 untrunc 并跑通第一条修复命令

🔧 全程就三步:装工具、备好两段视频、跑一行命令。

Linux 上最快的路线是先装 ffmpeg 开发库,再源码编译:

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

如果系统里的 ffmpeg 版本和 untrunc 不兼容,可以让 Makefile 自行下载并编译作者验证过的 ffmpeg 3.3.9:

sudo apt-get install yasm wget make FF_VER=3.3.9 sudo cp untrunc /usr/local/bin

macOS(Homebrew)用户先装依赖,编译时显式指定头文件与库路径:

brew install ffmpeg yasm export PKG_CONFIG_PATH="/opt/homebrew/lib/pkgconfig" CPPFLAGS="-I/opt/homebrew/include" LDFLAGS="-L/opt/homebrew/lib" make

Windows 直接用项目发布的预编译包即可(含 GUI 版);仓库附带 Dockerfile,挂载本地视频目录就能跑,不用装任何环境:

docker build -t untrunc . docker run --rm -v ~/Videos/:/mnt untrunc /mnt/ok.mp4 /mnt/broken.mp4

修复命令本身只有一行,健康文件在前、损坏文件在后:

untrunc /path/to/ok.mp4 /path/to/broken.mp4

成功后同目录会生成broken_fixed.mp4,原文件全程只读、不会被改动。

02 untrunc 修复原理与哪些文件修不了

MP4 文件由一个个"原子(atom)"组成:mdat原子装真实的画面与音频数据,moov原子装索引——每一帧在哪、多长、什么顺序。断电、拔卡、传输中断这类最常见的损坏,结局基本一致:数据完好,索引丢了,播放器照着坏目录找,自然什么都播不出来。

untrunc 的思路像货物发运清单:货都在,只是清单丢了。它从同设备的健康文件里提取编码特征(分辨率、帧率、切片结构)当模板,逐字节重新匹配损坏文件,把索引和轨道结构重建出来。不解码、不重编码,所以没有画质损耗。

能处理的情况:

  • 录制被截断、moov 缺失或损坏,但 mdat 数据仍在
  • MP4、M4V、MOV、3GP 等常见容器
  • H.264/AVC 编码(逻辑在src/avc1/)与 HEVC/H.265 编码(src/hvc1/)
  • GoPro、索尼 XAVC 等特殊格式;索尼录制中 RSV 文件(-rsv-ben,逻辑在src/rsv.cpp)

硬性前提:参考文件必须与损坏文件"健康且相似"——同设备、同分辨率帧率、录制时间尽量接近。参数差得远,匹配模板本身就不可靠,再多的参数也救不回来。

救不回来的情况:画面数据已被其他内容覆盖、存储介质物理读失败、或数据段本身大面积损坏。这类问题不是"结构坏了",而是"数据没了"。

与原版 ponchio/untrunc 相比,这个分支速度快 10 倍以上,内存占用更低,支持 2GB 以上的大文件,能跳过未知字节序列,并兼容新版 ffmpeg。

03 untrunc 参数速查表:按 6 种"什么时候用"场景找

参数看着多,按"什么情况下会用到"分组,一眼就能定位:

第一次命令失败,先定位卡点

参数作用
-v/-vv输出详细日志,报问题时必加
-a进入交互式分析,逐步检查文件结构
-q/-w-q只显示错误;-w显示隐藏的警告

参考文件不完全匹配时,调整匹配行为

参数作用
-s/-st <步长>跳过未知字节序列而不中断,步长可调
-sm即使找不到 MP4 结构也强制搜索 mdat
-dcc跳过"块必须在 mdat 内部"的检查
-dyn启用动态统计辅助匹配

修复后音画不同步或时间戳异常时

参数作用
-sv拉伸或压缩视频,使其与音频时长一致
-noctts不恢复 ctts(解码时间偏移)

控制输出与内存占用时

参数作用
-dst <目录\|文件>指定输出目录或文件名
-dw不写出 _fixed 文件,只做分析
-dr将修复后的各轨道拆分落盘(隐含-dw)
-skip跳过已存在的输出文件
-mp <字节数>限制最大分块尺寸,压低内存峰值

只想体检、不修文件时

参数作用
-it/-ia/-is查看轨道信息 / 原子结构 / 统计信息
-f扫描全部原子并检查长度是否合法
-lsm定位文件中所有 mdat、moov 位置
-m <偏移量>针对指定偏移做匹配分析

特殊格式与文件重组

参数作用
-rsv-ben索尼 RSV 录制中文件专用恢复模式
-u <mdat文件> <moov文件>将分离的 mdat 与 moov 片段拼回一个文件
-ms转换为可流式播放的布局
-range <A:B>只处理指定字节范围

04 untrunc 常见修复失败场景:5 种应对

⚠️ 多数"修不好"不是工具不行,而是参考文件没选对,或少了一个参数。

04.1 程序报错,没有输出文件

先加-v看日志,定位卡在哪一步。卡在匹配环节,基本就是参考文件不匹配:用ffprobe对比两个文件的分辨率、帧率、profile,对不上就换一段同设备的参考。

04.2 修复出来的文件仍然播不了

先确认参考文件与损坏文件同设备、同分辨率帧率;结构损坏较重的,用-sm强制搜索 mdat,或-s跳过未知片段。

04.3 修复后音画不同步

-sv让视频时长向音频靠拢;同时换一段录制时间更接近的参考文件,往往更立竿见影。

04.4 完全没有参考视频

先用-lsm看损坏文件里能否定位 mdat/moov,再用-sm强制搜索。都走不通时,只能找同型号设备的视频,或之前发过给别人、存过备份的副本。

04.5 文件几个 GB,担心内存不够

该分支已优化内存并支持 2GB 以上文件;想进一步压低峰值,用-mp <字节数>限制分块尺寸。

05 untrunc 进阶用法:把视频体检和流式重组也交给它

重要素材归档前,可以跑一遍 untrunc 的分析模式做体检:-it -ia查看轨道与原子结构,-f扫描所有原子长度,专门揪出"还没坏透但已经埋下隐患"的文件。

遇到 mdat 和 moov 分属两个文件的极端情况,-u可把两者直接拼回完整文件;要在网页端丝滑播放的录像,用-ms一步转成流式友好布局。GUI 版已包含在 Windows 预编译包里,其他系统想自己编译的话,源码在src/gui/,装好 libui 依赖后执行make untrunc-gui即可。

06 一条值得养成的修复习惯:先备份,再谈修复

untrunc 只在"数据还在"时有效。一切修复的前提,是画面数据没有被覆盖——所以正确顺序是:先停止向那块存储写入,复制一份损坏文件,再找同设备的健康视频跑修复。

重要素材保持两份不同介质的副本(本地硬盘加网盘,或两块硬盘异地);归档前顺手跑一次-f体检。真出事故的时候,决定成败的就是这套习惯在不在。

【免费下载链接】untruncRestore a truncated mp4/mov. Improved version of ponchio/untrunc项目地址: https://gitcode.com/gh_mirrors/un/untrunc

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询