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

27

Кто-то предложил мне направить копию неизмененного 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
Олег
источник

Ответы:

24

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

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

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

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

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

ffmpeg -i grab.avi grab.mkv

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

Eddy_Em
источник
1
Смотрите также: unix.stackexchange.com/a/120001/26227
Дейв Джарвис
6

Я имел успех с:

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

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

  • -qp 0: режим без потерь x264
  • -быстрый сверхбыстрый: наименьшее использование процессора, большой размер
  • -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/Desktop

[edit 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()
hdante
источник
1

Вы пробовали rfbroxy ?

Я использую его для записи сеансов экрана X11.

Вы можете использовать его в режиме, когда он только записывает изображение, если есть ИЗМЕНЕНИЕ.

Nils
источник
1

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

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

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

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

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

SPRBRN
источник
0

Я использую Camtasia для записи видео геймплея и онлайн-видео. Я также использовал видео рекордер Fraps раньше, но FPS падает во время воспроизведения. Camtasia дает более высокую частоту кадров, но единственная неприятная проблема заключается в том, что каждый раз, когда я должен конвертировать вывод .CAMREC в avi, как вы можете видеть в описании ссылки здесь, введите здесь описание ссылки . .Camrec является частным форматом camtasia и не может воспроизводиться никакими сторонними проигрывателями, такими как Windows Media Player и vlc.

Belzonsci Belzonsci
источник