天天看點

使用FFmpeg進行螢幕錄像和錄音

有些時候我們需要對螢幕進行錄制,比如制作視訊教程,錄制直播等。然而這方面的軟體多是收費的,即使是免費試用版的還有水印,特别煩人。下面介紹使用FFmpeg進行螢幕錄制的方法。

Windows

先安裝dshow軟體 Screen Capturer Recorder, 項目位址:https://sourceforge.net/projects/screencapturer/files/ 。然後檢視可用裝置名字:

ffmpeg -list_devices true -f dshow -i dummy
           

會顯示

DirectShow video devices (some may be both video and audio devices)
“screen-capture-recorder”    //視訊裝置
DirectShow audio devices
“virtual-audio-capturer”  //音頻裝置
           

就能看到咱剛安裝的Screen Capturer Recorder,如果你有其他的裝置,比如攝像頭,麥克風等,也會顯示。

錄制視訊(預設參數)

ffmpeg -f dshow -i video="screen-capture-recorder" v-out.mp4
           

錄制聲音(預設參數)

ffmpeg -f dshow -i audio="virtual-audio-capturer" a-out.aac
           

同時錄制聲音和視訊(預設參數)

ffmpeg -f dshow -i video="screen-capture-recorder":audio="virtual-audio-capturer" av-out.mp4
           

檢視視訊錄制的可選參數

ffmpeg -f dshow -list_options true -i video="screen-capture-recorder"
           

我的裝置有如下顯示

DirectShow video device options (from video devices)
Pin “Capture” (alternative pin name “1”)
pixel_format=bgr0 min s=1×1 fps=0.02 max s=1680×1050 fps=30
pixel_format=bgr0 min s=1×1 fps=0.02 max s=1680×1050 fps=30
pixel_format=bgr24 min s=1×1 fps=0.02 max s=1680×1050 fps=30
pixel_format=rgb555le min s=1×1 fps=0.02 max s=1680×1050 fps=30
pixel_format=rgb555le min s=1×1 fps=0.02 max s=1680×1050 fps=30
pixel_format=rgb8 min s=1×1 fps=0.02 max s=1680×1050 fps=30
pixel_format=yuv420p min s=1×1 fps=0.02 max s=1680×1050 fps=30
           

示例視訊錄制(依次設定:分辨率 幀率 像素格式)

ffmpeg -f dshow -video_size 1680x1050 -framerate 30 -pixel_format yuv420p -i video="screen-capture-recorder" v-out.mp4
           

檢視音頻裝置可選參數

ffmpeg -f dshow -list_options true -i audio=virtual-audio-capturer
           

指定參數錄制音視訊

ffmpeg -f dshow -video_size 1680x1050 -framerate 30 -pixel_format yuv420p -i video="screen-capture-recorder":audio="virtual-audio-capturer" av-out.mp4
           

Linux

使用x11grab,相信Linux使用者動手能力的比較強,自行檢視安裝方法吧,點我檢視。

安裝完之後,可以錄制了

ffmpeg -video_size 1024x768 -framerate 25 -f x11grab -i :0.0+100,200 v-out.mp4
           

上面的參數,指的是從螢幕的左上角(x=100, y=200)的位置,錄制分辨率為1024×768的視訊。

可以使用ALSA同時錄制聲音

ffmpeg -video_size 1024x768 -framerate 25 -f x11grab -i :0.0+100,200 -f alsa -ac 2 -i hw:0 av-out.mkv
           

也可以使用Pulse聲音輸入裝置

ffmpeg -video_size 1024x768 -framerate 25 -f x11grab -i :0.0+100,200 -f pulse -ac 2 -i default av-out.mkv
           

MacOS

使用avfoundation ,然後檢視可用裝置

ffmpeg -f avfoundation -list_devices true -i ""
           

我的電腦顯示如下

[AVFoundation input device @ 0x7f83e150fd00] AVFoundation video devices:
[AVFoundation input device @ 0x7f83e150fd00] [0] FaceTime HD Camera
[AVFoundation input device @ 0x7f83e150fd00] [1] Capture screen 0
[AVFoundation input device @ 0x7f83e150fd00] [2] Capture screen 1
[AVFoundation input device @ 0x7f83e150fd00] AVFoundation audio devices:
[AVFoundation input device @ 0x7f83e150fd00] [0] Built-in Microphone
           

選用可用的相應的音視訊裝置,進行螢幕錄制

ffmpeg -f avfoundation -i "<video device index>:<audio device index>" av-out.mov
           

-i參數後指定裝置序列号,比如使用“[1] Capture screen 0”和“[0] Built-in Microphone”

ffmpeg -f avfoundation -i "1:0" Screen.mkv     # 注意啊 1:0 外面有個雙引号
           

這裡使用的預設參數進行錄制的,我電腦生成的是AVC和Vorbis編碼的mkv檔案。

提示

如果電腦組態比較低,可能不能很好的錄制螢幕的同時進行音視訊編碼。這種情況下,可以先錄制未壓縮的音視訊,最後再進行音視訊編碼壓縮。

Linux:

ffmpeg -framerate 25 -video_size 1024x768 -f x11grab -i :0.0+100,200 -f alsa -ac 2 -i pulse -vcodec libx264 -crf 0 -preset ultrafast -acodec pcm_s16le output.mkv ffmpeg -i output.mkv -acodec ... -vcodec ... final.mkv
           

Windows:

ffmpeg -f dshow -i video="screen-capture-recorder":audio="Microphone" -vcodec libx264 -crf 0 -preset ultrafast -acodec pcm_s16le output.mkv
           
ffmpeg -i output.mkv -acodec ... -vcodec ... final.mkv
           

無損格式錄制

如果想要完美的螢幕錄制效果,可以使用x264進行無損編碼

ffmpeg -video_size 1920x1080 -framerate 30 -f x11grab -i :0.0 -c:v libx264 -qp 0 -preset ultrafast capture.mkv
           

“-qp 0″是x264無損編碼模式,“-preset ultrafast”表示最快的速度編碼。

參考:http://trac.ffmpeg.org/wiki/Capture/Desktop

本文最初于2016年發表于個人網站CucerZone,那個網站已經停用了,把有用的東西挪過來。如果文章描述有使用錯誤,歡迎交流。