Como obter uma qualidade de gravação de tela quase perfeita?

Como obter uma qualidade de gravação de tela quase perfeita?

Alguém sugeriu que eu direcionasse uma cópia do display X não modificado para um arquivo e depois convertesse esse arquivo em um arquivo de vídeo de uso geral. Quais comandos eu usaria para fazer isso em um sistema Kubuntu? (Editar: ele disse algo sobre anexar uma porta de vídeo a um arquivo.) Se não for possível, qual é a minha melhor opção para uma gravação de tela de excelente qualidade que não dependa de hardware rápido?

Fundo:Tentei usar o avconv com -f x11grab e alguns programas GUI. No entanto, não importa o que eu tente, o vídeo resultante apresenta artefatos/desfoque ou está instável (quadros ausentes). Isto provavelmente se deve a restrições de CPU/memória.

Metas:

  • A qualidade do vídeo não deve ser muito diferente de ver a sessão diretamente na tela, pois o objetivo é demonstrar um aplicativo animado.
  • O vídeo final deve estar em um formato comum que possa ser enviado aos usuários do Windows e utilizado na web. Acho que H.264 MP4 deveria funcionar.
  • A solução não deve presumir muito conhecimento prévio. Estou familiarizado com a linha de comando e os comandos básicos do Linux, mas ainda estou aprendendo Linux e não sei muito sobre codecs de vídeo.

O que eu já tentei:

  • Melhor comando até agora: ffmpeg -f x11grab -s xga -r 30 -i :0.0 -qscale 0.1 -vcodec huffyuv grab.avie depois converta para mp4 com ffmpeg -i grab.avi -sameq -vcodec mpeg4 grab.mp4.
    • A qualidade da imagem é ótima, mas no meu sistema de teste ela fica atrás do computador. Em um sistema de destino mais rápido, ele não fica atrasado, mas os quadros são obviamente ignorados, tornando o vídeo não muitosuave.
    • Ainda estou tentando descobrir como salvar o arquivo grab.avi no SHM para ver se isso ajuda.
  • Usando gravadores GUI Istanbul e RecordMyDesktop
  • Comando simples: avconv -f x11grab -s xga -r 25 -i :0.0 simple.mpgusando avconv versão 0.8.3-4:0.8.3-0ubuntu0.12.04.1
  • Adicionando -codec:copy(falha com: Requested output format 'x11grab' is not a suitable output format)
  • Adicionando -same_quant(resulta em ótima qualidade, mas é muito instável/perdendo muitos quadros)
  • Adicionando -vpre lossless_ultrafast(falha com: Unrecognized option 'vpre', Failed to set value 'lossless_ultrafast' for option 'vpre')
  • Adicionando vários valores de-qscale
  • Adicionando vários valores de-b
  • Adicionando -vcodec h264(saídas repetidamente: Error while decoding stream #0:0, [h264 @ 0x8300980] no frame!)
    • Nota: h264 está listado na avconv -formatssaída comoDE h264 raw H.264 video format

Responder1

Se o seu HDD permitir, você pode tentar fazer desta forma:

Primeiro escreva o arquivo descompactado:

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

aqui SZestá o tamanho da sua tela (por exemplo, 1920x1080).

Depois disso, você pode compactá-lo quando quiser:

ffmpeg -i grab.avi grab.mkv

Claro, você pode alterar a compactação, selecionar o codec e assim por diante.

Responder2

Tive sucesso com:

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

Pontos chave:

  • -qp 0: modo sem perdas x264
  • -preset ultrafast: menor uso de CPU, tamanho grande
  • -pix_fmt yuv444p: o padrão, mas ffmpeg sugere yuv420p, que apresenta perdas

Dica: capture a tela e a sobreposição da webcam com:

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

[editar 20180418] Atualização para Gnome Shell e 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()

Responder3

Esta é uma solução alternativa e provavelmente não é "quase perfeita", pois pode depender da velocidade da rede ou de outros fatores que podem prejudicar o fluxo de vídeo.

Use VNC ou Teamviewer e conecte seu laptop ou desktop à outra máquina. Se você tiver um laptop Windows ou OSX disponível, provavelmente terá ferramentas que podem gravar isso, e acredito que o teamviewer pode gravar uma sessão sozinho. É fácil experimentar e você pode então decidir se a qualidade é boa o suficiente.

O Teamviewer tende a aumentar, mas não sei se isso também acontece com sessões gravadas.

O VNC não é compactado nem dimensionado, e o monitor do seu laptop/desktop precisa de uma resolução mais alta do que a da outra máquina. A qualidade é boa. Talvez o visualizador VNC que você usa possa gravar. Estou no Ubuntu agora e o visualizador padrão não pode fazer isso.

Gravação de tela para exibição para um público ou na web – existem ferramentas especiais para isso que conseguem captar cliques, acompanhar e dar zoom no mouse, além de contar com outras opções para deixar mais claro o que você está fazendo. Eu sugiro que você dê uma olhada neles também. Google para "software de gravação de tela".

Responder4

Estou usando o Camtasia para gravar meu vídeo de jogo e vídeo online. Eu também usei gravador de vídeo fraps antes, mas o fps cai durante a reprodução. O Camtasia oferece um fps mais alto, mas o único problema problemático é que toda vez que preciso converter a saída .CAMREC para avi, como você pode ver eminsira a descrição do link aquiinsira a descrição do link aqui. O .camrec é o formato proprietário do camtasia e não pode ser reproduzido em reprodutores de terceiros, como Windows Media Player e vlc.

informação relacionada