¿Como pasar variables a programas en consola con bash? Duda con alias.

Imagen de Jakeukalane
0 puntos

Buenas:
Este es primera pregunta en estos foros que hago, así que disculpadme si cometo alguna infracción pues me he leído casi todas las reglas (hay miles, son muy pijoteros siempre en los foros) y he buscado y no encontrado en el foro en google etc...
Ahí va:

Cuando quiero utilizar un programa en línea de comandos (estilo ffmpeg, convert, gifsicle):

por ejemplo en gifsicle para sacar imágenes fotograma a fotograma de un gif animado:

gifsicle animacionaextraer.gif '#0' > primerfotograma.gif 

dónde animacionaextraer es el nombre del archivo, lo que esta dentro de '#' es el fotograma que queremos y el > desemboca en el archivo final.

Mi problema (del que también pondré ejemplos para convert y para ffmpeg" es que quiero extraer todos los fotogramas de un gif, y eso es muy pesado. Con lo cual probé con esto:

for ((i = 30; i (menor que) 135; i ++)); do gifsicle anim.gif '#i' (mayor que) $'i'.gif; done

con numerosas variantes de comillas ' ` {} etc. sin obtener resultado porque no pilla la variable i, ni en un sitio ni en otro.

Mi pregunta es: ¿Que hay que hacer para que haga caso de la i y vaya haciendo según va recorriendo el bucle esto?:

gifsicl[..] '#1' > 1.gif
gifsicl[..] '#2' > 2.gif
gifsicl[..] '#3' > 3.gif
gifsicl[..] '#35' > 35.gif
gifsicl[..] '#60' > 60.gif
gifsicl[..] '#100' > 100.gif
gifsicl[..] '#N' > N.gif

Bueno esa es la primera pregunta que tiene que ver con que no tengo ni idea de bash sólo lo que pone en los manuales que encuentro en google.

Mi siguiente duda es con los alias:

hay un comando de ffmpeg que es así:

ffmpeg -i video.avi -vn -ar 44100 -ac 2 -ab 192 -f mp3 audio.mp3

* Video original: video.avi * Códec de audio: mp3 * Bitrate del audio: 192kb/s * Archivo generado: audio.mp3

Y quiero hacer una alias de manera que yo ponga

extraersonido video.avi audio.mp3

y me coja todo lo demás. Ahora me tengo que conformar con

alias extraer='ffmpeg -i'

Yo lo que he pensado es algo así:

fmpeg -i variable1.avi -vn -ar 44100 -ac 2 -ab 192 -f mp3 variable2.mp3

y de alguna forma pasarle los argumentos con el valor o contenido de la variable.

Alguna solución?

En convert me pasa tres cuartos de lo mismo al tener que poner lo que va a variar en una posición determinada no hay manera de hacer una alias, y como tampoco consigo pasar bucles con valores pues no consigo nada.

Gracias por su ayuda

Imagen de cousteau
+1
0
-1

No he entendido muy bien el mensaje porque los < y > son interpretados como llaves de HTML, pero el caso es que sería algo así:

for (( i=0; i<100; i++ ));
do
    gifsicle animacionaextraer.gif "#$i" > "$i.gif";
done

Tienes que poner los $ sin comillas o con comillas dobles "". (La ventaja de usar comillas dobles es que no hay problemas si el nombre de archivo tiene espacios, pero en este caso daría igual). Los punto y coma sólo hacen falta si lo quieres poner todo en una línea.

Aunque yo me instalaría imagemagick y haría directamente:

convert animacionaextraer.gif %d.png

que además te convierte a png. Si usas %d.gif creo que también funciona, y te convierte el gif a varios gifs estáticos. Puedes usar otros formatos como %03d, que mostraría 3 dígitos rellenos con ceros (000, 001, 002...)

Para crear un gif, si mal no recuerdo,

convert -delay 100 img1.png -delay 10 img2.jpg img3.gif -delay 200 img4.bmp -loop 3 animado.gif

PD: ¿Has visto los botones de "<" y ">" que aparecen arriba al editar el mensaje?


«E: dpkg was interrupted, you must manually run 'dpkg --configure -a' to correct the problem» significa que dpkg se ha interrumpido y que tienes que ejecutar "sudo dpkg --configure -a" para corregir el problema.
+1
0
-1

«E: dpkg was interrupted, you must manually run 'dpkg --configure -a' to correct the problem» significa que dpkg se ha interrumpido y que tienes que ejecutar "sudo dpkg --configure -a" para corregir el problema.
Imagen de cousteau
+1
0
-1

En cuanto a lo de los alias (que no me había fijado), yo me haría un script en bash en su lugar. Ejemplo:

#!/bin/sh
ffmpeg -i "$1" -vn -ar 44100 -ac 2 -ab 192 -f mp3 "$2"

Le das permisos con chmod +x y lo guardas como /usr/local/bin/extraersonido.

Otra opción es reordenar los argumentos, creo que también se puede poner

ffmpeg -vn -ar 44100 -ac 2 -ab 192 -f mp3 -i video.avi audio.mp3

en cuyo caso bastaría con ahcer el alias quitando lo que va después de -i.

Con respecto a lo de convert, es que no lo había entendido muy bien. Creo que con imagemagick se pueden seleccionar qué marcos en concreto quieres extraer, pero no sé cómo. En todo caso, usando gifsicle, con el comando que te pasé en el mensaje anterior debería funcionar. Ponlo en un script, con el mismo procedimiento, usando "$1" en donde quieras utilizar el primer argumento, "$2" por el segundo, etc. Como antes, ponlas entre comillas para evitar problemas con los espacios.


«E: dpkg was interrupted, you must manually run 'dpkg --configure -a' to correct the problem» significa que dpkg se ha interrumpido y que tienes que ejecutar "sudo dpkg --configure -a" para corregir el problema.
+1
0
-1

«E: dpkg was interrupted, you must manually run 'dpkg --configure -a' to correct the problem» significa que dpkg se ha interrumpido y que tienes que ejecutar "sudo dpkg --configure -a" para corregir el problema.