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

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

: 原创作品 木魚 854℃ 0评论

题外话

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

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

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

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

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

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

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

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

 

如今,十五年过去了。

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

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

更新内容

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

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

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

支持小米双摄的录像文件

感谢 @午夜学徒 的反馈。

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

修复录像文件大于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, 14次下载) vrj_win_x64_20240719 (vrj_win_x64_20240719.7z, 2.3 MB, 17次下载) 仓库地址 鱼的镜像仓库地址
喜欢 (2)
发表我的评论
取消评论
表情

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

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址