MP4损坏了,如何修复?

MP4损坏了,如何修复?

我用数码相机录制了两个视频。两个视频都使用相同的编解码器和设置保存。

第二个视频不知怎么的损坏了,我无法用 VLC 或视频编辑软件打开它。(第一个视频没问题)。

我尝试使用“视频到视频”软件转换视频,结果显示:

#8636.3: [h264 @ 04E10060]AVC: nal size -1920576098
#8636.3: [h264 @ 04E10060]no frame!
#8636.5: [mov,mp4,m4a,3gp,3g2,mj2 @ 04EC4020]decoding for stream 0 failed
#8636.4: [mov,mp4,m4a,3gp,3g2,mj2 @ 04EC4020]Could not find codec parameters 
for stream 0 (Video: h264 (avc1 / 0x31637661), 1920x1080, 11987 kb/s): 
 unspecified pixel format
#8636.4: Consider increasing the value for the 'analyzeduration' and 
 'probesize' options

***File load error: C:\..\PICT0002.MP4: could not find codec parameters

使用 Gspot 分析视频(右侧视频损坏:PICT0002):

在此处输入图片描述

有人能推荐一个工具或方法来修复第二个视频吗?大小是正确的(3 GB),当我尝试用 VLC 打开它时,长度似乎没问题(40 分钟)。

理论上:我是否应该更改文件中的编解码器元数据以使其可被软件识别?

更新

尝试了 ffmpeg 分析。命令:ffmpeg -analyzeduration 20000000000 -i PICT0002.mp4 -c:v libx264 -c:a copy PICT0002-fixed.mp4

回复:

C:\Programmi\ffmpeg\bin>ffmpeg -analyzeduration 2000000000 -i PICT0002.mp4 - 
c:v libx264 -c:a copy PICT0002-fixed.mp4
ffmpeg version N-91398-gd08d4a8c73 Copyright (c) 2000-2018 the FFmpeg         
developers
   built with gcc 7.3.0 (GCC)
   configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable- 
   bzlib --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass 
   --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable- 
   libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg -- 
   enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr -- 
   enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack 
   --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 -- 
   enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable- 
   libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa 
   --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx -- 
   enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable- 
   nvenc --enable-nvdec --enable-dxva2 --enable-avisynth
      libavutil      56. 18.102 / 56. 18.102
      libavcodec     58. 20.104 / 58. 20.104
      libavformat    58. 17.101 / 58. 17.101
      libavdevice    58.  4.101 / 58.  4.101
      libavfilter     7. 25.100 /  7. 25.100
      libswscale      5.  2.100 /  5.  2.100
      libswresample   3.  2.100 /  3.  2.100
      libpostproc    55.  2.100 / 55.  2.100
 [h264 @ 000002036235d380] Invalid NAL unit size (-1920576098 > 197632).
 [h264 @ 000002036235d380] Error splitting the input into NAL units.
 [mov,mp4,m4a,3gp,3g2,mj2 @ 000002036234a300] decoding for stream 0 failed
 [mov,mp4,m4a,3gp,3g2,mj2 @ 000002036234a300] Could not find codec 
 parameters for stream 0 (Video: h264 (avc1 / 0x31637661), none, 1920x1080, 
 11987 kb/s): unspecified pixel format
 Consider increasing the value for the 'analyzeduration' and 'probesize' 
  options
 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'PICT0002.mp4':
   Metadata:
   major_brand     : avc1
   minor_version   : 0
   compatible_brands: avc1isom
   creation_time   : 2021-06-30T08:32:50.000000Z
   Duration: 00:40:53.45, start: 0.000000, bitrate: 12122 kb/s
   Stream #0:0(eng): Video: h264 (avc1 / 0x31637661), none, 1920x1080, 11987 
    kb/s, 29.97 fps, 29.97 tbr, 90k tbn, 180k tbc (default)
   Metadata:
     creation_time   : 2021-06-30T08:32:50.000000Z
     handler_name    :  Ambarella AVC
     encoder         : Ambarella AVC encoder
 Stream mapping:
   Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
 Press [q] to stop, [?] for help
 [h264 @ 000002036234dd40] Invalid NAL unit size (-1920576098 > 197632).
 [h264 @ 000002036234dd40] Error splitting the input into NAL units.
 [h264 @ 0000020363f92300] Invalid NAL unit size (1565499804 > 10496).
 [h264 @ 0000020363f92300] Error splitting the input into NAL units.
 Error while decoding stream #0:0: Invalid data found when processing input
     Last message repeated one time
 Cannot determine the format of input stream 0:0 after EOF
 Error marking filters as finished
 Conversion failed!

因此,转换失败。

答案1

解决方案。

首先,感谢 Ricardo Bohner。他提到了视频修复工具

访问该网站,你会发现这个工具不再可用,你应该订阅恢复媒体

或者你可以去这里。我按照说明进行操作这里

遗憾的是,我只恢复了 40 分钟视频中的 30 分钟,但恢复的部分是完美的。

希望这会有用。

更新: 正如 Riccardo Bonher 所解释的(见下面的评论),可以使用一个技巧(将 mp4 长度加倍)并通过以下方式恢复它修复工具

这样,我就能修复损坏的 mp4 的全部长度。完成此操作后,我就能够使用 VLC(视频阅读器)观看视频了。

..但我仍然无法通过编辑软件(如 VirtualDub、Video to Video 等)进行转换。

因此,我使用了组合程序:A) 使用 Riccardo 解决方案(如评论中所述)恢复整个视频长度 B) 通过我原来的解决方案 (recover-mp4-to-h264.zip) 重新传递恢复的视频,使其正确且可被常见的编辑软件读取。希望这可以帮助人们。

答案2

查看这个工具:视频修复工具

它不是免费软件,但它可以免费修复 50% 的视频,所以您会知道它是否有效。

另请查看这个 YouTube 视频:https://www.youtube.com/watch?v=5QK3vizVIds

相关内容