Кто-то предложил мне направить копию немодифицированного дисплея 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
- Примечание: h264 указан в
решение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.