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.avi
e depois converta para mp4 comffmpeg -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.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/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 -formats
saída comoDE h264 raw H.264 video format
- Nota: h264 está listado na
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 SZ
está 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.