错误的视频文件头导致视频播放器失败。有什么恢复建议吗?

错误的视频文件头导致视频播放器失败。有什么恢复建议吗?

我有这个视频:Google Drive 链接,无法在任何视频播放器上播放。我尝试使用各种工具(如 VLC、ffmpeg 和 gpac 的 mp4box)修复它,但都不起作用。更具体地说,当我尝试ffmpeg -i 0002201.mp4 -c copy e.mp4重新编码视频时,我得到了以下输出:

ffmpeg version n6.0 Copyright (c) 2000-2023 the FFmpeg developers
  built with gcc 12.2.1 (GCC) 20230201
  configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-amf --enable-avisynth --enable-cuda-llvm --enable-lto --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libdav1d --enable-libdrm --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libjack --enable-libjxl --enable-libmfx --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librav1e --enable-librsvg --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-libzimg --enable-nvdec --enable-nvenc --enable-opencl --enable-opengl --enable-shared --enable-version3 --enable-vulkan
  libavutil      58.  2.100 / 58.  2.100
  libavcodec     60.  3.100 / 60.  3.100
  libavformat    60.  3.100 / 60.  3.100
  libavdevice    60.  1.100 / 60.  1.100
  libavfilter     9.  3.100 /  9.  3.100
  libswscale      7.  1.100 /  7.  1.100
  libswresample   4. 10.100 /  4. 10.100
  libpostproc    57.  1.100 / 57.  1.100
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x55d06173fdc0] Packet corrupt (stream = 1, dts = 0).
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x55d06173fdc0] stream 1, offset 0x13008: partial file
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x55d06173fdc0] Could not find codec parameters for stream 0 (Video: h264 (avc1 / 0x31637661), none(bt709), 1920x1080, 33673 kb/s): unspecified pixel format
Consider increasing the value for the 'analyzeduration' (0) and 'probesize' (5000000) options
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '0002201.mp4':
  Metadata:
    major_brand     : qt  
    minor_version   : 537331968
    compatible_brands: qt  CAEP
    com.apple.quicktime.make: Canon
    com.apple.quicktime.model: Canon PowerShot SX50 HS
    com.apple.quicktime.rating.user: 0.000000
    com.apple.quicktime.copyright:         
    com.apple.quicktime.author:         
    creation_time   : 2015-12-27T09:09:28.000000Z
  Duration: 00:00:09.80, start: 0.000000, bitrate: 60 kb/s
  Stream #0:0[0x1](eng): Video: h264 (avc1 / 0x31637661), none(bt709), 1920x1080, 33673 kb/s, 23.98 fps, 23.98 tbr, 24k tbn (default)
    Metadata:
      creation_time   : 2015-12-27T09:09:28.000000Z
      vendor_id       : [0][0][0][0]
  Stream #0:1[0x2](eng): Audio: pcm_s16le (sowt / 0x74776F73), 48000 Hz, stereo, s16, 1536 kb/s (default)
    Metadata:
      creation_time   : 2015-12-27T09:09:28.000000Z
      vendor_id       : [0][0][0][0]
[mp4 @ 0x55d061752a40] Could not find tag for codec pcm_s16le in stream #1, codec not currently supported in container
[out#0/mp4 @ 0x55d061751600] Could not write header (incorrect codec parameters ?): Invalid argument
[aost#0:1/copy @ 0x55d0617575c0] Error initializing output stream: 
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (copy)
    Last message repeated 1 times

据我所知,错误出现在视频的标题部分,这表明内容没有损坏,视频仍然可以恢复。您成功使用了哪些工具来修复 mp4 文件?也许有人遇到过类似的错误并知道解决方案?非常欢迎任何建议,但如果这些工具在 (arch) linux 上可用,我将不胜感激。提前致谢。

(还,这里这是另一个视频供参考。在这种情况下,它会播放到第 7 秒左右,然后冻结。)

答案1

mdat atom(实际视频数据)的大小为 43237748,或者更确切地说应该是。文件本身只有 74473 个字节。因此,文件被截断,您丢失了大约 43237748 个字节的数据。mdat 中剩余的实际数据仅由零组成。

在此处输入图片描述

有趣的是,moov 原子没有问题,它指向的偏移量与 mdat 原子大小相对应。由于 moov 通常是在录制停止后创建的,因此它表明文件在录制视频后被截断(例如在复制时)。

在此处输入图片描述

据我所知,错误发生在视频的标题部分,这表明内容没有损坏并且视频仍然可以恢复。

所以,这似乎不是错误的假设。“标题”和索引看起来不错,实际上缺少的是视频数据。

相关内容