本鱼拟成立工作室承接项目开发/软件定制/云设施开发运维/办公设备技术支持等,如您有相关需求,欢迎来询 | ::博客文章推荐::

更新开源工具:监控视频自动合并

: 原创作品 木魚 1753℃ 5评论

题外话

还记得刚工作两三年的时候,我还埋头沉迷于写各种各样用得上用不上的小工具。有一天我写出来一个自己颇为得意的工具,兴奋地喊办公室的同事过来看。

他们看了后说,哟这个软件有点意思,然后你要怎么弄?

我说我要把它发到网上去给人下载用。

他们说,哇哦,可以哦,然后呢,你怎么收费。

我说,不收费,为什么要收费?

他们说,不收费?不收费你为什么要写这个?

我说,写了就一定要收费?

他们说,哦,可是不收费写这东西有啥意思。

 

如今,十五年过去了。

有时候我还是会想起这件事。

然后我也会问自己,对啊,不收费,不收费你为什么要搞这些?

更新内容

更多信息参考之前的发布博客。

开源个小工具:监控视频自动合并

其实我以为这东西没啥卵用的,竟然真的有人会要用,还会很认真地给我写评论反馈,并且很及时地将附加信息通过邮件的信息反馈给我。

支持小米双摄的录像文件

感谢 @午夜学徒 的反馈。

小米双摄的录像文件名格式和之前已经支持的不太一样,但这个兼容其实很简单(查看详情):

修复录像文件大于24H的异常错误

感谢 @午夜学徒 的反馈。

之前的版本在合并大于24小时的视频时会报异常:

Unhandled exception. System.OverflowException: The TimeSpan string '24:02:47.27' could not be parsed because at least one of the numeric components is out of range or contains too many digits.
   at System.Globalization.TimeSpanParse.TimeSpanResult.SetOverflowFailure() + 0x57
   at System.Globalization.TimeSpanParse.ProcessTerminal_HMS_F_D(TimeSpanParse.TimeSpanRawInfo&, TimeSpanParse.TimeSpanStandardStyles, TimeSpanParse.TimeSpanResult&) + 0x104e
   at System.Globalization.TimeSpanParse.ProcessTerminalState(TimeSpanParse.TimeSpanRawInfo&, TimeSpanParse.TimeSpanStandardStyles, TimeSpanParse.TimeSpanResult&) + 0xcb
   at System.Globalization.TimeSpanParse.TryParseTimeSpan(ReadOnlySpan`1, TimeSpanParse.TimeSpanStandardStyles, IFormatProvider, TimeSpanParse.TimeSpanResult&) + 0x1ac
   at VideoRecordingJoiner.JoinWorker.TryPrintProgress(String, Boolean) + 0x3c2
   at VideoRecordingJoiner.JoinWorker.PrintMessagesAsync(Int32&, ConcurrentQueue`1) + 0xa4
   at System.Threading.Tasks.Task`1.InnerInvoke() + 0x34
   at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread, ExecutionContext, ContextCallback, Object) + 0x3d
--- End of stack trace from previous location ---
   at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread, ExecutionContext, ContextCallback, Object) + 0x71
   at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task&, Thread) + 0xce
--- End of stack trace from previous location ---
   at VideoRecordingJoiner.JoinWorker.<CombineAsync>d__37.MoveNext() + 0x7e4
--- End of stack trace from previous location ---
   at VideoRecordingJoiner.JoinWorker.<JoinAsync>d__43.MoveNext() + 0xabe
--- End of stack trace from previous location ---
   at Program.<<Main>$>d__0.MoveNext() + 0x5b0
--- End of stack trace from previous location ---
   at Program.<Main>(String[] args) + 0x24

这个错误其实源于 TimeSpan 进行时间字符串解析时的要求,它不允许时分秒的组合大于24小时。修复方法也很简单(查看详情):

自动修复/忽略 moov atom not found 错误的视频文件

感谢 @L 的反馈。

这是个不太常见的错误。原因是录像文件进行转存的时候,可能会出现损坏,导致无法合并。

目前本工具支持两种方法进行解决:

  •  使用 -ie 选项。这个选项可以自动识别错误的视频文件并进行跳过
  • 使用 -fix 选项。这个选项使用工具对错误的视频文件(仅限 moov atom not found 错误)进行修复

自动修复使用的是 untrunc 工具。为了减少发布包的体积,默认没有带这个工具,如果启用了 -fix 选项,将会自动联网下载,已支持Linux amd64及Windows平台。

下载

vrj_linux_x64_20240719 (vrj_linux_x64_20240719.tar.bz2, 3.4 MB, 33次下载) vrj_win_x64_20240719 (vrj_win_x64_20240719.7z, 2.3 MB, 56次下载) 仓库地址 鱼的镜像仓库地址
喜欢 (2)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(5)个小伙伴在吐槽
  1. 大佬,可以增加对小米双摄视频文件分别合成的功能么?目前小米双摄的两个摄像头的视频文件都合成在一个视频文件里面了,一段是固定摄像头一段是可转向摄像头的视频,都杂糅在一起了,回看不太方便,麻烦大佬考虑下

    helle2024-10-25 17:32 回复
    • 提前分类好好双摄的视频文件就好了,不麻烦大佬再整了

      helle2024-10-25 18:11 回复
    • 可否告知两个摄像头的文件的文件名如何区分?

      木魚2024-11-08 14:46 回复
      • 双摄的可转向摄像头的视频文件是以“00_”开头,固定摄像头的视频文件是以“10_”开头
        比如:00_20241105095600_20241105101251.mp4
        10_20241106154342_20241106155959.mp4

        helle2024-11-08 15:32 回复