Estou usando coisas assim:
avconv -f x11grab -s 1024x768 -r 24 -i 0:0 -deadline realtime -b 5000000 -minrate 200000 -maxrate 40000000 recording-filename-000.webm
Onde:
-f x11grab
- impõe a captura de tela "formato" da entrada.
-s 1024x768
é a resolução do arquivo de entrada (também conhecida como área de captura). Por exemplo, é igual à resolução da área de trabalho. Se menor que isso, a área de gravação estará na esquerda e na parte superior. Eu usei a área de gravação 1024x768 neste exemplo.
-r 24
- taxa de quadros. Basicamente, 23 a 30 FPS usados por filmes reais para fornecer uma imagem de gravação suave. No entanto, para o screencast, pode ser bom reduzi-lo para obter uma imagem melhor com taxas de bits mais baixas. Eu usei 24 para capturar a tela do jogo.
-i 0:0
é uma dica para usar a tela 0: 0 como fonte (o dispositivo está na notação xorg). Se você tiver apenas 1 monitor e a configuração padrão do Xorg, 0: 0 estará ok na maioria das vezes.
-deadline realtime
- é uma dica para libvpx. Queremos captura ao vivo. Queremos desempenho em tempo real. Portanto, libvpx fará o melhor para codificar o VP8 em REALTIME. Para fazer isso, comercializa um pouco a qualidade pela velocidade. Em uma determinada taxa de bits, a qualidade será um pouco pior do que seria de maneira não em tempo real. Mas a velocidade de codificação dispararia. Portanto, no meu hardware, ele pode processar 1024x768 a 24FPS, cenas intensas, sem deixar cair nenhum quadro (embora seja recomendável uma CPU poderosa). Neste exemplo, eu queria uma captura ao vivo de qualidade decente com bom FPS e área de captura bastante grande. Portanto, o uso da CPU pelo codec pode ser um problema. É por isso que essa dica realmente é necessária para obter bons resultados.
-b 5000000
- taxa de bits alvo em bits / segundo. Usei 5Mbits para obter uma imagem mais ou menos boa de cenas bastante intensas. O codec tentará manter a velocidade média da taxa de bits do vídeo próxima a esse valor. Quanto menor esse valor, pior a qualidade e menor o arquivo. Você pode experimentar um pouco para ter uma ideia de qual taxa de bits é boa para usos específicos. Os serviços de compartilhamento de vídeo converteriam o vídeo se você exceder. Se você está prestes a usar seu próprio servidor, é você quem cuida do tráfego. Se você ultrapassar, a qualidade da imagem será ruim. Sinta-se livre para alterar o valor para ter uma idéia do que é melhor para você. Os 5Mbits foram projetados para capturar ao vivo mais ou menos agradáveis aos olhos de cenas intensas em jogos em que você não pode ver facilmente que a imagem está supercomprimida. Para capturar aplicativos estáticos, você precisará basicamente muito menos do que isso.
-minrate
200000 - é uma taxa de bits mínima permitida para codec. Dependendo da natureza das coisas que você deseja capturar, às vezes você pode forçar a taxa de bits mínima a manter uma imagem com aparência razoável, não importa o quê. Às vezes, a heurística do codec pode reduzir a taxa de bits muito abaixo dos valores desejados, dando uma imagem ruim em algumas cenas. Essa opção permite forçar o codec a manter a taxa de bits mínima, mesmo que o codec pense que a cena é simples e a taxa de bits pode ser eliminada. O valor alto desse parâmetro pode aumentar o tamanho do arquivo, impedindo que o codec use taxas de bits mais baixas.
-maxrate 40000000
- Este valor controla a taxa de bits máxima de burst em cenas intensas. Usei um valor realmente alto para permitir que o codec suba muito mais que a média desejada, se considerar que uma velocidade maior é obrigatória para manter uma qualidade decente em alguma cena. Para obter uma imagem bonita em todas as condições, é desejável definir um valor alto o suficiente (40Mbits é a velocidade do BlueRay e fará o truque). Por outro lado, se você estiver prestes a transmiti-lo usando seu próprio servidor, precisará reduzir esse valor ao custo de alguma qualidade de imagem em cenas intensas. O outro servidor pode falhar ao lidar com a taxa de bits desejada, não podendo entregá-la em tempo real aos usuários. Em seguida, o jogador enfrentaria buffer underrun (o que é irritante). Os serviços de compartilhamento de vídeo tomam conta de si próprios e geralmente convertem o vídeo para reduzir parâmetros com o custo da qualidade da imagem.
recording-filename-000.webm
- é um nome de arquivo de saída. Se você usa a extensão .webm, o ffmpeg / avconv é inteligente o suficiente para entender que você quer o WEBM. É TÃO simples - o avconv adivinha o formato desejado a partir do nome do arquivo. Portanto, os arquivos .WEBM são WEBM por dentro.
É isso aí - esse comando direciona a gravação de tela para o arquivo webm. Não são necessárias conversões extras e libvpx
é sugerido que seja o mais rápido possível. Não há som, pois não há especificação para entrada de som. Pode ou não ser o que você deseja. Para som, você também deve especificar a fonte de entrada para o fluxo de som.
PS: isso pode parecer um pouco complicado demais, mas no final do dia você pode descobrir que um tamanho não serve para todos. Portanto, para obter uma imagem bonita em todas as situações, você pode realmente querer usar alguns identificadores para codec usados e ajustá-los. O Ffmpeg fornece todas as alças que você pode precisar e muito mais que isso. É um pesado armamento de conversão e codificação de vídeo. Portanto, este exemplo é um bom ponto de partida para quem deseja fazer codificações mais ou menos avançadas e está pronto para experimentar um pouco para obter resultados realmente decentes.