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
- aplica o "formato" de captura de tela da entrada.
-s 1024x768
é a resolução do arquivo de entrada (também conhecido como área de captura). Por exemplo, igual a resolução de desktop. Se menor que isso, a área de gravação seria à esquerda e superior. Eu usei 1024x768 área de gravação neste exemplo.
-r 24
- framerate. Basicamente, 23 a 30 FPS usados por filmes reais para dar uma imagem de gravação suave. No entanto, para screencast pode ser bom reduzir isso para obter uma melhor imagem em taxas de bits menores. Eu usei 24 para fazer captura de tela do jogo.
-i 0:0
é uma sugestão para usar o display 0: 0 como fonte (o dispositivo está na notação xorg). Se você tem apenas 1 monitor e configuração padrão do Xorg, 0: 0 estará ok na maioria das vezes.
-deadline realtime
- é uma dica para o libvpx. Nós queremos a captura ao vivo. Queremos desempenho em tempo real. Então libvpx fará melhor codificar o VP8 em REALTIME. Para fazer isso, ele troca a qualidade pela velocidade. A uma determinada taxa de bits a qualidade será um pouco pior do que seria na maneira não-realtime. Mas a velocidade de codificação dispararia. Assim, no meu hardware, ele pode compactar 1024x768 @ 24FPS, cenas intensas, sem deixar cair nenhum quadro (embora seja recomendável usar CPU potente). Neste exemplo, eu queria uma captura ao vivo de qualidade decente em bons FPS e área de captura bastante grande. Portanto, o uso da CPU pelo codec pode ser um problema. É por isso que essa dica realmente precisava de bons resultados.
-b 5000000
- taxa de bits de destino em bits / segundo. Eu usei 5Mbits para obter uma imagem mais ou menos boa de cenas bastante intensas. O codec tentará manter a velocidade média de bitrate 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 a ideia de qual taxa de bits é boa para usos específicos. Os serviços de compartilhamento de vídeo baixariam o vídeo se você ultrapassasse o limite. Se você está prestes a usar o próprio servidor, cabe a você cuidar do tráfego. Se você não conseguir, a qualidade da imagem será ruim. Sinta-se à vontade para alterar o valor para ter uma ideia do que é melhor para você. Os 5Mbits foram feitos para uma captura ao vivo mais ou menos agradável de cenas intensas em jogos onde você não pode ver facilmente que a imagem está supercomprimida. Para capturar aplicativos estáticos, você precisará basicamente de menos do que isso.
-minrate
200000 - é uma taxa de bits mínima permitida para o codec. Dependendo da natureza da coisa que você deseja capturar, às vezes você pode querer forçar uma taxa de bits mínima para manter uma aparência razoavelmente correta. Às vezes, a heurística do codec pode reduzir a taxa de bits muito abaixo dos valores que você pode querer, dando uma imagem ruim em algumas cenas. Esta opção permite forçar o codec a manter uma taxa de bits mínima, mesmo se o codec achar que a cena é simples e a taxa de bits pode ser descartada. O valor alto desse parâmetro pode aumentar o tamanho do arquivo, impedindo que o codec use taxas de bits inferiores.
-maxrate 40000000
- Esse valor controla a taxa de bits máxima de burst em cenas intensas. Eu usei um valor realmente alto para permitir que o codec fosse muito mais alto do que a média desejada, se considerarmos que a velocidade mais alta é obrigatória para manter a qualidade decente em alguma cena. Para obter uma imagem de boa aparência em todas as condições, é desejável definir isso alto o suficiente (40Mbits é a velocidade do tipo BlueRay e fará o truque). Por outro lado, se você estiver prestes a fazer stream usando seu próprio servidor, você terá que reduzir esse valor ao custo de alguma qualidade de imagem em cenas intensas. Outro servidor pode falhar em lidar com a taxa de bits de burst desejada, sendo incapaz de entregá-lo em tempo real aos usuários. Em seguida, o jogador enfrentaria o buffer underrun (que é irritante). Os serviços de compartilhamento de vídeo cuidam por conta própria e geralmente convertem o vídeo para baixo para parâmetros mais baixos, ao 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 WEBM. É TÃO simples - avconv adivinha o formato desejado do nome do arquivo. Então, os arquivos .WEBM são WEBM dentro.
É isso - este comando direciona a gravação de tela para o arquivo webm. Não são necessárias conversões extras e libvpx
é sugerido para ser 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ê quer. Para som, você também precisa especificar a fonte de entrada para o fluxo de som.
P.S. isso pode parecer um pouco complicado demais, mas no final do dia você pode descobrir que um tamanho não serve para todos. Então, para obter uma imagem de boa aparência em todas as situações, você pode realmente querer ter algumas alças para o codec usado e querer ajustá-las. O Ffmpeg oferece todas as alças que você pode precisar e muito mais do que isso. É um armamento pesado de conversão e codificação de vídeo. Portanto, este exemplo é um bom ponto de partida para aqueles que querem fazer codificações mais ou menos avançadas e está pronto para experimentar um pouco para obter resultados realmente decentes.