不好意思看到这一排文字-tl;dr:
-
VNC连接的帧速率是多少(以帧/秒为单位),或者更确切地说,是谁决定的:客户机还是服务器?
-
对于桌面屏幕捕获有任何其他建议-但是“正确的时间编码”/使用不合适的帧速率(具有稳定的时间段);并且有可能获得未压缩(或无损)图像序列?
简单地说,我遇到了一个典型的问题:我有时会开发硬件,并想录制一段视频
二者都
在PC上输入的命令(“桌面捕获”),
和
硬件响应(“实时视频”)。在我了解具体细节之前,下面是一大块介绍。
介绍/语境
目前我的策略是用摄像机记录硬件测试过程。(
作为“直播”视频
)-同时进行桌面捕获。摄像机产生一个29.97(30)fps的mpeg-2.avi视频;我想以与视频相同的帧速率获得一个PNG图像序列的桌面捕获。那么,我的想法是:如果两个视频的帧速率相同,那么我可以简单地
-
将桌面捕获的开始时间与“实时”视频中的匹配点对齐
-
建立一个
picture-in-picture
,桌面截图的缩小版本-作为覆盖-放在“实时”视频的顶部
-
(其中“实时”视频屏幕的一部分用作带有“桌面捕获”覆盖的视觉同步源)
-
导出“最终”组合视频,适当压缩以用于Internet
原则上,我想人们可以使用命令行工具,比如
ffmpeg
对于这个过程,我更喜欢使用一个GUI来查找两个视频的对齐起点。
最后,我还想实现的是,在导出“最终”视频时保持最高质量:“实时”视频在相机外时已经被压缩,这意味着当它通过theora.ogv编解码器时会进一步降级-这就是为什么我要保留原始视频,并使用类似命令行的命令来生成如果需要不同的压缩/分辨率,请重新编写“最终”视频。这也是我喜欢将“桌面捕获”视频作为PNG序列的原因(尽管我猜任何未压缩的格式都可以做到):我采取措施“调整”桌面,因此没有太多的渐变,无损编码(即PNG)将是合适的。
桌面捕获选项
嗯,在Ubuntu Lucid下,这个过程中有很多问题,我目前使用的是Ubuntu Lucid。(
你可以读到我的一些痛苦
10.04: Video overlay/composite editing with Theora ogv - Ubuntu Forums
)然而,其中一个关键问题是假设,两个传入视频的帧速率是相等的-实际上,通常桌面捕获的帧速率较低;更糟糕的是,通常帧是
不同步
.
因此,这就需要坐在视频编辑器前,手动剪切和编辑帧级不到一秒钟的剪辑,这就需要
小时
工作的最后是什么A 5
分钟
视频。另一方面,如果两个视频(“直播”和“拍摄”)。
做
具有相同的帧速率和同步:原则上,在视频编辑器中查找开始同步点不需要超过几分钟,而“合并”视频处理的其余部分可以通过单个命令行进行处理。这就是为什么在这篇文章中,我想把重点放在
桌面捕捉
部分。
据我所知,只有少数
可行的
(而不是
5 Ways to Screencast Your Linux Desktop
)Linux/Ubuntu中桌面捕获的备选方案(注意,我通常使用笔记本电脑作为桌面捕获的目标):
-
让您的目标PC(笔记本电脑)在其vga输出上克隆桌面;使用vga组合或vga-to-s-video硬件从vga获取视频信号;使用另一台PC上的视频捕获卡获取视频
-
使用
recordMyDesktop
在目标PC上
-
建立一个
VNC server
(
vi
no
关于Ubuntu;或
vncserver
)在要捕获的目标PC上;使用VNC捕获软件(例如
vncrec
)在另一台PC上获取/记录VNC流(
然后可以转换成视频
)
-
使用
FFMPEG
x11grab
-
DMA
recordMyDesktop
No xorg.conf (is) found in /etc/X11 (Ubuntu 10.04)
sudo Xorg -configure
compiz
doesn't get saved
/tmp/rMD-session-7247
setup Samba
gvfs
recordmydesktop --workdir /home/user/.gvfs/test\ on\ 192.168.1.100/capture/ --no-sound --quick-subsampling --fps 30 --overwrite -o capture.ogv
capture.ogv
recordmydesktop --rescue /home/user/.gvfs/test\ on\ 192.168.1.100/capture/rMD-session-7247/
--on-the-fly-encoding
--fps N
recordmydesktop --fps 25
...
Saved 2983 frames in a total of 6023 requests
...
video playback is too fast
vncrec
vino
vino configuration
vncrec-twibright/README
vncrec/sockets.c
void print_movie_frames_up_to_time(struct timeval tv)
{
static double framerate;
....
memcpy(out, bufoutptr, buffered);
if (appData.record)
{
writeLogHeader (); /* Writes the timestamp */
fwrite (bufoutptr, 1, buffered, vncLog);
}
vncrec/sockets.c
writeLogHeader
gettimeofday
wired network connection is broken
VNCast
MultiVNC
netcat
# 'target'
ffmpeg -f x11grab -b 8000k -r 30 -s 800x600 -i :0.0 -f rawvideo - | nc 192.168.1.100 5678
# 'recorder'
nc -l 0.0.0.0 5678 > raw.video #
ffplay
# 'target'
ffmpeg -f x11grab -b 500k -r 30 -s 800x600 -i :0.0 -f yuv4mpegpipe -pix_fmt yuv444p - | nc 192.168.1.100 5678
# 'recorder'
nc -l 0.0.0.0 5678 | ffmpeg -i - /path/to/samplimg%03d.png
yuv4mpegpipe
-
Experiences Producing a Screencast on Linux for CryptoTE - idlebox.net
-
The VideoLAN Forums ⢠View topic - VNC Client input support (like screen://)
-
VNCServer throttles user inpt for slow client - Kyprianou, Mark - com.realvnc.vnc-list - MarkMail
-
Linux FAQ - X Windows: How do I Display and Control a Remote Desktop using VNC
-
How much bandwidth does VNC require? RealVNC - Frequently asked questions
-
x11vnc: a VNC server for real X displays
-
HowtoRecordVNC (an X11 session) - Debian Wiki
-
Alternative To gtk-RecordMyDesktop in Ubuntu
-
(Ffmpeg-user) How do I use pipes in ffmpeg
-
(ffmpeg-devel) (PATCH) Fix segfault in x11grab when drawing Cursor on Xservers that don't support the XFixes extension