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

27

Alguém sugeriu que eu direcionasse uma cópia da tela X não modificada 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? (Edit: Ele disse algo sobre como conectar 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 depende de hardware rápido?

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

Objetivos:

  • A qualidade do vídeo não deve ser notavelmente diferente de ver a sessão diretamente na tela, porque 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 usado na web. Acho H.264 MP4 deve funcionar.
  • A solução não deve presumir muito conhecimento prévio. Eu estou familiarizado com a linha de comando e com 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.avi, então converta para mp4 com ffmpeg -i grab.avi -sameq -vcodec mpeg4 grab.mp4.
    • A qualidade da imagem é ótima, mas no meu sistema de teste, ele fica atrasado no 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 muito suave .
    • Ainda estou tentando descobrir como salvar o arquivo grab.avi no SHM para ver se isso ajuda.
  • Usando gravadores Istanbul e RecordMyDesktop GUI
  • Comando simples: avconv -f x11grab -s xga -r 25 -i :0.0 simple.mpgusando o 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 irregular / faltam 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
Oleg
fonte

Respostas:

24

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

Primeiro, escreva um arquivo não compactado:

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

Aqui SZestá o seu tamanho de tela (por exemplo, 1920x1080).

Depois disso, você pode compactá-lo a qualquer momento que desejar:

ffmpeg -i grab.avi grab.mkv

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

Eddy_Em
fonte
11
Veja também: unix.stackexchange.com/a/120001/26227
Dave Jarvis
6

Eu 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 da CPU, tamanho grande
  • -pix_fmt yuv444p: o padrão, mas o ffmpeg sugere o yuv420p, que está com perdas

Dica: captura de tela e sobreposição de 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 o 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()
hdante
fonte
1

Já experimentou o rfbroxy ?

Eu o uso para gravar sessões de tela X11.

Você pode usá-lo em um modo em que apenas grave uma imagem, se houver uma MUDANÇA.

Nils
fonte
1

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 o VNC ou Teamviewer e conecte-se do seu laptop ou desktop à outra máquina. Se você tem um laptop Windows ou OSX disponível, provavelmente possui ferramentas que podem gravar isso, e acredito que o teamviewer pode gravar uma sessão. É fácil tentar, e você pode decidir se a qualidade é boa o suficiente.

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

O VNC não compacta ou escala, e o seu laptop / monitor de mesa precisa de uma resolução mais alta 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 em público ou na Web - existem ferramentas especiais para isso, que podem capturar cliques, seguir e ampliar o mouse e ter 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".

SPRBRN
fonte
0

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

Belzonsci Belzonsci
fonte