2014-03-31 67 views
2

这里是我的问题是涉及到同样的问题:记录桌面节省每30分钟

better way to record desktop via ffmpeg

我有这样的命令:ffmpeg -f dshow -i video="screen-capture-recorder" -r 30 -t 10 E:\test01.flv

,我很喜欢它,但我不知道我可以让它每30分钟保存一次,所以如果断电,我只会输掉最后的30分钟。

我使用C#来启动和隐藏ffmpeg cmd,所以我不知道如何使它每隔30分钟保存到相同的test01.flv

回答

2
ffmpeg -f dshow -framerate 30 -i video="screen-capture-recorder" -t 1800 output 

ffmpeg -f dshow -framerate 30 -i video="screen-capture-recorder" -t 00:30:00 output 

在C#检查,如果进程仍在运行,如果它不那么再这样就开始记录了接下来的30分钟启动它。这取决于你如何启动子进程,所以我不能提供任何代码。

+2

实际上,如果您制作Windows服务,您可以启动ffmpeg作为子进程,并且 - 一旦完成 - 对此做出反应并立即启动一个新进程。 – TomTom

+0

我不确定是否Windows服务可以通过屏幕快照... – rogerdpack

+0

为什么它在video =“screen-capture-recorder”中显示错误。在我的代码中请提出任何建议或如何将其添加到项目中?我真的很困惑它 – Ahmad

2

一种方法是使用segment muxer

ffmpeg -f dshow -framerate 30 -i video="screen-capture-recorder" -f segment \ 
-segment_time 1800 out%03d.flv 
  • docs

    请注意,如果你想为一个视频文件的精确分割,你需要输入关键帧对应于分段器预期的精确分割时间,或者分段复用器将在指定开始时间之后接下来找到的关键帧开始新分段。

  • 这将导致命名输出文件:out001.flvout002.flvout003.flv

  • 的一个问题是,如果重新调用命令,它会尝试使用相同的输出文件名。

  • 我从您的命令中删除了-r 30,并将其更改为-framerate 30作为dshow input device选项。否则,由于默认输入帧速率为25,因此ffmpeg将复制帧以达到您想要的输出帧速率30.如果您仅提供输入帧速率,则输出将使用相同的帧速率并避免丢弃或复制帧补偿。

+0

为什么它在视频=“屏幕捕获记录器”显示错误。在我的代码中。 – Ahmad

+0

@Ahmad我猜你的代码是错误的。如果没有看到您的实际代码和实际错误,则无法说出其他任何内容。 – LordNeckbeard