Use o gstreamer para fazer resampling de arquivos mp3 no Ubuntu

É possível reduzir ainda mais os tamanhos dos arquivos mp3, com pouca perda da qualidade. A utilidade deste procedimento é fazer com que uma quantidade maior deles caiba em dispositivos reprodutores antigos, com capacidade de armazenamento muito limitada.
Se você não se importa em ouvir toda a sua coleção de músicas em um dispositivo de som, com qualidade de rádio, esta é uma ótima ideia.

iPods mp3 player
Coleção de iPods

No primeiro post sobre este tema mostramos como fazer este trabalho através do LAME.
É claro que a redução tem um custo — a consequente redução da qualidade do áudio do arquivo. A gente aposta na possibilidade de esta queda na qualidade ser imperceptível para a maioria das pessoas e no aproveitamento mais eficiente do espaço na mídia de armazenamento. Houve caso de triplicar a quantidade de arquivos dentro de um pendrive antigo.
Atualmente, temos outras ferramentas que também podem fazer o trabalho e é possível criar um script de automação da tarefa bem menor e mais enxuto do que o do artigo anterior.
Vamos ver aqui como isto é possível.

Instalação das ferramentas de trabalho

Aqui vamos usar o GStreamer para fazer a conversão e resampleamento (resampling) dos arquivos mp3. A principal vantagem dele, em relação ao LAME, é que ele retém as informações id3 dos arquivos. Assim, podemos fazer um único script e menor.
Abra um terminal (Ctrl + Alt + T, no Ubuntu) e digite o comando que segue, para instalar gstreamer-tools:

sudo apt-get install gstreamer-tools

Aguarde alguns minutos enquanto o pacote é instalado e prossiga.

Como criar um script de conversão de arquivos de áudio mp3

Sugiro criar um diretório para scripts e programas no seu /home:

mkdir ~/bin
cd ~/bin

Agora abra o seu editor de textos preferido, copie e cole o script abaixo dentro dele:

#!/bin/bash
#
# gshrink - Um script para resamplear todos os arquivos mp3 do
# diretorio. Este script depende do pacote gstremar-tools
# Os créditos do script original:
# Elder-Geek --> http://elder-geek.blogspot.com.br
######################################################
# Lita os arquivos mp3 no diretorio atual
ls *.mp3 > mp3_list
ls *.MP3 >> mp3_list
# Analisa a lista de arquivos mp3 e substitui os espaços por caracteres de escape
sed -i 's: :\\ :g' mp3_list
# Verifica se o subdiretorio resample já existe. Se não, cria.
if
  test -e ./resample
then
  echo "diretorio/arquivo resample ja existe - apagar? (S/n)"
  read reply
  if
    [ "$reply" != "n" ]
  then
    rm -r resample
    mkdir resample
  else
    exit
  fi
else
  mkdir resample
fi
# Resampleia cada mp3 e grava as tags
# CBR bitrate bitrate=128
# VBR quality quality=9
  cat mp3_list |while read song
do
  echo "$song"
  gst-launch filesrc location= \"$song\" ! decodebin2 ! audioconvert ! lamemp3enc target=bitrate bitrate=128 ! id3v2mux ! filesink location=\"resample/$song\"
done
#clean up
if
  test -e mp3_list
then
  rm mp3_list
fi
if
  test -e tag2.txt
then
  rm tag2.txt
fi
exit

Uma última dica

Para quem fez backup de todos os seus CD’s e guardou cada coletânea e álbum em pastas diferentes, recomendo executar o script dentro de cada pasta de arquivos mp3 – o que vai criar um subdiretório adicional resample com os mesmos arquivos da pasta pai, só que resampleados e reduzidos, prontos para ir pra qualquer lugar.

Como reduzir o tamanho do arquivo de audio mp3

O caso aqui é o de reaproveitar todo e qualquer aparelho reprodutor de mp3, ou cartões de memória velhos e, sobretudo, com espaço para armazenamento muito limitado. Eu, mesmo, tinha um pendrive “guerreiro” de 256 Mb, que devia estar próximo dos 7 anos de uso — simplesmente não lembro de quando o comprei. Mas funciona bem em uma caixa de som com entrada USB.
Recentemente, converti uma coleção inteira de CDs para mp3, como cópia de segurança. Agora, para ouvir no dia a dia, não preciso de arquivos de 320 kbps – 128 kbps, ou menos, podem ser o suficiente.

MP3 Logo
MP3 Logo

Se você tem um iPod ou celular antigo, com espaço insuficiente para armazenar músicas, fazer um downsampling nelas pode ser uma solução — é possível triplicar a quantidade de músicas que cabem no dispositivo.
OBS.:A segunda parte deste artigo ensina a fazer esta tarefa com o gstreamer-tools.

Ferramentas necessárias para reduzir o tamanho do arquivo mp3

Os aplicativos necessários para realizar esta tarefa são o python-mutagen e o lame. Ambos podem ser baixados e usados livremente.
No Ubuntu, você pode instalar os dois primeiros via terminal (Ctrl + Alt + T), assim:

sudo apt-get install lame python-mutagen

Como converter os arquivos mp3

Você deve ter centenas de arquivos para converter, não apenas um, eu sei… — mas eu quero mostrar como tudo funciona. Sinta-se livre para pular esta parte, se quiser, apressadinho(a). 😉
Dentro do terminal aberto, digite o seguinte comando para resamplear a sua música (adapte o comando à sua situação, substituindo os nomes dos arquivos):

lame -V5 --vbr-new --resample 44.1 arquivo_original.mp3 arquivo_resampleado.mp3

Aguarde alguns intantes, enquanto os arquivos são processados e, depois, compare os tamanhos.

reduzir o tamanho do mp3
Clique para ampliar a tela

Depois de concluído o trabalho, verifique os tamanhos dos arquivos.
Parece que vai dar pra reviver o antigo cartão de memória, ou não?
Como resamplear arquivos mp3
Clique para ampliar

Problemas que você pode ter com a conversão

Temos dois problemas com este método, por mais eficiente que ele seja:

  • O LAME não copia as tags id3 pro arquivo de origem — em outras palavras, na hora em que estiver tocando, o display do seu aparelho não vai mostrar as informações da música (nome, cantor, álbum etc) – o que pode ser um problema menor para quem vai tocá-las em um aparelho sem visor;
  • Como eu imagino que você tenha centenas de músicas para converter, todo este trabalho braçal não tem sentido.

Como converter muitos arquivos mp3

Para fazer o resampling de uma quantidade brutal de arquivos, o ideal é usar um script.
O Linerd do TuxTweaks, ensina a montar um este script que automatiza a nossa tarefa.
Em verdade, vos digo que serão 2 scripts. O primeiro lê todos os arquivos do diretório a partir do qual está sendo executado e os repassa pro segundo script, que faz o resampling e copia as tags id3. Todos os arquivos do diretório atual serão copiados para um segundo, chamado resample, criado pelo script.
A recomendação, aqui, é que você crie uma pasta (diretório) só para scripts e programas seus:

mkdir ~/bin
cd ~/bin

Copie o texto do script abaixo e cole-o dentro do seu editor de textos preferido. Salve-o como mp3shrink dentro do diretório criado para isto ~/bin

#!/bin/bash
#
# mp3shrink - Um script para resamplear todos os arquivos mp3
# em um diretorio. Este script chama o cptag que precisa
# estar no diretorio do mp3shrink. O cptag depende do lame
# e do mid3v2 (mid3v2 se encontra no pacote do python-mutagen
# É aconselhavel que os scripts fiquem no diretório  
# ~/bin.
######################################################

# Lita os mp3 no diretorio atual
ls *.mp3 > mp3_list
ls *.MP3 >> mp3_list

# Analisa os arquivos mp3 e substitui os espaços em branco por barras de escape.
sed -i 's: :\\ :g' mp3_list

# Verifica a existencia do diretorio resample. Cria um se nao existir
if
   test -e ./resample
then
   echo "diretorio/arquivo resample ja existe. deseja remover? (S/n)"
   read reply
   if
     [ "$reply" != "n" ]
   then
     rm -r resample
     mkdir resample
   else
     exit
   fi
else
   mkdir resample
fi

# Resampleia cada arquivo mp3 e grava as tags atraves do script cptag
cat mp3_list |while read song
do
   echo "$song"
   ~/bin/cptag "$song"
done

# fazendo a limpeza .... 
if
   test -e mp3_list
then
   rm mp3_list
fi
if
   test -e tag2.txt
then
   rm tag2.txt
fi
exit

Feito isto, crie o arquivo cptag, também dentro do diretório ~/bin. Segue o código:

#!/bin/bash
#
#cptag - Um script que resampleia arquivos mp3 com o LAME
#        e copia as tags id3v2 do original pro novo.
#
#####################

# Le as tags id3 e grava no arquivo
mid3v2 -l "$1" > tag2.txt

# Resampleia o arquivo de audio

lame -V5 --vbr-new --resample 44.1 "$1" "resample/$1"

# ajusta o valor da variavel 'title'
if
   grep TIT2= tag2.txt > /dev/null  #testa se a tag title existe
then
   title=`grep TIT2= tag2.txt | sed "s:TIT2=::"`
   echo $title
else
   echo "A tag title nao existe."
fi

# Ajusta a variavel 'album'
if
   grep TALB= tag2.txt > /dev/null  #testa se a tag album existe
then
   album=`grep TALB= tag2.txt | sed "s:TALB=::"`
   echo $album
else
   echo "A tag album nao existe."
fi

# Ajusta a variavel 'artista'
if
   grep TPE1= tag2.txt > /dev/null  #Testa se a tag artista existe
then
   artist=`grep TPE1= tag2.txt | sed "s:TPE1=::"`
   echo $artist
else
   echo "A tag artista nao existe."
fi

# Ajusta o valor da variavel 'track'
if
   grep TRCK= tag2.txt > /dev/null  # Testa se a tag track existe
then
   track=`grep TRCK= tag2.txt | sed "s:TRCK=::"`
   echo $track
else
   echo "A tag track nao existe."
fi

# Ajusta a variavel 'genre'
if
   grep TCON= tag2.txt > /dev/null  # Testa se a taf genre exsite
then
   genre=`grep TCON= tag2.txt | sed "s:TCON=::"`
   echo $genre
else
   echo "A tag genre nao existe."
fi

# Grava as tags no arquivo
mid3v2 -t "$title" -A "$album" -a "$artist" -T "$track" -g "$genre" "resample/$1"

exit

Agora, você precisa tornar estes dois scripts executáveis:

cd ~/bin
chmod u+x mp3shrink cptag

Feito!
Agora vá para o diretório em que se encontram todos os mp3 que você deseja resamplear e execute:

mp3shrink

O script vai guardar os novos arquivos em um subdiretório chamado resample. Dê uma olhada!
Divirta-se!

Como resumir seus posts na página inicial do blog no WordPress

Há várias vantagens em resumir o texto dos posts na página principal do seu blog. Ambas estão relacionadas ao conforto dos seus leitores. A redução do tempo para a página carregar é uma delas.
Ao resumir todos os posts da sua página inicial, removendo inclusive a maior parte das imagens, a tendência é que você tenha uma redução drástica no tempo de carregamento do conteúdo. O que o leitor verá, dependerá de algumas configurações do seu tema. Alguns permitem, que você digite um resumo apropriado, na mesma tela em que escreve o seu post. Outros farão um resumo automático, usando as primeiras linhas do seu post.
A praticidade com que o seu leitor poderá percorrer a sua página e escolher o que lhe interessa ler aumenta consideravelmente.
Um programador, com alguma experiência em PHP, não deve encontrar muita dificuldade em realizar esta tarefa, que envolve “enfiar as fuças” no código.
Ainda assim, vou tentar explicar como fazer para quem não entende PHP ou HTML e nem tem interesse em entender — quer apenas resolver o problema o mais rápido possível. Óbvio que pedir para alguém um pouco mais experiente fazer isto também é uma opção.

Como fazer

Como se trata de uma tarefa administrativa, você vai precisa se logar à sua conta no blog do WordPress como administrador. Feito isto, vá até a seção Aparência (Appearance) e selecione Editor.
Na relação de páginas, à direita, escolha o arquivo index.php para ser editado. Se o seu sistema for em português, ele estará sob o nome Modelo da página principal.

Modelo da página principal
Arquivo index.php do seu tema, se o seu painel administrativo estiver em português.

Na versão em inglês, ele estará sob o nome Main Index Template
Main Index Template - Modelo da Página Principal
Arquivo index.php do seu tema, se o seu painel administrativo estiver em inglês.

Uma vez selecionado o arquivo index.php, você precisa localizar uma parte do código para substituí-la por outra.
Este é o código que precisa ser encontrado:
the_content(
Para encontrar o código, use o sistema de busca do seu navegador (costuma ser acessível com as teclas Ctrl + F no Firefox e no Chromium).
Quando encontrar, substitua cuidadosamente por:
the_excerpt(
E grave as alterações no botão azul, logo abaixo da caixa de textos.
Em inglês, ele se chama “Update file“, em português é “Atualizar arquivo“.

Atualizar arquivo, em inglês.
Atualizar arquivo, em inglês.

Isto deve ser o suficiente. Mas não feche nada, ainda.
Abra o seu blog, na página inicial, em outra janela (para evitar que o sistema de cache te dê um resultado falso, recomendo abrir em uma janela privativa/anônima) e verifique se tudo está funcionando conforme o planejado.
Divirta-se e escreva bastante!

Explicando o PHP para iniciantes

A definição mais rápida e, provavelmente, mais ineficiente para um iniciante seria “PHP é uma linguagem de scripts”.
Mas, afinal, o que é uma linguagem de scripts?
Um script é um conjunto de instruções de programação que são interpretadas em tempo de execução.
É comum os scripts estarem incluídos em ambientes de software mais complexos – nestes casos, seu propósito é melhorar a eficiência do ambiente como um todo ou realizar tarefas rotineiras dentro da aplicação.
De acordo com a Wikipedia, é uma linguagem de programação que suporta código escrito para automatizar a execução de tarefas que poderiam ser realizadas uma a uma por um operador humano.
Alguns autores subdividem as linguagens de script em:

  • Server Side Scripts – que são interpretados no servidor;
  • Client Side Scripts – que são interpretados na aplicação cliente. No caso, a aplicação cliente é o seu navegador.

O PHP é um conhecido exemplo de linguagem server side script, ao passo que o JavaScript é um exemplo de client side script Ambas podem ser inseridas em páginas HTML – e, comumente, o são.
Vamos resumir, aqui, em linhas gerais, as linguagens de programação de scripts da seguinte forma:

  • rodam de dentro de outro programa;
  • não são concebidas para serem compiladas;
  • são de uso simplificado e concebidas para a execução de tarefas simples.

Mas, nem “todo mundo” se encaixa nesta descrição:

  • Há várias linguagens de programação populares (Java, por exemplo) que rodam de dentro de um programa pai, tal como as linguagens de programação de script;
  • As linguagens de programação de script são amplamente usadas, hoje, para realizar tarefas ou construir softwares complexos;
  • Já não se fala mais da vantagem do software já compilado por ser mais rápido, uma vez que a velocidade das máquinas atuais neutralizam esta vantagem.

O PHP, como linguagem de script

À partir da terceira versão, o acrônimo PHP passa a significar PHP Hypertext pre-processor (em inglês). Antes significava Personal Home Pages — a evolução da nomenclatura reflete o quanto a linguagem ampliou seu espectro em relação à Internet e aos problemas que lhe são apresentados. O PHP é apresentado como ferramenta para realizar pelo menos 3 tipos de trabalhos:

  • sites web estáticos
  • sites web dinâmicos
  • aplicações web

Pré-requisitos para desenvolver aplicativos PHP

Enquanto o cliente só precisa ter um navegador para fazer uso de um aplicativo web ou acessar uma página em PHP, do outro lado é necessário ter um servidor PHP, que pode ser instalado localmente.
Dentro de uma página HTML, é possível ter código PHP inserido. Para tanto, basta iniciá-lo com a tag PHP. Veja um exemplo de código PHP:

<?php
   echo "Hello World!";
?>

Note que iniciamos o código com a tag <?php; escrevemos o nosso código e fechamos tudo com a tag ?>. Quando o arquivo é aberto pelo servidor, “ele vai saber” que deve executar o código que estiver entre estas duas tags.

POSTS RELACIONADOS

Alguns pré-requisitos para aprender PHP

Como estamos falando de múltiplas tecnologias, é interessante ter um background em HTML (pelo menos algum conhecimento básico), em bancos de dados e, para realizar tarefas mais complexas, JavaScript e XML.
A figura, abaixo, mostra como o código PHP é entregue ao servidor, que o interpreta e devolve para o navegador, na máquina local, em formato HTML.

PHP, HTML
Clique para ampliar.

O que é um banco de dados relacional?

Um banco de dados é uma aplicação que lhe permite armazenar e obter de volta dados com eficiência. O que o torna relacional é a maneira como os dados são armazenados e organizados no banco de dados.
Quando falamos em banco de dados, aqui, nos referimos a um banco de dados relacional — RDBMS Relational Database Management System.
Em um banco de dados relacional, todos os dados são guardados em tabelas. Estas têm uma estrutura que se repete a cada linha, como você pode observar em uma planilha. São os relacionamentos entre as tabelas que as tornam “relacionais”.

História – antes dos bancos de dados relacionais

Antes da invenção dos bancos de dados relacionais (nos anos 70), havia outros tipos de bancos de dados, tais como os hierárquicos. Depois que se tornaram disponíveis várias têm feito sucesso com a venda deste tipo de aplicativo. Como exemplo, posso citar a Oracle e a IBM.

Bancos de dados comerciais

  • Ingres, o primeiro RDBMS comercial
  • Progress
  • IBM DB 2
  • Microsoft SQL Server
  • Oracle

Bancos de dados livres/de código aberto

  • MySQL
  • MariaDB
  • PostgresSQL
  • SQLite

Todos eles oferecem mecanismos de segurança, criptografia, controle de acesso de usuários e podem processar requisições SQL.

Normalização de dados

Em 1970, o matemático britânico, Ted Codd, criou o modelo relacional para gestão de bancos de dados e as 12 leis que descrevem o que um banco de dados relacional e um RDBMS fazem – além de uma série de leis de normalização que estabelecem as propriedades dos dados relacionais. Apenas dados que tenham sido normalizados pode ser considerados relacionais.

O que é a normalização

Normalização de dados é o processo de organização de campos e tabelas em um banco de dados relacional para minimizar a redundância e a dependência. Este processo comumente envolve a divisão de tabelas grandes em pequenas (e menos redundantes) e define relacionamentos entre elas.
De forma objetiva, o que se deseja é isolar dados de forma que a entrada/remoção/alteração de informações em um campo possa ser feita em apenas uma tabela e se propagar pelo resto do banco de dados, de acordo com os relacionamentos já definidos.
Como exemplo, imagine uma planilha com dados de clientes a serem lançados em um banco de dados relacional. Alguns clientes possuem algumas informações em comum, tais como trabalhar nos mesmos departamentos de uma mesma empresa, com o mesmo endereço de cobrança, portanto.
Ao lançar os dados na tabela, todos os endereços dos clientes precisam ser movidos para uma outra tabela e a cada um destes endereços é dado uma ID. Assim, substitui-se o texto do endereço de cobrança de cada cliente pelo ID do endereço, de acordo com a tabela de endereços.