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

📅 发布时间:2026/8/24 8:54:11
untrunc:免费修复截断 MP4 的完整指南,3 条命令跑通 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_VER3.3.9 sudo cp untrunc /usr/local/binmacOS(Homebrew)用户先装依赖,编译时显式指定头文件与库路径:brew install ffmpeg yasm export PKG_CONFIG_PATH/opt/homebrew/lib/pkgconfig CPPFLAGS-I/opt/homebrew/include LDFLAGS-L/opt/homebrew/lib makeWindows 直接用项目发布的预编译包即可(含 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),仅供参考