准确的FFmpeg捕获开始时间

准确的FFmpeg捕获开始时间,ffmpeg,Ffmpeg,我使用命令行中的ffmpeg从网络摄像头捕获到文件,使用以下命令: ffmpeg -y -rtbufsize 702000k -f dshow -s 320x240 -r 25 -i video="<device name>" -t 10 -vcodec mjpeg -q:v 2 out.mp4 如果该值为“now”,则使用当前时间。时间是当地时间,除非“Z”或 附加“z”,在这种情况下,它被解释为UTC。如果年-月-日部分 未指定它以当前的年-月-日为单位 因此,我添加了选项:

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

ffmpeg -y -rtbufsize 702000k -f dshow -s 320x240 -r 25 -i video="<device name>" -t 10 -vcodec mjpeg -q:v 2 out.mp4
如果该值为“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-y-rtbufsize 702000k-f dshow-s 320x240-r 25-i video=“”-t 10-vcodec mjpeg-q:v 2-timestamp now out.mp4
不幸的是,ffmpeg似乎不喜欢这样:

选项timestamp(设置录制时间戳('now'以设置 当前时间)无法应用于输出文件out.mp4--您是 正在尝试将输入选项应用于输出文件,反之亦然。移动 此选项位于它所属的文件之前

分析输出文件out.mp4的选项时出错

打开输出文件时出错:出现错误号-22

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

有人能提出一种方法来准确确定捕获开始时间吗


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

将您的PC操作系统时间设置为类似于
YYYYmmdd
time-like
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

至少我是这样做的。

那么你是想算出第一帧的挂钟时间?我想你可以把时间戳作为叠加添加到帧中。。。可能是related@rogerdpack“那么你是想算出第一帧的挂钟时间吗?”——是的,准确地说——精确到几帧。正在从一个脚本调用该命令,该脚本需要知道这一次,以便进行后续处理。在图像上覆盖时间没有帮助,因为脚本无法使用此功能。虽然您可能会添加“showinfo”过滤器,然后轮询以查看第一帧何时添加到其输出文件中…我可能建议您在FFmpeg邮件列表上重新询问…FFmpeg首次启动时,它会输出流信息,如“开始时间”也许可以用这个…嗨@Adam。我正在尝试实现类似的目标:我录制音频并希望有时间戳,至少是开始的时间。你成功了吗?
 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