You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何拆分拼接错误的MP4文件并恢复原视频?

如何拆分拼接错误的MP4文件并恢复原视频?

别急,这种踩坑经历我太懂了!只要后面的原始视频流没被损坏,只是容器元数据标错了,大概率能把后面的视频救回来。咱们一步步来:

第一步:先摸清当前文件的底

首先用ffmpeg查看拼接后文件的流信息,搞清楚第一个视频的时长、音频格式这些关键数据:

ffmpeg -i your_broken_file.mp4

重点看输出里的视频流时长(就是第一个正常片段的时长,比如显示Duration: 00:02:00.00,那就是120秒),还有音频的编码格式(比如AAC、MP3)。

第二步:导出原始的视频/音频裸流

因为你用的是无损拼接,所以视频和音频流其实完整保存在文件里,只是容器的元数据错了。先把它们导出成无容器的裸流:

  • 导出视频裸流(假设是HEVC编码,也就是h.265):
ffmpeg -i your_broken_file.mp4 -c:v copy -an raw_video.h265
  • 导出音频裸流(把aac换成你第一步查到的音频编码):
ffmpeg -i your_broken_file.mp4 -c:a copy -vn raw_audio.aac

第三步:切割掉第一个视频的部分

根据第一步得到的第一个视频时长(比如120秒),把视频和音频裸流从这个时间点开始切割:

  • 切割视频裸流:
ffmpeg -ss 120 -i raw_video.h265 -c:v copy cut_video.h265
  • 切割音频裸流:
ffmpeg -ss 120 -i raw_audio.aac -c:a copy cut_audio.aac

第四步:强制用正确的参数重新封装后面的视频

这一步是关键!你说后面的视频被错误标记成了1920x1080x50 HEVC,那你得回忆下原视频的真实参数(比如分辨率是1280x720、帧率25fps这类),然后让ffmpeg用正确的参数重新封装切割后的视频流:

ffmpeg -i cut_video.h265 -c:v copy -video_size 1280x720 -r 25 corrected_video.mp4

这里把1280x72025换成你原视频的真实分辨率和帧率就行。如果ffmpeg能自动识别流里的正确参数,也可以去掉-video_size-r试试,不过保险起见还是加上。

第五步:把切割后的音频和视频合并

最后把正确的视频和切割后的音频重新封装成完整的MP4:

ffmpeg -i corrected_video.mp4 -i cut_audio.aac -c copy restored_video.mp4

额外小技巧

如果记不清第一个视频的精确时长,可以先把第一个正常片段单独提取出来播放,看它的实际时长:

ffmpeg -i your_broken_file.mp4 -t 120 -c copy first_clip.mp4

慢慢调整-t后面的数值,直到提取出来的视频刚好是第一个完整的片段,这个数值就是你要切割的起始时间啦。

备注:内容来源于stack exchange,提问作者arne

火山引擎 最新活动