我使用命令行中的ffmpeg从一个网络摄像头捕获到一个文件,使用以下方法:
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。如果未指定年度月日部分,则采用当前的年度月日。
所以我增加了选项:
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选项会出现错误吗?
发布于 2016-07-28 04:57:09
将您的PC OS时间设置为像YYYYmmdd时间一样显示,就像hhmmss一样,那么在批处理文件中获取时间并将其分配给第一个帧就更容易了,然后使用帧号除以帧速率将每个帧的时间添加到原始时间戳中。这是我唯一能得到一个运行帐户,以显示时间的视频。
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至少我就是这样做的。
https://stackoverflow.com/questions/21262786
复制相似问题