Gravo minha área de trabalho com avconv (também conhecido como ffmpeg) e depois a dimensiono para 720p.
Eu adicionei recentemente ao meu script para que eles possam selecionar uma janela com o xwininfo e ela gravará essa janela especificamente.
No entanto, se o formato de saída não é divisível por 2, o codificador fica assustado e eu não entendo meu vídeo.
Existe uma maneira de corrigir isso dentro do ffmpeg, para que eu não precise fazer um monte de matemática manual no bash para definir os valores da escala?
É possível fazer com que o filtro de escala subtraia / adicione um à largura / altura, se estiverem desiguais? (volta?)
É possível aplicar outro filtro após a escala original que poderia fazer isso? (Isso arredondaria vídeos com tamanho de entrada desigual e sem redimensionamento)
#!/bin/bash
avconv \
-f x11grab -r $fps -s $capturesize -i :0.0$offset \
-vcodec libx264 \
-vf scale=-1:720 \
-pre:v lossless_ultrafast \
-threads 4 \
-y $@
Algumas listas de discussão antigas sugerem uma round()
função que você pode usar no filtro, mas não consigo obter a sintaxe correta. Se funcionar, um scale=round(iw,2):round(ih,2)
filtro aplicado no final resolveria todos os meus problemas de uma só vez. iw
e ih
não parece funcionar.
ceil
, em veztrunc
de obter um número par mais alto como o caso de 16: 9 480pNa verdade, o filtro pode lidar com isso diretamente. Você só precisa passar ao
-2
invés do-1
filtro: por exemploFiquei surpreso ao descobrir isso em um relatório de bug de 3 anos atrás .
fonte
Após muitas experiências, o filtro a seguir, aplicado após outros filtros de escala, arredondará a largura e a altura para 2.
É basicamente uma coisa dividida, redonda e multiplicada, eu simplesmente não tinha a sintaxe certa.
fonte