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

24

Alguém sugeriu que eu direcionasse uma cópia da exibição X não modificada para um arquivo e depois convertesse esse arquivo em um arquivo de vídeo de propósito geral. Quais comandos eu usaria para fazer isso em um sistema Kubuntu? (Edit: Ele disse algo sobre a anexação de uma porta de exibição para 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: Eu tentei usar o avconv com -f x11grab e alguns programas GUI. No entanto, não importa o que eu tente, o vídeo resultante tem artefatos / desfocagem ou está instável (quadros ausentes). Isto é provavelmente devido a restrições de CPU / memória.

Objetivos:

  • A qualidade do vídeo não deve ser perceptivelmente 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 pode ser enviado para usuários do Windows e usado na web. Eu acho que o MP4 H.264 deve 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.avi , em seguida, 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 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 os gravadores GUI do Istanbul e RecordMyDesktop
  • Comando simples: avconv -f x11grab -s xga -r 25 -i :0.0 simple.mpg usando 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 / falta 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 repetidas: Error while decoding stream #0:0 , [h264 @ 0x8300980] no frame! )
    • Nota: o h264 está listado em avconv -formats output como DE h264 raw H.264 video format
por Oleg 25.04.2013 / 06:04

5 respostas

22

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

Primeiro, escreva um arquivo descompactado:

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

aqui SZ é seu tamanho de exibição (por exemplo, 1920x1080).

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

ffmpeg -i grab.avi grab.mkv

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

    
por 01.03.2014 / 10:21
3

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 principais:

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

Dica: tela de captura 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

link

[editar 20180418] Atualização para o Gnome Shell e o 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()
    
por 01.01.2017 / 19:09
1

Você já tentou rfbroxy ?

Eu uso para gravar sessões de tela X11.

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

    
por 29.04.2013 / 16:17
1

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

Use 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 tem ferramentas que podem gravar isso, e acredito que o TeamViewer pode gravar uma sessão em si. É fácil tentar, e você pode decidir se a qualidade é boa o suficiente.

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

O VNC não é compactado ou dimensionado, e seu monitor de laptop / desktop precisa de uma resolução maior 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 uma audiência 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 nesses também. Google para "software de gravação de tela".

    
por 07.08.2013 / 15:19
0

Estou usando o Camtasia para gravar meu vídeo de jogo e vídeo on-line. Eu também usei o gravador de vídeo fraps antes, mas o fps caiu durante o jogo. Camtasia dá um fps maior, mas a única questão problemática é que toda vez eu devo converter a saída .CAMREC para avi como você pode ver em insira a descrição do link aqui insira a descrição do link aqui . O .camrec é o formato proprietário do camtasia e não pode ser reproduzido em nenhum player de terceiros como o Windows Media Player e o vlc.

    
por 17.07.2017 / 12:53