Arquivo de etiquetas: cli

Deep

O comndo deep é uma daquelas ferramentas tipo canivete suiço, pequeno, multifunções e extremamente prático. Não é um verdadeiro binário, porque é um Perl script, mas na sua utilização típica a performance não é um factor importante. Basicamente serve para efectuar operações sobre uma árvore de ficheiros em cascata (age sobre os ficheiros da directoria actual, ficheiros em subdirectorias e assim sucessivamente.

Suporta várias operações, pesquisa, substituição, chmod, comando, etc… as funcionalidades que mais usamos são a pesquisa e a substituição.

Um exemplo para ilustrar o poder do deep. Vamos supor que temos um site que tem algumas centenas de ficheiros html e é necessário substituir o email de contacto e não fazemos ideia de todos os ficheiros onde poderá estar. Simples, basta irmos à raiz do site e dar o comando:

deep find 'emailparasubstituir@dominio.com' '*.html' --case=0

e voilá, temos os ficheiros e linhas em que está o email de contacto para substituir. Vamos agora supor que temos isto em dezenas de ficheiros, temos a possibilidade de abrir um por um, fazer a alteração e gravar (nada divertido) ou então:

deep replace 'emailparasubstituir@dominio.com' 'novoemail@dominio.com' '*.html' --case=0

e já está, podemos passar o resto do dia a fazer coisas realmente produtivas. Outra utilização típica é quando recebemos um projecto com as quebras de linhas em Windows CR LF e queremos abrir o ficheiro em Unix LF:

deep replace "\r" "" "*.html *.css *.js" --literal=0

e está a conversão feita, simples não?

Este é um daqueles comandos que adoramos em UNIX/Linux simples mas extremamente poderoso.

FFmpeg

Nos dias que correm o website típico cada vez mais recorre a fortes elementos multimédia, entre esses elementos destaca-se a utilização de video. A forma de eleição de integrar video num website é a utilização do AdobeFlash e do formato nativo para video em Flash os FLVs.

Tipicamente trabalhamos o flv com o próprio programa da Adobe, mas por vezes é necessário trabalhar a nivel do servidor e aí temos uma ferramenta comando de linha que brilha, o FFmpeg.

Para obter informações acerca de um ficheiro, dimensões, fps, codec, som, etc:


ffmpeg -i movie.flv

Input #0, flv, from 'movie.flv':
Duration: 00:01:24.85, start: 0.000000, bitrate: 64 kb/s
Stream #0.0: Video: flv, yuv420p, 320x240, 29.92 tb(r)
Stream #0.1: Audio: mp3, 22050 Hz, mono, 64 kb/s

Aqui está toda a informação relativa ao flv. A duração em tempo é de 1m24.85s, é um flv com 320px por 240px e 29.92fps. O som é um encoding em mp3 a 64Kbits.

Agora um exemplo de algo um pouco mais complicado. Vamos gerar um thumbnail em jpeg do flv, para usar por exemplo numa página que linka para o flv.


ffmpeg -itsoffset -4 -i movie.flv -vcodec mjpeg -vframes 1 -an -f rawvideo -s 320x240 movie.jpg

E depois de algum output temos na directoria um jpeg chamado movie.jpg com 320px por 240px, correspondente à primeira frame do segundo 4 do filme.

E isto nem sequer é arranhar as potencialidades do FFmpeg. Também devemos ter presente que além de flv trabalha com praticamente todos os tipos de formato video, avi, mpeg, wmv, etc… portanto será possivel replicar estes exemplos em ficheiros de outros formatos.

Manipulação de imagens na linha de comandos

Fazer o resize de várias imagens em simultâneo na linha de comandos? Nada mais fácil, o ImageMagick está instalado no servidor exactamente para nos ajudar nestas tarefas. O ImageMagick é um poderoso software de manipulação de imagens via linha de comandos.

Para converter todas os jpegs de uma directoria para 1024 pixels de largura (a altura é calculada proporcionalmente) com 80% de qualidade basta:

for i in `ls *.jpg`; do convert -resize 1024 -quality 80 $i small_$i; done

Se quisermos substituir as imagens originais pelas redimensionadas:

for i in `ls *.jpg`; do convert -resize 1024 -quality 80 $i $i; done