Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ffmpeg录制MP4时,突然断电_Ffmpeg_Mp4_Power Off - Fatal编程技术网

使用ffmpeg录制MP4时,突然断电

使用ffmpeg录制MP4时,突然断电,ffmpeg,mp4,power-off,Ffmpeg,Mp4,Power Off,现在我用C语言和ffmpeg实现了一个多路实时音视频到MP4文件的程序,一切都很好,但在重用过程中突然停电,录制的是MP4文件被破坏,VLC无法播放这个文件。 我认为原因是没有调用写入预告片函数av_write_trail,导致索引和时间戳信息丢失,我使用araxis merge工具比较了成功调用文件的av_write_trail函数和一个无av_write_预告片调用损坏的文件,发现了两个不同点: 1.文件头框中损坏的文件编号值不正确 2.损坏的文件没有文件的结尾 现在我想修复开机后我的程序可

现在我用C语言和ffmpeg实现了一个多路实时音视频到MP4文件的程序,一切都很好,但在重用过程中突然停电,录制的是MP4文件被破坏,VLC无法播放这个文件。 我认为原因是没有调用写入预告片函数av_write_trail,导致索引和时间戳信息丢失,我使用araxis merge工具比较了成功调用文件的av_write_trail函数和一个无av_write_预告片调用损坏的文件,发现了两个不同点: 1.文件头框中损坏的文件编号值不正确 2.损坏的文件没有文件的结尾

现在我想修复开机后我的程序可以自动修复损坏的文件,在谷歌没有找到有效的方法。
我的思路是在正常的录制过程中每秒保存一个损坏的文件缺少两个信息:文件盒号和文件结尾,将其保存到本地文件,在写入MP4文件完整性后删除此文件,如果断电损坏,则在下一次通电时,读取文件和相应信息,将损坏的文件写入相应位置。但现在的问题是,我不知道如何保存框的编号和文件的结尾,我这是可行的吗?如果可能,我该怎么办?期待您的回复

MP4文件损坏的主要原因是头文件或尾文件未正确写入文件,然后整个文件成为垃圾数据。因此,没有媒体播放器能够播放损坏的mp4文件。 所以 首先,在播放文件之前,必须修复损坏的文件。 有一些应用程序和技巧可用于修复和获取数据 链接如下:

(Windows/Mac)(付费:)

(基于Linux的操作系统)(当然,免费!!!)

其次,使用十六进制编辑器手动修复损坏的文件

这一黑客行为背后的逻辑: 这个黑客需要一个坏的mp4文件和一个好的视频文件,这两个视频都是从同一个摄像头捕获的。而且它的大小应该大于坏的mp4文件

在任何十六进制编辑器中打开两个视频文件。将拖车部分从好的视频文件复制到坏的视频文件并保存!完成

注意:始终备份视频文件

有关详细信息,请访问以下链接:

第三,即使是很难处理的MP4文件也有很多优点,这种错误是不可预测的,很难处理。 因此,使用MPG和AV_CODEC_ID_MPEG1VIDEO/AV_CODEC_ID_MPEG2VIDEO(FFMPEG)等格式可能有助于避免此类错误。提到的MPG格式不需要任何头/尾。如果突然断电,MPG文件可以播放到目前为止存储的任何帧


注意:这类属性还提供其他格式和编解码器。

如果您希望断电/崩溃,请不要录制到mp4。录制到可以在这些事件中幸存的格式(如flv),然后在最后转换为mp4。似乎Federico Ponchio使他的不真实性对所有人都可用(非Linux用户也;-):