digitalFAQ.com Forums [Archives]

digitalFAQ.com Forums [Archives] (http://www.digitalfaq.com/archives/)
-   Convertir y Codificar Video (Español) (http://www.digitalfaq.com/archives/espanol/)
-   -   Mis script para mencoder en linux (http://www.digitalfaq.com/archives/espanol/9241-mis-script-mencoder.html)

sertinell 04-21-2004 05:00 PM

Mis script para mencoder en linux
 
Quote:

Advertencia a los usuarios

Este método usa MEncoder como motor para la codificación de vídeo, el cual es un front-end de la librería libavcodec para linux. Este proyecto está en estado alfa y es aún inestable. Aunque hemos procurado no explotar en demasía los filtros internos de MEncoder, pudieran obtenerse resultados no satisfactorios. Sin embargo, esto NO ES DE NINGUNA MANERA culpa de los "quasi estandar" KVCD o KSVCD los cuales, trabajando con encoders totalmente cualificados, son sinónimo indiscutible de elevada calidad.
Hola, esta es mi primera colaboracion con el foro, espero qe no sea la ultima, suelo usar un par de scripts para pasar de avi's a mpg, y hoy un compañero me a animado a publicarlos:

:Es para hacer SKVCD vamos mpeg-2 con bitrate maximo de 2500 y multiplexado para SVCD. Se graba como SVCD con el programa qe quieras, como si es el nero( espero qe no :@ )

http://sertinell.spymac.net/kvcd.sh

La forma de ejecucion es
Code:

./kvcd.sh archivo.extension
./kvcd.sh --help #ayuda

Basicamente trabaja con cualquier cosa qe pueda reproducir mplayer, MOV's OGM y MKV tambien :D

################################################## ############
¯_________________________________________________ ________________________________

:Este es para pasar todos los archivos de un directorio a DVD

La forma de ejecucion,tras editarlo y poner las variables de forma correcta:
Code:

./dir2dvd extension
http://sertinell.spymac.net/dir2dvd

Si lo utilizais para hacer SVCD psosiblemente vuestro DVD no sea capaz de leerlo, pocos DVD's soportan elbitrate a 8000 en SVCD, os dara errores en escenas de accion.

Basicamente trabaja con cualquier cosa qe pueda reproducir mplayer, MOV's OGM y MKV tambien :D

Hay algunas modificaciones pendientes de realizar, como la obtencion automatica de los valores, etc.

Gran parte de los scripts (como la linea de comandos de mencoder) se la debo a Prodater64 y a Maurus, basicamente en las opciones de tratamiento del video intenta imitar enla medidade lo posible ( copy&paste :twisted: ) a sus utilidades ;)

Saludos y espero qe os sea util a mas de uno ;)

Editado: El desarrollo del script ya no lo llevo yo solo, en los foros de gentoo estamo intentando mejorarlo, y lo estamos consiguiendo. :D
Quejas,DUDAS y PETICIONES AQUI Es para tenerlo todo reunido y qe sea mas facil trabajar ;)

P.D: La advertencia de arriba la he copiado del post de Maurus, por si fuera una norma del foro o algo. Personalmente considero a mencoder MUY utilizable ;)

Prodater64 04-21-2004 08:07 PM

Re: INtentando Hacer script basado en VMesquita GUI
 
Quote:

Originally Posted by sertinell
Ahora otra pregunta. Cada grado de OVERSCAN(en avsinth) eran 4 u 8 piexeles? es qe no lo recuerdo con seguridad.

8 píxeles.

A ver si este post te ayuda con el tema de cropping.

Editado: Link reparado.

sertinell 04-22-2004 12:13 AM

El, linnk no va

GRACIAS

kwag 04-22-2004 12:18 AM

Quote:

Originally Posted by sertinell
El, linnk no va

GRACIAS

Suave con el vino Prodater :mrgreen:

-kwag

Prodater64 04-22-2004 07:22 AM

http://www.digitalfaq.com/archives/error.gif

Homer has the link corrected.

sertinell 04-22-2004 08:20 AM

Prodater graciaspor el link pero hay un problema. Eso es para avisinth yo estoy en linux y quiero qe reconozca tanto la superficie con bandas negras como la resolucion original a traves de transcode o Mplayer. Estoy analizando unos cuantos scripts por el estilo qe e encontrado en internet en cuanto tenga algo claro lo posteo.

Confirmarme si esta ecuacion para el AVbitrate es correcto.

Tamañofinal(MB)*1000/Duracion(sec)

Eso debe darme el bitrate medio por segundo en KB no ?

SALUDOS

Prodater64 04-22-2004 08:41 AM

Quote:

Originally Posted by sertinell
Prodater graciaspor el link pero hay un problema. Eso es para avisinth yo estoy en linux y quiero qe reconozca tanto la superficie con bandas negras como la resolucion original a traves de transcode o Mplayer. Estoy analizando unos cuantos scripts por el estilo qe e encontrado en internet en cuanto tenga algo claro lo posteo.

Ya se que es un script de avisynth, pero no puedes "razonar" o "deducir" algo a partir de ello. (Traducir, si se puede decir así, desde un código a otro)

Quote:

Originally Posted by sertinell
Confirmarme si esta ecuacion para el AVbitrate es correcto.

Tamañofinal(MB)*1000/Duracion(sec)

Eso debe darme el bitrate medio por segundo en KB no ?

SALUDOS

El multiplicador no tendría que ser 1024?

@Kwag: Una ayudita con el autocrop, tú seguro que sabes como.

sertinell 04-22-2004 09:14 AM

Cierto 1024.

Jeje Si ya lo estoy mirando para intentar sacar algo en claro de el. Pero resulta qe es la primera vez qe intento progamar algo(mas alla del ola mundo, cuestionarios diversos o un jueguecillo del ahorcado con basic) y no lo llevo muy bien :oops: . No se si lo del auto crop lo puede acer BASH por si solo, si necesita ayuda de mplayer, si es una funcion de mplayer. O si simplemente debo asignar variable a la salida de algun comando de transcode. Creo qe debe de poder acerse solo o por lo menos sin mplayer, ya qe la GUI de VMesquita lo ace bajo wine(no tiene mplayer ni mencoder disponibles)

Saludos y gracias de nuevo.

P.D. Si supiera expresarme bien en ingles daria el follon por el foro de mencoder :wink:

Prodater64 04-22-2004 09:26 AM

Yo no se mucho de programación
ya que hace años que no me dedico
a ello y cuando lo hice, sólo fue por Hobby.
Pero siempre trato de usar un poco
la sesera. En este caso, el FitCD del que
evolucionó el Moviestacker, que es
(o era al menos) de código público
(bajo ese tipo de licencias), calcula
el film pixel, esto es según creo sin
las bandas negras. Trata de conseguir
las fuentes y ver cómo lo hace.

sertinell 04-22-2004 10:46 AM

He tirado de la ayuda mplayer y mencoder y he ayado esto
http://www.mplayerhq.hu/DOCS/HTML/en...dvd-mpeg4-crop

Estoy seguro qe deberia de serme util ya qe el propio mlayer me muestra lo qe
es la peli ya sin bandas negras. El problema:

No se ni como decirle a bash qe coja esos valores como variables. y segundo
estomuestra el rectangulo de la imagen frame a frame por lo qe deduzco qe
no me servira cojer el de los pimero 10 frames por ejemplo (algunos creditos
tiene el fondo negro y esto quizas confunda a mplayer) , el archivo qe tengo ahora mismo no tiene el bandas negras perome sirve igual.

Es mas creo qe no necesito eliminar las bandas negras(mirando el temp.conf de VMesquita no las elimina) con lo cual solo necesito una
manera de averiguar la resolucion original sin necesidad de qe intervenga el usuario.
El comando tcprobe -i corte.avi devuelve lo siguiente
Code:

[tcprobe] RIFF data, AVI video
[avilib] V: 23.976 fps, codec=DIV3, frames=448, width=640, height=352
[avilib] A: 48000 Hz, format=0x2000, bits=0, channels=5, bitrate=448 kbps,
[avilib]    438 chunks, 1046370 bytes, CBR
[tcprobe] summary for corte.avi, (*) = not default, 0 = not detected
import frame size: -g 640x352 [720x576] (*)
      frame rate: -f 23.976 [25.000] frc=1 (*)
      audio track: -a 0 [0] -e 48000,0,5 [48000,16,2] -n 0x2000 [0x2000] (*)
                  bitrate=448 kbps
          length: 448 frames, frame_time=41 msec, duration=0:00:18.685

Ahora simplemente tengo qe averiguar la forma de qe bash tome width y
height y las asigne a mis variables $ALTURA y $BASE

Saludos

Prodater64 04-22-2004 12:49 PM

Por favor, crea otro post en donde podamos leer normalmente!!!!
Gracias.

Prodater64 04-22-2004 01:15 PM

Justo que necesitaba verlo!!!
No puedes agregar en arguments las variables width y height y asignarles el valor que te da, aparentemente, avilib.
Esto no lo hace el MencodeMe de VMesquita?
Has analizado sus archivos de configuración?

sertinell 04-22-2004 01:29 PM

El arxivo de configuracion e simplemente un arxivo de texto con las opciones a dar a mencoder. Con las variables dentro. Era justo el texto con los comando qe tenia n el post de antes,si quieres lo vuelvo a poner :P. Supongo qe lo Hara lo qe es la propia GUI. Pero como VMesquita no es partidaria de compartir el codigo fuente(si lo compartiera no estaria haciendo el script, directamente compilaria su gui en mi PC).

Ya he conseguido qe el script cree el archivo de configuracion y se lo de a mencoder. Pero aun no he avanzado en lo del autocrop. He mirado un par de script qe utilizan "tcprobe -i" para ayar los valores de cropping pero utilizan perl y me esta constando trabajo analizarlos. Ademas de qe ahora mismo no tengo ningun archivo con bandas negras a mano,solo un clip qe tengo para pruebas(el de los vampiritos, lo mismo lo conoces ;)).

Creo qe esta noche podre postear la primera version del script 8) , aunqe haya qe acer el crop a mano. :roll: y quizas lo utilice yo solo . :(

Saludos

Prodater64 04-22-2004 01:58 PM

Yo creo que es el ffmpeg el que obtiene el valor correcto del film pixel, cuando puede, lo deduzco de:

Code:

(tomado de la documentación online de ffmpeg)
You must specify the size of the image with the `-s' option if ffmpeg cannot guess it.

Para ver en qué modo lo utiliza VM, puedes hacer lo siguiente.
1 - Utiliza el MencodeMe.
2 - Selecciona tu fuente (un sample).
3 - Realiza tus settings.
4 - Codifica.
5 - Analiza la línea de comandos que te aparece en el log, así como todos los argumentos que le son pasados al encoder.
6 - Cancela la codificación. Si has seleccionado 2 pasos (mejor así), cancela 2 veces ya que si no continuará con el 2º paso a pesar de haber cancelado el primero.
7 - Verás que las casillas de crop que antes estaban sombreadas (grayed), ahora no lo están.
8 - Cambia los valores por defecto.
9 - Vuelve a codificar.
10 - Analiza el log y fíjate cuáles son los argumentos que han tomado los valores que tú le has puesto.

No se si servirá, pero es una posibilidad.

sertinell 04-22-2004 02:42 PM

eso es basicamente lo qe hago
Os dejo el script por ahora funciona perova lentisimo adema no guarda el arxivo donde deberia sino en test.avi. Tengo qe revisarlo pero bueno yo os lo pongo.

http://sertinell.spymac.net/conf.sh

SALUDOS

sertinell 04-22-2004 04:21 PM

Hola: he arreglado lo del archivo de salida.
lo de la lentitud no es problema del script. Mas bien debe ser problema de la linea de comandos qe se le envia. pero utilizo la plantilla de VMesquita de DVD a KVCD introduciendo los valores de:
MAXRATE
vrc_buf_size=917 este es el valor para KVCD no ?

ASi qe no se a qe se debe esta escasez de velocidad.

El problema de la resolucion sin bandas negras loqe hago es piyar los valores de la GUI de VMesquita.

SALUDOS

Prodater64 04-22-2004 04:34 PM

Quote:

Originally Posted by sertinell
...
vrc_buf_size=917 este es el valor para KVCD no ?

vrc_buf_size= the vbv buffer size (VCD=327, SVCD=917, DVD=1835)

Tomado de aquí.

sertinell 04-22-2004 04:55 PM

Juer mira qe toy expeso.

GRACIAS.

Prodater64 04-22-2004 07:47 PM

A ver si puedes ver como usar el filtro de video (vf) siguiente:
Quote:

cropdetect[=0-255]

Calcula los parámetros necesarios de recortado y muestra los parámetros recomendados en la salida estandar. El umbral puede ser especificado opcionalmente desde nada (0) hasta todo (255). (por defecto: 24)
Puedes usar el comando
Quote:

-vf cropdetect=help
a ver si te ayuda en algo.

sertinell 04-24-2004 07:01 PM

Respecto a lo posteado para la ecuacion delbitrate medio. No observamos, ni yo ni prodater, qe el numero qe solemos asignar para el bitrate medio viene dado n kilbits y 8 kilobits son igual a un KiloBte, entonces qedaria asi:

tamaño deseado(MB)*1024/duracion(sec)*8-audiobitrate=bitrate medio.

no he tenido tiempo de mirar lo del crop

SALUDOS

P.d tengo qe actualizar el script con las nuevas templates de VMesquita.

Prodater64 04-24-2004 10:22 PM

Buen Link

sertinell 05-01-2004 03:59 PM

Ya he averiaguado como hacer el crop. No es precisamente un auto crop pero simplemente dandole la resolucion original deberia ser capaz de hallar los valores para el aera ocupada por la peli.

Ecuacion:
Code:

RVO*320/RHO=NUM

RVD/320=A
RHD/240=B

NUM*A*B=RVDS

Leyenda
Quote:

RVO=Resolucion Vertical Origen
RVD=Resolucion Vertical Destino (ej:288)
RHO= Resolucion Horizontal Origen
RHD=Resolucion Horizontal CON BANDAS( ej:576)
RVDS= ResolucionVertical Destino Sin bandas

A y B son simples Razones de proporcionalidad
Quote:

(RVDS/B)/RHD Deberia de dar 1.333
Esto creo qe solo funciona con aspectratio=1.333. No se si funcionara para 16:9. Lo he probado con un avi sin bandas negras. no se si sirve para DVD con bandas negras ya qe mi lector de DVD esta roto :(.

Bueno espero qe le sea util a alguien.

###############################################
###############################################

Buenoahora hablemos del script. Ya codifica el video utilizando las platillas de MencodeME0.22.

Saludos

sertinell 05-02-2004 09:53 AM

Bueno pues ya tengo el grueso del script finalizado ahora tan solo falta automatizarlo un poco mas si cabe.

Caracteristicas:

-Codifica el archivo a mpeg-1 o mpeg-2 segun se le indiqe.
-multiplexa segun el formato elejido (a veces es necesario multiplexar mpeg-1 como SVCD)
-Codifica el audio segun el bitrate elegido
-Es capaz de hallar la resolucion de destino a partir de la resolucion original.

TODO
#####
-Automatizar la obtencion de los valores de resolucion original y duracion del video.

-Actualizar a las plantillas de MencodeME0.23

##########################################
##########################################

Una pregunta: ¿Cuando mencoder cambia el frame rate actua como la funcion convertFPS de AVS opor elcontrario como assumeFPS?

Saludos y Gracias

sertinell 05-02-2004 11:31 AM

Hola de nuevo.lo estoy probando con una peli de 100 min y la velocidad de mencoder es de 10 fps :(. Asta hace un momento con mi video para pruebas, muxo mas complicado qe la peli qe esta pasando, la velocidad era de 20 fps. Aun asi voy a dejarlo estar a ver por donde sale.

Prodater64 05-02-2004 11:41 AM

Quote:

Originally Posted by sertinell
Hola de nuevo.lo estoy probando con una peli de 100 min y la velocidad de mencoder es de 10 fps :(. Asta hace un momento con mi video para pruebas, muxo mas complicado qe la peli qe esta pasando, la velocidad era de 20 fps. Aun asi voy a dejarlo estar a ver por donde sale.

Bueno, esto lo contesté recién pero no se adonde fue a parar el envío.
En la última versión del mencodeme, viene una compilación del mencoder.exe, sin soporte para SSE.
Será eso, ya hay un par de posts, inclusive yo también lo he notado.

sertinell 05-02-2004 11:56 AM

Prodater mi mencoder lo compile ayer yo mismo desde el CVS. De MencodeMe le script solo coje las settings(el archivo temp.conf) y la forma de generarlo.

De todas formas lo dejare qe termine de codificar y volvere a actualizar desde el CVS.

Saludos y gracias

sertinell 05-02-2004 06:42 PM

lo encontre!!

http://www.kvcd.net/forum/viewtopic....475a7897f41c03

Ahora solo me qeda aplicarlo en mi script. :twisted:

Saludos :twisted:

sertinell 05-03-2004 04:14 PM

Bueno pues el resize ya funciona correctamente (hasta qe se demuestre lo contrarrio :!: ) :D :D :D :D

por ahora solo funciona con avi'ssin bandas negras, o VOB's cropados al ripear. Cuando tenga tiempo pondre la funcion crop(ahota estoy de examnes) y entonces creo q si deberia ser capaz de codificar desde DVD y ademas "on the fly".

Bueno a ver si os ayuda a alguno.

Prodater64 05-03-2004 04:29 PM

Quote:

Originally Posted by sertinell
Bueno pues el resize ya funciona correctamente (hasta qe se demuestre lo contrarrio :!: ) :D :D :D :D

por ahora solo funciona con avi'ssin bandas negras, o VOB's cropados al ripear. Cuando tenga tiempo pondre la funcion crop(ahota estoy de examnes) y entonces creo q si deberia ser capaz de codificar desde DVD y ademas "on the fly".

Bueno a ver si os ayuda a alguno.

Menos mal que estás de exámenes, que si no...
Bueno, te felicito, vas avanzando a grandes pasos.
Hasta pronto.

sertinell 05-03-2004 04:58 PM

Bueno gracias :oops: :oops: :oops: :oops: Y sobre todo viniendo de ti :oops: :oops:

Prodater64 05-04-2004 06:10 PM

@ Sertinell: Tu trabajo es loable y te apoyo, pero por qué no dedicas esfuerzos a mejorar el MencodeMe para linux desarrollado por VMesquita, que ya está funcionando, te ahorrarías un montón de dolores de cabeza a la vez que dedicas potencial, a por ejemplo testear filtros u otras cosas. Es una pregunta, no te ofendas por favor, que ya te digo que admiro tu esfuerzo.

sertinell 05-05-2004 12:20 AM

Dices qe funciona?

Pues vamos a elo. Mi objetivo on era otro qe utilizar las configuraciones de mencodeME pero en linux. Si dices qe funciona me ahorro muxisimo trabajo.

Saludos y gracias.

sertinell 05-05-2004 08:20 AM

Pues nada qe no hay tu tia. Me sigue dando el mismo error qe antes. Las GTK estan bien instaladas.

El error creo qe viene por la forma de compilar. Creo qe vmesquita utiliza atlon y por lo tanto compila para atlon. Para compilar para i686 debe introducir las opciones en el compilador. Pero eso ya se lo expuse a kwag en otro post.

De todas formas ya qe me he puesto con el script. Y estoy aprediendo un monton prefiero seguir con ello.

Ademas el tarballz qe hay para linux corresponde a al version 0.2. Al menos sus templates.

Saludos y gracias por tu interes.

P.D. no tienes qe pedir disculpas. Se qe parece una santa gilipoyez hacer un script, cuando se supone qe mencodeME funciona en linux.

Prodater64 05-05-2004 11:05 AM

Pues a seguir con esto, que aunque no tengo linux, te ayudaré en lo que pueda.
:D
Un abrazo amigo.

Prodater64 05-05-2004 11:26 AM

Acabo de leer esto en inglés:

Quote:

Originally Posted by vmesquita
I'm gald you enjoyed. :D

The code is still cross-plataform (or should be) :lol: I just stopped compiling because the only person that seems interested (sentinell) couldn't make it work in his MDK box. But it might have been something overflowing... :?

I'll compile 0.23 for linux as soon as I have some time. :wink:

Por si no lo entiendes dice que la única persona interesada en la compilación para Linux eres tú (sertinell) pero que no lo puedes hacer funcionar en tu MDK. En un breve plazo compilará la versión 0.23 para Linux (es decir que todavía no la había actualizado).
Veremos que pasa.

sertinell 05-05-2004 11:45 AM

Jeje si ya decia yo qe en este foro habia poco linuxero.

Llevo tiempo sin leer el hilo de MencodeMe. Tan solo para descargar las nuevas versiones y templates.

De todas formas. No es problema qe mencodeME no rule enmi MDK, lo hace bajo wine y es capazde genera el temp.conf. Una vez se tiene el temp.conf ,como conozco la linea de comandos de mencoder no hay ningun problema. Pero esto ya se ha convertido casi en un reto personal.

Ahora estoy buscando la forma de utilizar tuberias para qe el framerate no tenga posibilidad de desincronizarse, ayer ,manteniendo el framerate original se desincronizo por culpa de los numerosos frames "rotos" qe contenia el video. Las tuberias se basan en hacer pasar el video antes por mplayer y qe este sirva el audio a toolame y el video a mencoder(el framerate lo determina mplayer) y asi la desincronizacion deberia ser casi imposible.

Saludos

P.D. Si no usas el pc para jugar (aun asimuxos juegosrulanen linux) podrias ir planteandote el salto a linux :P . Se te ven maneras ;)

sertinell 05-07-2004 06:20 PM

Ummm
Acabo de descubrir, leyendo en el foro ingles(por qe no pasare mas por alli), qe mencoder es capaz de codificar el audio a mp2. Segun habia leido en las man pages no podia :?. Los problemas de sincronizacion deberian qedar totalmente solucionados.

Aunqe ahora qe se qe el problema es solo, unica y exclusivamente de mi MDK y qe me he planteado el cambio a overclockix(o gentoo :roll: ) quizas aparqe un muxo el curro qe me estoy dando con el script. Por otra parte me parece qe el script puede seguir siendo util. Ya qe MencodeMe solo codifica video. Y a traves del script yo puedo indicar qe lo haga todo automaticamente. Ahora qe ya en conseguido lo del resize,qe era lo mas laborioso y con todo lo qe e aprendido. En cuanto me mire lo del audio a traves de mencoder de manera seria y lo añada. Simplemente ire actualizando la parte del script correspondiente a las plantillas de VMesquita. Quizas no sea lo mismo qe una GUI pero si me es igual de util...

Como decia Nietzsche(qe por saco me esa dando el jodido estos dias :evil: ):
Quote:

...Si se me demuestra qe los instintos, calificados de malos por la moral trdicional, aumenta la vitalidad del hombre diré si al mal y al pecado"
Y así acabó el buen hombre.

Bueno un saludo y perdonar por la parrafada.

sertinell 05-07-2004 06:44 PM

Rectifico debo aprender a leer:
Quote:

acodec=<value>
Audio codec (default: mp2):
mp2
MPEG Layer 2
mp3
MPEG Layer 3
ac3
AC3
adpcm_ima_wav
IMA Adaptive PCM (4bits per sample, 4:1 compression)
Saludos

Prodater64 05-07-2004 06:49 PM

Quote:

Originally Posted by sertinell
...
Si no usas el pc para jugar (aun asimuxos juegosrulanen linux) podrias ir planteandote el salto a linux . Se te ven maneras

Por qué lo dices?


Quote:

Originally Posted by sertinell
...
Ya qe MencodeMe solo codifica video. Y a traves del script yo puedo indicar qe lo haga todo automaticamente.

Estoy completamente de acuerdo contigo.
Aunque está hecho para Windows, dale una ojeada a este hilo.

sertinell 05-07-2004 07:01 PM

Pues parece qe te gusta lo de investigar y ademas no le tienes panico a la linea de comandos. Si no tienes necesidad imperiosa de utilizar algun programa qe solo funcione en windows y qe no tenga sustituto en GNU/linux. Ademas seria perfecto tenerte como aliado en la investigacion del video en linux :lol: . Si no llegan a hacer una version de mencoder para windows muxos de nosotros ni lo ubieramos conocido (yo lo conocia pero no era consciente de su potencial, al principio intente rular tmpgenc bajo wine :?). Hay un mundo entero por descubrir :D

Respecto alhilo qe me has dejado... eso es precisamente lo unico qe hace mi script correctamente 8) . Codificar el video el audio y multiplexar :D. Lo del framerate, pues creo qe la solucion va a ser codificar el audio con mencoder a la vez qe el video, supongo qe el se encargara de mantenerlos sincronizados.

Saludos y hasta mñn.


All times are GMT -5. The time now is 09:16 AM  —  vBulletin © Jelsoft Enterprises Ltd

Site design, images and content © 2002-2024 The Digital FAQ, www.digitalFAQ.com
Forum Software by vBulletin · Copyright © 2024 Jelsoft Enterprises Ltd.