Linux ffmpeg record screen

Capturing your Desktop / Screen Recording

For the sake of brevity, these commands do not specify any additional encoder settings. For more info about H.264 encoding, see the H.264 encoding guide.

By default, these commands will use the x264 encoder, which should be reasonably fast on modern machines. See Lossless Recording if you need to improve performance.

Linux

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

This will grab the image from desktop, starting with the upper-left corner at x=100, y=200 with a width and height of 1024⨉768.

If you need audio too, you can use ALSA (see Capture/ALSA for more info):

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

Or the pulse input device (see Capture/PulseAudio for more info):

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

macOS

ffmpeg -f avfoundation -list_devices true -i ""

This will enumerate all the available input devices including screens ready to be captured.

Once you’ve figured out the device index corresponding to the screen to be captured, use:

ffmpeg -f avfoundation -i ":" output.mkv

This will capture the screen from and audio from into the output file output.mkv .

Windows

Use DirectShow

ffmpeg -f dshow -i video="screen-capture-recorder" output.mkv

This will grab the image from entire desktop. You can refer to a ​ list of alternative devices.

ffmpeg -f dshow -i video="UScreenCapture":audio="Microphone" output.mkv

If you want to capture the audio that is playing from your speakers you may also need to configure so-called «Stereo Mix» device.

ffmpeg -f dshow -i video="UScreenCapture" -f dshow -i audio="Microphone" output.mkv

You can list your devices with:

ffmpeg -list_devices true -f dshow -i dummy

Use built-in GDI screengrabber

You can also use gdigrab as input device to grab video from the Windows screen.

To capture all your displays as one big contiguous display:

ffmpeg -f gdigrab -framerate 30 -i desktop output.mkv

If you want to limit to a region, and show the area being grabbed:

ffmpeg -f gdigrab -framerate 30 -offset_x 10 -offset_y 20 -video_size 640x480 -show_region 1 -i desktop output.mkv

To grab the contents of the window named «Calculator»:

ffmpeg -f gdigrab -framerate 30 -i title=Calculator output.mkv

Use Windows 8+ Desktop Duplication API

Windows 8 introduced a new way of capturing whole desktops: The Desktop Duplication API

Читайте также:  Sublime text linux debian

FFmpeg implements support for it in the form of the ddagrab filter.

It provides the user with on-gpu D3D11 textures, in the form of ffmpeg D3D11VA frames, which can then be directly encoded by a compatible hardware encoder:

ffmpeg -init_hw_device d3d11va -filter_complex ddagrab=0 -c:v h264_nvenc -cq:v 20 output.mkv

Or downloaded and processed as usual, though with a bit of overhead compared to pure on-GPU processing:

ffmpeg -filter_complex ddagrab=0,hwdownload,format=bgra -c:v libx264 -crf 20 output.mkv

Hardware Encoding

You can use hardware acceleration to speed up encoding and reduce the load on your CPU. For example, with NVIDIA hardware encoding:

ffmpeg -f gdigrab -framerate 30 -i desktop -c:v h264_nvenc -qp 0 output.mkv

Lossless Recording

If your CPU is not fast enough, the encoding process might take too long. To speed up the encoding process, you can use lossless encoding and disable advanced encoder options, e.g.:

ffmpeg -video_size 1920x1080 -framerate 30 -f x11grab -i :0.0 -c:v libx264rgb -crf 0 -preset ultrafast -color_range 2 output.mkv

-crf 0 tells x264 to encode in lossless mode; -preset ultrafast advises it to do so fast. Note the use of libx264rgb rather than libx264 ; the latter would do a lossy conversion from RGB to yuv444p (8 bit yuv444p is not enough to preserve 8 bit RGB, 10 bit YCbCr is needed). -color_range 2 is needed because otherwise it will write full range RGB yet will tag it as limited range (this was fixed in 7ca71b79f2b3256a0eef1a099b857ac9e4017e36 and thus is no longer needed).

The encoder should be fast enough on most modern hardware to record without any framedrop, and even leave enough CPU headroom for other applications.

If you’re going to archive the recording or are concerned about file size, re-encode it losslessly again, but with a slower preset. Note that since the initial recording was lossless, and the re-encode is lossless too, no quality loss is introduced in this process in any way.

ffmpeg -i output.mkv -c:v libx264rgb -crf 0 -preset veryslow output-smaller.mkv

Источник

Скринкастинг в Linux (FFmpeg)

К сожалению, имеющиеся в Linux инструменты для screencasting’а (recordmydesktop, xvidcap, istanbul, wink) делают свою работу не лучшим образом. Качество видео и аудио потоков оставляет желать лучшего. К тому же, нередко имеет место рассинхронизация видео и звука.

Подготовка

Чтобы сделать скринкаст хорошего качества, можно воспользоваться FFmpeg. Единственное только что, FFmpeg придётся самим собирать. На самом деле, это очень просто. Пересборка нужна затем чтобы включить опцию «—enable-x11grab» и ряд кодеков. К тому же, у вас в системе будет самая свежая версия кодеков, что уже очень хорошо. Ведь, как известно, FFmpeg — это вечная альфа.

Screencasting:

Мы будем делать screencasting в два этапа:

  • Захват видео и звука без потерь.
  • Кодирование в более приемлемый для хранения формат, ибо результирующий файл из предыдущего пункта будет достаточно объёмный.
Читайте также:  Linux как смонтировать раздел

Зачем нужно разбивать процесс на два этапа? Дело в том что процесс сжатия видео потребляет много ресурсов компьютера. И делать это «на лету» (захватывать видео и тут же сжимать его) способен далеко не любой компьютер. То есть, в противном случае мы и будем иметь рассинхронизацию аудио и видео потоков, частичную потерю видео-потока и т.п. «сладости». Если мы хотим получить качественный скринкаст, придётся это делать в два этапа.

1. Захват потока

Синтаксис использования FFmpeg таков:

ffmpeg [input options] -i [input file] [output options] [output file]
ffmpeg -f alsa -ac 2 -i pulse -f x11grab -r 30 -s 1280x1024 -i :0.0 -acodec pcm_s16le \ -vcodec libx264 -vpre lossless_ultrafast -threads 0 output.mkv

После введения этой команды начнётся захват видео и аудио потоков на вашем компьютере. Для завершения процесса необходимо нажать клавишу » q «.

В приведённом примере мы захватываем аудио-поток поступающий с сервера pulseaudio и кодируем его в сырой PCM (два каната, то есть, стерео). Видео-поток мы захватываем с частотой 30 кадров в секунду и разрешением 1280×1024 с дисплея :0.0 и кодируем его без потерь в h264 используя libx264. Если использовать, как в примере, » -threads 0 «, FFmpeg сам определяет количество потоков. Результат помещается в контейнер Matroska (.mkv). Результирующий файл «output.mkv» будет сохранен в текущем каталоге. Ничего сложного.

Захватывать можно не весь экран, а какую-то определённую область. Для этого необходимо добавить +X,Y после :0.0 , то есть чтобы получилось что-то вроде:

Это значит, что мы будем захватывать прямоугольник размером 800×600 пикселей со смешением по X в 200 и по Y 100 пикселей соответственно.

Так же, можно изменить частоту кадров на желаемую.

2. Кодирование

После того как мы получили огромный файл со скринкастом, нам нужно его сжать. А выбор метода сжатия нужно выбирать в зависимости от нужд.

Пример 1:

ffmpeg -i output.mkv -acodec libfaac -ab 128k -ac 2 -vcodec libx264 -vpre slow -crf 22 \ -threads 0 our-final-product.mp4

В данном примере аудио-поток мы кодируем в AAC с битрейдом 128k на канал. Видео-поток же мы кодируем используя кодек высокого качества H.264 используя параметр «slow» и CRF указали равным 22 . Чем меньше CRF, тем выше качество, но больше результирующий файл и время кодирования. Разумный диапазон значений от 18 до 28 . Результатом будет файл our-final-product.mp4 помещённый в контейнер MP4. FFmpeg определяет тип контейнера автоматически по расширению. То есть, если указать расширение результирующего файла .mkv, то будет использован контейнер «Матрёшка«.

Пример 2:

ffmpeg -i output.mkv -acodec libvorbis -ab 128k -ac 2 -vcodec libtheora -b 1000k our-final-product.ogg

Тем, кто предпочитает полностью свободные форматы, как раз будет по душе этот пример. Аудио-поток кодируется используя vorbis, а видео — theora. Для видео указан битрейд 1000k и контейнер .ogg. Качество звука в данном случае будет на высоте, а вот видео. К сожалению, vorbis во всех отношениях уступает распространённым кодекам.

Пример 3:

ffmpeg -ss 00:00:10 -t 00:07:22 -i output.mkv -acodec libvorbis -ab 128k -ac 2 -vcodec libx264\ -vpre slow -crf 22 -threads 0 our-final-product.mkv

Так как вначале скринкастинка вы некоторое время будете готовиться, да и в конце тоже будет кусочек ненужного видео, эти моменты можно вырезать используя -ss и -t . В примере кодирование начинается спустя 10 секунд и кодируются последующие 7 минут 22 секунды потока.

Читайте также:  Linux ubuntu настроить wifi

Так же, в данном примере используются вместе Vorbis/H.264/Matroska — оптимальное сочетание качества!

Пример 4:

ffmpeg -i output.mkv -acodec libmp3lame -ab 128k -ac 2 -vcodec libxvid -qscale 8 -me_method full -mbd\ rd -flags +gmc+qpel+mv4 -trellis 1 -threads 0 our-final-product.avi

В итоге мы получаем типичный AVI с XviD и MP3 . Параметр -qscale подобен описанному ранее CRF. То есть, точно так же, чем он ниже, тем выше качество, дольше кодирование, больше файл. Сами выбираем, что нам нужно. Используется avi-контейнер.

Источник

How to record the desktop with FFmpeg on Linux

Record a video of your desktop — and whatever happens on it — is almost dead simple with FFmpeg. I’m using one of the latest versions (as of this writing), 4.1.6 on a Linux box (Debian). I will also be using PulseAudio as the audio framework and x11grab for capturing the video part.

ffmpeg -video_size [resolution] -framerate [framerate] -f x11grab -i :0.0 -f pulse -ac 2 -i [source] output.mkv

As you may see you need to know the resolution, the video frame rate and the audio source.

Getting the proper video resolution

Let’s start with the resolution. Type xrandr to print a list of supported video modes. For example:

Screen 0: minimum 8 x 8, current 1366 x 768, maximum 32767 x 32767 LVDS1 connected 1366x768+0+0 (normal left inverted right x axis y axis) 344mm x 193mm 1366x768 60.06*+ 1360x768 59.80 59.96 1024x768 60.00 800x600 60.32 56.25 640x480 59.94 DP1 disconnected (normal left inverted right x axis y axis) HDMI1 disconnected (normal left inverted right x axis y axis) VGA1 disconnected (normal left inverted right x axis y axis) VIRTUAL1 disconnected (normal left inverted right x axis y axis) 

The first mode in the list is the highest, let’s go with it.

Getting the proper PulseAudio source

The command pactl list sources will print a list of supported PulseAudio sources (i.e. inputs). In my case I get the following:

Source #0 State: SUSPENDED Name: alsa_output.pci-0000_00_1b.0.analog-stereo.monitor Description: Monitor of Built-in Audio Analog Stereo . [many other infos here] . 

The source 0 is the only one available in my system. That’s good. You should always record audio from the Monitor source, which basically contains what you are hearing over your speakers.

Packing the values together

The complete command, in my case, looks something like this:

ffmpeg -video_size 1366×768 -framerate 25 -f x11grab -i :0.0 -f pulse -ac 2 -i 0 output.mkv

A frame rate of 25 fps is a common choice that works best in most cases.

Источник

Оцените статью
Adblock
detector