Как добиться почти идеального качества записи экрана?

Как добиться почти идеального качества записи экрана?

Кто-то предложил мне направить копию немодифицированного дисплея X в файл, а затем преобразовать этот файл в видеофайл общего назначения. Какие команды мне следует использовать для этого в системе Kubuntu? (Правка: он сказал что-то о присоединении порта дисплея к файлу.) Если это невозможно, какой мой лучший вариант для отличного качества записи экрана, которая не зависит от быстрого оборудования?

Фон:Я пробовал использовать avconv с -f x11grab и некоторые программы с графическим интерфейсом. Однако, что бы я ни пробовал, в конечном видео либо есть артефакты/размытость, либо оно прерывистое (пропущенные кадры). Вероятно, это связано с ограничениями ЦП/памяти.

Цели:

  • Качество видео не должно заметно отличаться от просмотра сеанса непосредственно на экране, поскольку цель — продемонстрировать анимированное приложение.
  • Окончательное видео должно быть в общем формате, который можно отправлять пользователям Windows и использовать в Интернете. Я думаю, что H.264 MP4 должен подойти.
  • Решение не должно предполагать больших предварительных знаний. Я знаком с командной строкой и основными командами Linux, но я все еще изучаю Linux и не очень разбираюсь в видеокодеках.

Что я уже попробовал:

  • Лучшая команда на данный момент: ffmpeg -f x11grab -s xga -r 30 -i :0.0 -qscale 0.1 -vcodec huffyuv grab.avi, затем конвертировать в mp4 с помощью ffmpeg -i grab.avi -sameq -vcodec mpeg4 grab.mp4.
    • Качество картинки отличное, но на моей тестовой системе она тормозит компьютер. На более быстрой целевой системе она не тормозит, но кадры явно пропускаются, что делает видео не оченьгладкий.
    • Я все еще пытаюсь понять, как сохранить файл grab.avi в SHM, может, это поможет.
  • Использование графических регистраторов Istanbul и RecordMyDesktop
  • Простая команда: avconv -f x11grab -s xga -r 25 -i :0.0 simple.mpgиспользование avconv версии 0.8.3-4:0.8.3-0ubuntu0.12.04.1
  • Добавление -codec:copy(не удалось с: Requested output format 'x11grab' is not a suitable output format)
  • Добавление -same_quant(результат — отличное качество, но изображение очень прерывистое/пропущено много кадров)
  • Добавление -vpre lossless_ultrafast(не удалось с: Unrecognized option 'vpre', Failed to set value 'lossless_ultrafast' for option 'vpre')
  • Добавление различных значений-qscale
  • Добавление различных значений-b
  • Добавление -vcodec h264(выводит повторно: Error while decoding stream #0:0, [h264 @ 0x8300980] no frame!)
    • Примечание: h264 указан в avconv -formatsвыводе какDE h264 raw H.264 video format

решение1

Если ваш жесткий диск позволяет, вы можете попробовать сделать это следующим образом:

Сначала запишите несжатый файл:

ffmpeg -f x11grab -s SZ -r 30 -i :0.0 -qscale 0 -vcodec huffyuv grab.avi

вот SZразмер вашего дисплея (например, 1920x1080).

После этого вы сможете сжать его в любое удобное для вас время:

ffmpeg -i grab.avi grab.mkv

Конечно, вы можете изменить сжатие, выбрать кодек и т. д.

решение2

Я добился успеха с:

ffmpeg -f x11grab -video_size 1920x1080 -framerate 30 -i :1 \
       -vcodec libx264 -preset ultrafast -qp 0 -pix_fmt yuv444p \
       video.mkv

Ключевые моменты:

  • -qp 0: режим x264 без потерь
  • -preset ultrafast: наименьшее использование процессора, большой размер
  • -pix_fmt yuv444p: по умолчанию, но ffmpeg предлагает yuv420p, который с потерями

Подсказка: сделайте снимок экрана и наложение веб-камеры с помощью:

ffmpeg -f x11grab -thread_queue_size 64 -video_size 1920x1080 -framerate 30 -i :1 \
       -f v4l2 -thread_queue_size 64 -video_size 320x180 -framerate 30 -i /dev/video0 \
       -filter_complex 'overlay=main_w-overlay_w:main_h-overlay_h:format=yuv444' \
       -vcodec libx264 -preset ultrafast -qp 0 -pix_fmt yuv444p \
       video.mkv

https://trac.ffmpeg.org/wiki/Capture/Рабочий стол

[править 20180418] Обновление для Gnome Shell и Wayland:

#!/usr/bin/env python3
from dbus import SessionBus, Interface
from os import getcwd, path
from sys import argv

BUS_NAME = 'org.gnome.Shell.Screencast'
PATH_NAME = '/org/gnome/Shell/Screencast'
INTERFACE_NAME = BUS_NAME
PIPELINE='x264enc pass=qual quantizer=0 speed-preset=ultrafast ! queue ! matroskamux'

if path.isabs(argv[1]):
    name = argv[1]
else:
    name = path.join(getcwd(), argv[1])

bus = SessionBus()
screen_cast = bus.get_object(BUS_NAME, PATH_NAME)
screen_cast = Interface(screen_cast, INTERFACE_NAME)

ret, name = screen_cast.Screencast(name, {'pipeline': PIPELINE})

if not ret:
    print('Error starting screencast.')
    raise SystemExit(1)

try:
    i = input()
except (EOFError, KeyboardInterrupt):
    pass
finally:
    screen_cast.StopScreencast()

решение3

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

Используйте VNC или Teamviewer и подключитесь с вашего ноутбука или настольного компьютера к другой машине. Если у вас есть ноутбук с Windows или OSX, у вас, вероятно, есть инструменты, которые могут записывать это, и я считаю, что Teamviewer может записывать сам сеанс. Это легко попробовать, и вы можете затем решить, достаточно ли хорошее качество.

Teamviewer имеет тенденцию к масштабированию, но я не знаю, происходит ли это также с записанными сеансами.

VNC не сжимает и не масштабирует, а монитору вашего ноутбука/настольного компьютера требуется более высокое разрешение, чем у другого компьютера. Качество хорошее. Возможно, используемый вами просмотрщик VNC может записывать. Сейчас я на Ubuntu, и стандартный просмотрщик не может этого сделать.

Запись экрана для показа аудитории или в Интернете — для этого есть специальные инструменты, которые могут улавливать щелчки, следить за мышью и приближать ее, а также имеют другие опции, чтобы сделать более понятным то, что вы делаете. Я предлагаю вам взглянуть и на них. Погуглите «программное обеспечение для записи экрана».

решение4

Я использую Camtasia для записи видео моего геймплея и онлайн-видео. Я также использовал видеомагнитофон Fraps, но во время игры fps падает. Camtasia дает более высокий fps, но единственная проблема заключается в том, что каждый раз мне приходится конвертировать выходной .CAMREC в avi, как вы можете видеть навведите описание ссылки здесьвведите описание ссылки здесь. .camrec — это фирменный формат Camtasia, который нельзя воспроизвести ни на одном сторонних проигрывателе, например, Windows Media Player и VLC.

Связанный контент