具有时间同步功能的ffmpeg视频重放需要实际记录时间

时间:2018-07-16 20:02:24

标签: ffmpeg timestamp synchronization video-capture mpeg

我正在尝试使用ffmpeg重放时间同步的多个视频文件,但是从零开始的视频开始时间阻止了这种情况。

我有ffmpeg命令可以成功地将Microsoft Windows 7桌面捕获到视频文件中,并使用时间戳记值(请参见下文)重播它,但是内部时间戳记始终从零开始。 ffmpeg如何显示录制视频的实际时间(而不是显示视频开始后的时间,即零)?

例如,如果视频是从上午10:47开始录制的,则ffplay命令在播放过程中应显示类似于“ 10:47:31”的时间戳(而不是“ 00:00:31”)。 / p>

视频捕获命令:

ffmpeg -f gdigrab -offset_x 0 -offset_y 0 -video_size 1920x1080 -i desktop -c:v libx264 -preset medium -f mpegts -framerate 24 -y fileA.ts

播放命令:

ffplay -vf "drawtext=fontfile=/windows/fonts/arial.ttf: text='%{pts\:gmtime\:0\:%H\\\:%M\\\:%S}':box=1:x=(w-tw)/2:y=h-(2*lh)" fileA.ts

我在先前的命令中尝试失败的参数(包括将它们移动到命令中的不同位置):

-timestamp now

-vsync 0

-copyts

(无论我在何处放置此参数,每次尝试使用-copy都会产生有关“非严格单调的PTS”或“输出流中的非单调DTS”的错误)

-filter_complex "[0:v] setpts=PTS"

最终目标是捕获四个视频文件(记录在四台不同的计算机上,并且可能具有不同的开始时间),然后以时间同步方式重播所有四个视频文件(仅使用基于零的开始时间是不可能的)

例如,我已经成功使用以下命令以2x2的格式重放了四个视频文件(我添加了-ss参数以演示可以移动重放的开始时间)。不幸的是,它们始终与从零开始的第一视频帧进行时间同步(因此它们都从视频文件的开头开始播放)。我需要将重放与每个视频的实际录制时间进行时间同步。如果从时间10:47:00、10:47:51、10:48:44和10:49:01开始捕获了四个视频,我希望能够重播所有视频,以便所有视频都显示(如果一个视频正在显示10:48:33,则所有视频将显示同一时间,或者如果该时间不可用,则所有屏幕将显示黑屏)。

ffmpeg -ss 00:00:30 -i fileA.ts -i fileB.ts -i fileC.ts -i fileD.ts -filter_complex "[0:v][1:v]hstack[top];[2:v][3:v]hstack[bottom];[top][bottom]vstack[v]" -map "[v]" -timestamp now -f mpegts - | ./ffplay - -x 1920 -y 1080

理想情况下,我还希望能够使用实时值(例如“ ffplay -ss 10:48:00 ...”之类的东西)在其他位置开始视频重播,但最坏的情况是可以编写脚本来进行所需的时间值转换。

我的ffmpeg版本是2018年4月22日的Windows 7 64位静态内部版本“ N-90810-g153e920892”(从https://www.ffmpeg.org/download.html下载)

0 个答案:

没有答案