首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >精确FFmpeg捕获启动时间

精确FFmpeg捕获启动时间
EN

Stack Overflow用户
提问于 2014-01-21 15:46:40
回答 1查看 4.2K关注 0票数 7

我使用命令行中的ffmpeg从一个网络摄像头捕获到一个文件,使用以下方法:

代码语言:javascript
复制
ffmpeg -y -rtbufsize 702000k -f dshow -s 320x240 -r 25 -i video="<device name>" -t 10 -vcodec mjpeg -q:v 2 out.mp4

在执行命令和开始捕获之间有轻微的延迟(~0.5秒)。我试图找到一种方法来准确地确定捕获的开始时间(UTC/GMT)。

我最初的想法是使用文件创建时间,因为这可能准确地反映第一个帧被编码的时间(而不是执行命令的时间)。不幸的是,文件创建时间仅限于第二个文件,这不够精确(而且我不确定这会给出一个准确的结果)。

我的下一个想法是使用ffmpegs时间戳选项。根据文档(http://www.ffmpeg.org/ffmpeg.html):

‘-时间戳时间(输出)’ 在容器中设置记录时间戳。时间的语法是:现在((YYYY-MM-DD|YYYYMMDD)[T|t| ]Z=z) 如果值为"now“,则需要当前时间。除非附加“Z”或“z”,否则时间是本地时间,在这种情况下,时间被解释为UTC。如果未指定年度月日部分,则采用当前的年度月日。

所以我增加了选项:

代码语言:javascript
复制
ffmpeg -y -rtbufsize 702000k -f dshow -s 320x240 -r 25 -i video="<device name>" -t 10 -vcodec mjpeg -q:v 2 -timestamp now out.mp4

不幸的是,ffmpeg似乎不喜欢这样:

选项时间戳(设置记录时间戳(“now”设置当前时间))不能应用于输出文件out.mp4 --您正试图将输入选项应用于输出文件,反之亦然。在该文件所属的文件之前移动此选项。 输出文件out.mp4的错误解析选项。 打开输出文件时出错:错误编号-22

文档中说,-timestamp是一个输出选项,它似乎应用于输出文件,所以我对这个错误感到困惑。

有人能建议一种准确确定捕获开始时间的方法吗?

有人知道为什么-timestamp选项会出现错误吗?

EN

回答 1

Stack Overflow用户

发布于 2016-07-28 04:57:09

将您的PC OS时间设置为像YYYYmmdd时间一样显示,就像hhmmss一样,那么在批处理文件中获取时间并将其分配给第一个帧就更容易了,然后使用帧号除以帧速率将每个帧的时间添加到原始时间戳中。这是我唯一能得到一个运行帐户,以显示时间的视频。

代码语言:javascript
复制
 REM ## GETTIME ##
 SET DTG1=Reserved
 SET DT1=%DATE%%TIME%
 IF "%DT1:~8,1%" EQU " " (SET DTG1=%DT1:~0,8%_0%DT1:~9,5%UTC) ELSE (SET DTG1=%DT1:~0,8%_%DT1:~8,6%UTC)
 REM ## END GETTIME ##

 @START /I /MIN /REALTIME c:\ff\FFmpeg.exe -y -loglevel error -rtbufsize 2.0e+009 -f dshow -r:v 10.000 -s 1920x1080 -vcodec mjpeg -i "video=Logitech HD Pro Webcam C920" -vf "fps=10.000,drawtext=fontfile=ocra.ttf:text=%DTG1%+%%{n}/10sec:fontsize=24:fontcolor=orange:x=999:y=19:box=0:boxcolor=black" -q 0 -f image2 B:\(%%d).jpg 1> nul 2> nul
 @TIMEOUT /T 3 /NOBREAK 1> nul 2> nul
 @START /I /MIN /REALTIME /W FFmpeg.exe -y -loglevel error -f dshow -ac 2 -r:a 44100 -i "audio=Line In (VIA HD Audio)" -f s16le -fs 63504000 B:\a.raw 1> nul 2> nul
 @TASKKILL /F /IM FFmpeg.exe /T 1> nul 2> nul
 @TASKKILL /F /IM FFmpeg.exe /T 1> nul 2> nul

至少我就是这样做的。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21262786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档