以前在Linux上用ffmpeg的x11grab选项来录屏。录制过程没有问题,但是后期转码的时候做出来的mp4文件体积非常大。一直没找到好的解决办法(对ffmpeg以及视频的编码解码不太熟悉)。
http://eradman.com/posts/screencasting.html
作者: Eric Radman
Screencasting with OpenBSD
USB Audio
Any USB microphone should appear as a new audio device. Here is the dmesg for my mic by ART:
audioctl can read off all of the specific characterisitcs of this deviceuaudio0 at uhub0 port 2 configuration 1 interface 0 "M-One USB" rev 1.10/0.01 addr 2
uaudio0: audio rev 1.00, 8 mixer controls
audio1 at uaudio0
代码: 全选
$ audioctl -f /dev/audio1 | grep record
mode=play,record
record.rate=48000
record.channels=1
record.precision=16
record.bps=2
record.msb=1
record.encoding=slinear_le
record.pause=0
record.active=0
record.block_size=1960
record.bytes=0
record.errors=0
代码: 全选
aucat -f rsnd/1 -o file.wav
代码: 全选
aucat -f rsnd/1 -i file.wav
The rate at which a framebuffer for your video card is a feature of the hardware and software your using, and it's often very slow. x11vnc will print an estimate of the banwidth for the system your running.
This is about 4fps. We can do much better by using a virtual framebuffer. Here I'm setting up a new screen, setting the background color, starting cwm and an instance of xtermx11vnc
...
09/05/2012 22:23:45 fb read rate: 7 MB/sec
代码: 全选
Xvfb :1 -screen 0 720x540x16 &
DISPLAY=:1 xsetroot -solid steelblue &
DISPLAY=:1 cwm &
DISPLAY=:1 xterm +sb -fa Hermit -fs 14 &
代码: 全选
x11vnc -display :1 &
...
11/05/2012 18:04:07 fb read rate: 168 MB/sec
代码: 全选
vncviewer localhost -encodings raw
代码: 全选
ffmpeg -f sndio -i snd/1 -y -f x11grab -r 12 -s 800x600 -i :1.0 -vcodec ffv1 ~/out.avi
Screen Capture using Xephyr
Xephyr is perhaps the easiest way to run X with a shadow framebuffer. This solution also avoids reading from the video card's RAM, so it's reasonably fast.
代码: 全选
Xephyr -ac -br -noreset -screen 800x600 :1 &
DISPLAY=:1 xsetroot -solid steelblue &
DISPLAY=:1 cwm &
DISPLAY=:1 xrdb -load ~/.Xdefaults &
DISPLAY=:1 xterm +sb -fa "Hermit" -fs 14 &
代码: 全选
ffmpeg -f sndio -i snd/1 -y -f x11grab -r 12 -s 800x600 -i :1.0 -vcodec ffv1 -acodec copy ~/out.avi
Arranging Windows
I have sometimes found it helpful to launch applications and arrange them in a specific way. This will open up a web browser listing the current directory and position windows using xdotool
代码: 全选
DISPLAY=:1 midori "file:///`pwd`" &
sleep 2
DISPLAY=:1 xdotool search --name "xterm" windowmove 0 0
DISPLAY=:1 xdotool search --class "midori" windowmove 400 0
DISPLAY=:1 xdotool search --class "midori" windowsize 400 576
Audio/Video Sync
If you find that the audio is way out of sync with the video, you can ajust the start using the -ss before the audio input to specify the number of seconds to delay. My final recording command line, that delays the audio by 0.5 seconds, writing 12fps
代码: 全选
ffmpeg -ss 0.5 -f sndio -i snd/1 -y -f x11grab -r 12 -s 800x600 -i :1.0 -vcodec ffv1 -acodec copy ~/out.avi
If you're trying to record a terminal session, tmux is able to share a session. In this way a recording of an X framebuffer can be taken without even using the screen. Start by creating the session.
代码: 全选
tmux -2 -S /tmp/tmux0
代码: 全选
tmux -2 -S /tmp/tmux0 attach
Grabbing a screenshots on Xvfb server is easily accomplished with ImageMagick's import command
代码: 全选
DISPLAY=:1 import -window root screenshot.png
The first step is to ensure that the clip begins and ends where you'd like it to. The following will make a copy of the recording starting at time 00:00 and ending at 09:45
代码: 全选
ffmpeg -i interactive-sql.avi \
-vcodec copy -acodec copy
-ss 00:00:00 -t 00:09:45
interactive-sql-trimmed.avi
mv interactive-sql-trimmed.avi interactive-sql.avi
代码: 全选
ffmpeg -i interactive-sql.avi -c:a copy -vn audio.wav
normalize audio.wav
代码: 全选
ffmpeg -i interactive-sql.avi -i audio.wav \
-map 0:0 -map 1:0 -c copy interactive-sql-normalized.avi
代码: 全选
ffmpeg -i interactive-sql-normalized.avi -c:v libvpx -b:v 1M
-c:a libvorbis -q:a 6 interactive-sql.webm
代码: 全选
ffmpeg -y -i interactive-sql-normalized.avi -c:v libx264 \
-preset slow -crf 14 -pix_fmt yuv420p -movflags +faststart \
-c:a aac -q:a 6 interactive-sql.mp4