使用ffmpeg修复错误的文件和流,使VLC和其他播放器不会崩溃


17

我经历了很多次,最终可能会损坏视频文件:

  • 从官方来源下载的视频,但带有洪流,由于某种原因,并非所有片段都位于.mkv,.ts或.mp4中
  • .ts格式的记录,在某些时候数据丢失
  • 从扇区损坏的旧硬盘复制视频

当我与VLC或其他播放器一起播放此视频时,他们会播放到特定点,然后立即退出。有时我可以尝试跳过糟糕的部分,但是我可能遇到另一个糟糕的部门并再次陷入不稳定状态。

问题是:

我可以用ffmpeg并可能以-c复制的方式解决此问题(我想与流和关键帧有关),这样我就不必重新压缩所有内容了吗?

我想要实现的是完整的视频,其中缺少的部分被跳过,我更喜欢出现故障而不是使视频崩溃。


Answers:


26

如果文件的某些部分驻留在物理上损坏的扇区上,或者由于某种原因,操作系统无法将整个文件提供给FFmpeg,那么FFmpeg自然不会对此做任何事情。您应该获得一个实用程序,该实用程序可以忽略这些部分并将可挽救的部分写入新文件,例如ddrescue

现在,如果文件协议不是导致错误的原因,则可以尝试

ffmpeg -err_detect ignore_err -i video.mkv -c copy video_fixed.mkv

1
此方法有效,但没有则失败-c copy。令人惊讶的是,它在重新编码期间不起作用。
直觉

即使那样,我仍然可以Invalid data found when processing input-ffmpeg放弃了。
Mikhail T.

好的解决方案...如果moov原子(在MP4文件上)仍然存在于某处。如果甚至不在那里怎么办?
Gwyneth Llewelyn

它在我的末端以令人惊讶的
优势发挥作用

5

为了寻找更好的答案,可能的方法可能是:

ffmpeg -i video.mkv -c copy video_fixed.mkv

但是,我很确定还有一些其他选项可以使结果更好。


1
每当我在元数据,时间戳或容器信息方面遇到某种问题时,它都对我有用。而且速度非常快,通常比400倍的播放速度还快。
user24601 '18

坦白说,这个命令救了我的屁股。
neverMind9
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.