Alguém sugeriu que eu direcionasse uma cópia da tela não modificada do X 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?
Histórico: 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 / manchas ou está instável (quadros ausentes). Isso provavelmente se deve a restrições de CPU / memória.
Metas:
- A qualidade do vídeo não deve ser visivelmente diferente de ver a sessão diretamente em uma tela, porque o objetivo é demonstrar uma inscrição.
- O vídeo final deve estar em um formato comum que possa ser enviado aos usuários do Windows e usado na web. Acho que o H.264 MP4 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 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 comffmpeg -i grab.avi -sameq -vcodec mpeg4 grab.mp4
.- A qualidade da imagem é ótima, mas no meu sistema de teste está atrasada em relação ao computador. Em um sistema de destino mais rápido, ele não atrasa, mas os quadros são obviamente pulados, tornando o vídeo não muito suave .
- Ainda estou tentando descobrir como salvar a captura. arquivo avi para SHM para ver se isso ajuda.
- Usando gravadores de 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 - Adicionar
-codec:copy
(falha com:Requested output format "x11grab" is not a suitable output format
) - Adicionar
-same_quant
(resulta em grande qualidade, mas é muito instável / faltam muitos quadros) - Adicionar
-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!
)- Observação: h264 está listado em saída como
DE h264 raw H.264 video format
- Observação: h264 está listado em saída como
Resposta
Se o seu HDD permitir, você pode tentar fazer desta forma:
Primeiro grave o arquivo não compactado:
ffmpeg -f x11grab -s SZ -r 30 -i :0.0 -qscale 0 -vcodec huffyuv grab.avi
aqui SZ
é o tamanho da tela (por exemplo 1920×1080).
Depois disso, você pode compactá-lo a qualquer momento que quiser:
ffmpeg -i grab.avi grab.mkv
Claro, você pode alterar a compactação, selecionar codec e assim sobre.
Comentários
Resposta
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 x264 sem perdas
- -preset ultrarrápido: menor uso de CPU, tamanho grande
- -pix_fmt yuv444p: o padrão, mas ffmpeg sugere yuv420p, que apresenta 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 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()
Comentários
- como pode eu determino meu tamanho de tela?
Resposta
Esta é uma solução alternativa, e provavelmente não “quase perfeita” como pode depender da velocidade da rede ou de outros fatores que podem atrapalhar o fluxo de vídeo.
Use o VNC ou Teamviewer e conecte-se de seu laptop ou desktop à outra máquina. Se você tiver um laptop Windows ou OSX disponível, você Você provavelmente tem ferramentas que podem gravar isso, e eu acredito que o próprio teamviewer pode gravar uma sessão. É fácil de tentar e você pode decidir se a qualidade é boa o suficiente.
O Teamviewer tende a aumentar, mas não sei se isso acontece com as sessões gravadas também.
O VNC não compacta ou dimensiona e o monitor do seu laptop / desktop precisa de uma resolução maior 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 podem capturar cliques, seguir e ampliar o mouse e tem 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”.
Resposta
Você já tentou rfbroxy ?
Eu o uso para gravar sessões de tela X11.
Você pode usá-lo em um modo onde ele grava apenas uma imagem, se houver uma ALTERAÇÃO .
−-type=WHAT
WHAT = tela é até padrão, de acordo com a página do manual.
Comentários
- Isso ‘ é interessante. Como você faz isso?
- @GunarGessner deve ser o comportamento padrão. Um método alternativo é reagir a eventos de mouse / keyborad. Isso pode ser ainda melhor se você tiver um relógio na tela e não quiser fazer uma imagem quando apenas o relógio mudar …
Resposta
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 o fps cai durante a reprodução. Camtasia oferece um fps mais alto, mas o único problema é que toda vez que 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 reprodutor de terceiros, como Windows Media Player e vlc.
ffmpeg -f x11grab -s 2560x1080 -r 30 -i :0.0 -qscale 0 -vcodec huffyuv grab.avi