视频文件打不开,修复屏幕上蹦出“filetooshort”这行字的视频时候,我正要把一段婚礼跟拍素材拷给客户。修复文件大小明明有2.3个G,视频播放器却死活不认。修复这不是视频播放器的问题——文件头损坏了,系统读不出视频该有的修复时长信息,干脆判定它“太短”,视频直接拒绝加载。修复
这种情况我遇到过不下二十次。视频多数发生在拷贝过程中断电、修复SD卡热插拔、视频或者下载没完成就强行关闭软件。修复视频数据其实还在,视频只是修复索引部分烂了。修复的核心思路就两条:要么重建文件头,要么把视频流从烂掉的容器里抽出来。
网上搜“filetooshort怎么修复”,排前面的全是付费软件。我试过其中三款,有两款会把原文件覆盖掉,修完反而彻底废了。真正管用的办法往往更笨——先备份。把损坏文件复制一份到另一个盘,所有操作只动副本。这一步省不得,我吃过亏,一个三小时的会议录像被某修复软件直接清空,连恢复软件都救不回来。
备份完,用十六进制编辑器打开文件看头几个字节。正常MP4开头应该是“00 00 00 18 66 74 79 70”这类结构,如果前几位全是零或者乱码,那就是文件头废了。MOV格式类似,看“6D 6F 6F 76”这个标记还在不在。手动改几个字节能救回一部分文件,但只适合懂二进制的人。普通用户跳过这步。
ffmpeg有个被低估的功能:忽略容器直接读流。命令行敲进去:
ffmpeg -i broken.mp4 -c copy -map 0 output.mp4 如果报错,换成:
ffmpeg -err_detect ignore_err -i broken.mp4 -c copy fixed.mp4 关键在-err_detect ignore_err这个参数,它让ffmpeg跳过损坏的索引区,直接从数据流里找关键帧。我修过一个行车记录仪文件,filetooshort报错,用这条命令跑出来2分17秒的画面,只有开头三秒花屏。另一个案例是手机拍的MOV,抽流后音频丢了,但视频完整——总比全废强。
Windows用户如果懒得装ffmpeg,可以用Shutter Encoder这个免费工具,底层也是ffmpeg,勾选“忽略错误”和“重写容器”两个选项就行。Mac上试试Remo Repair MOV,但注意它只能处理MOV,MP4得先改后缀名。
有时候filetooshort不是视频本身的问题。NTFS分区上有个隐藏属性叫“稀疏文件”,下载工具没写完就中断,系统会标记成稀疏文件,实际数据块根本没分配。这时候用chkdsk /f修一下盘,再重新拷贝文件,可能直接就好了。我遇到过三次这种情况,都是迅雷下载到99%卡住然后强行关机导致的。
SD卡或U盘上的文件更麻烦。闪存芯片的磨损均衡机制会让损坏文件分布在多个物理块上。用Recuva或者R-Studio扫描原始扇区,按视频特征码(比如MP4的“ftyp”或“mdat”)搜索,往往能拼出完整文件。这招对GoPro和大疆的素材特别有效,因为它们的视频流结构规整。
如果ffmpeg抽流只出来几帧,或者全是绿屏,那基本是数据区被覆盖了。别浪费时间,直接找专业数据恢复。我认识一个做婚庆的朋友,他有个128G的CF卡摔了,filetooshort报错,送去做芯片级读取花了800块,救回七成素材。自己折腾超过两小时没进展,就该停手——每多写一次盘,覆盖原始数据的风险就大一分。
最后说个反常识的:有些filetooshort文件用VLC反而能播。VLC的容错机制比ffmpeg还野,它不管时长信息,直接硬解。能播就赶紧用屏幕录制软件翻录一遍,画质损失比彻底丢失强。这招我用来救过一段采访原片,录屏出来声音画面都对得上,客户根本没看出来是翻录的。