Efetuando cálculo de Aspect Ratio de vídeos em C/C++
Publicado por Mauricio Ferrari (LinuxProativo) em 01/02/2023
[ Hits: 2.542 ]
Blog: https://www.youtube.com/@LinuxProativo
// Calculate the Aspect Ratios of given values
function get_aspectRatio(){
var resTd = document.getElementById("msg_status");
resTd.innerHTML = '';
if( (!document.getElementById('aspect_width').value.isNumber()) || (!document.getElementById('aspect_height').value.isNumber()) ){
resTd.innerHTML =
" <div class='alert alert-warning fade in' role='alert'> Invalid width or height entered </div>";
return;
}
var w=parseInt(document.getElementById('aspect_width').value);
var h=parseInt(document.getElementById('aspect_height').value);
if(h == 0 && w == 0){
resTd.innerHTML =
" <div class='alert alert-warning fade in' role='alert'> Please enter valid width and height values! </div>";
return;
}
if(h == 0 && w != 0){
resTd.innerHTML =
" <div class='alert alert-warning fade in' role='alert'> Please enter a valid height value! </div>";
return;
}
if(h!= 0 && w == 0){
resTd.innerHTML =
" <div class='alert alert-warning fade in' role='alert'> Please enter width </div>";
return;
}
if(h == w){
aspectRatio = '1 : 1';
}else{
var mode = null;
if(h>w)
{
dividend = h;
divisor = w;
mode ='portrait';
}
if(w>h){
dividend = w;
divisor = h;
mode = 'landscape';
}
var gcd = -1;
while(gcd == -1){
remainder = dividend%divisor;
if(remainder == 0){
gcd = divisor;
}else{
dividend = divisor;
divisor = remainder;
}
}
var hr = w/gcd;
var vr = h/gcd;
aspectRatio = (hr + ' : ' + vr);
}
$('.screen_mode').text(mode);
$('.final_aspect_ratio').text( aspectRatio );
$('.final_width').text(w);
$('.final_height').text(h);
$('.final_dimensions').text(w + ' × ' + h);
}
QString StatisticsWorker::convertAspectRatio(int x, int y) {
int w = x;
int h = y;
int dividend, divisor;
// Aqui, é definido se o arquivo multimídia é orientado em retrato ou paisagem.
// Se a largura(w) é igual a altura(h) o Aspect Ratio é 1:1 e dispensa detalhes.
if (h == w) {
return "1:1";
} else {
QString mode{};
if (h > w) {
// Orientação em retrato: altura/largura
dividend = h;
divisor = w;
mode = "Portrait";
} else if (w > h) {
// Orientação em paisagem: largura/altura
dividend = w;
divisor = h;
mode = "Landscape";
}
// A string ratio é definida com a orientação definida incluindo o resultado da divisão entre a largura e a altura ou vice-versa.
QString ratio{mode + " " + QString::number(((float)dividend / (float)divisor))};
// Aqui é que vem a calcular. gcd é definido como -1, que será definido um novo valor no loop quando remainder = 0.
uint gcd = -1;
int remainder;
while (gcd == -1) {
// remainder será o valor da sobra da operação.
remainder = dividend % divisor;
if (remainder == 0) {
// gcd será o divisor perfeito para a largura e a altura.
gcd = divisor;
} else {
// A próxima operação sempre será o resultado do divisor pela sobra.
dividend = divisor;
divisor = remainder;
}
}
QString hr = QString::number(w / gcd);
QString vr = QString::number(h / gcd);
return QString::fromLatin1("%1 (%2)").arg(hr + ":" + vr, ratio);
}
}
Adicionando e listando as regras criadas na lista de exceções do slackpkg usando egrep e sed
Skype Atualizado no Ubuntu e Linux Mint
Integrando AppImage no Debian, Ubuntu e Linux Mint
Três Formas Fáceis de usar Super Usuário pelo Terminal no Linux
C compiler Cannot create executable?
Microsoft Visual Studio Code no GNU/Linux
Apostila de ncurses bem completa
CodeBlocks - IDE C++ no Ubuntu 12.04
KDE Plasma - porque pode ser a melhor opção de interface gráfica
Gentoo: detectando impressoras de rede e como fixar uma impressora por IP
Como o GNOME conseguiu o feito de ser preterido por outras interfaces gráficas
Por que sua empresa precisa de uma PKI (e como automatizar EMISSÕES de certificados via Web API)
Instalando NoMachine no Gentoo com Systemd (acesso Remoto em LAN)
Gentoo: Trocando wpa_supplicant pelo iwd no NetworkManager (Systemd)
Instalar Linux em notebook Sony Vaio VPCEG13EB (10)
Vou destruir sua infância:) (6)
Quando vocês pararam de testar distros? (24)









