shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

convertesor de musica com Zenity


From: Marlon Vagner Reck
Subject: convertesor de musica com Zenity
Date: Mon, 5 Dec 2011 08:58:26 -0200
User-agent: KMail/1.13.7 (Linux/2.6.35.14-106.fc14.i686.PAE; KDE/4.6.5; i686; ; )

        Bom dia

        Estes dias um colega de trabalho pediu para converter umas músicas de 
wma para mp3. Tranquilo de fazer usando o 
"ffmpeg", só que eram mais de uma, então usei um laço "for".
        Como ele ainda é novo no linux, resolver fazer tudo com zenity para que 
ele possa usar sem abrir o terminal.
        O resultado esta abaixo, estou compartilhando para que se interessar, 
em funções com retorno e menu com ida e vinda.

#!/bin/bash


#Script para converter múscisas      
#Criado: 03/12/2011                  
#Autor: Marlon V. Reck               
#e-mail: address@hidden 


#variaveis
contador=0
totalarq=0
cont=0
g_retorno=tela_original

function baybay { 
  local retorno="$1"
  test "$retorno" -eq 1 && exit
}

#verifica se é arquivo ou diretório
function verifica_diretorio {
  local dir="$diretorio"
  local ori="$original"
  local verifica
  for verifica in "$dir"/*."$ori";do
    if [ -f "$verifica" ]; then
      g_retorno=tela_novof
    else
      zenity --error --text="Arquivo não encontrado no diretório 
indicado.\nTente novamente!" --title="Conversor de música";
      g_retorno=tela_diretorio      
    fi
  done
}

#verifica se os formatos são iguais
function verifica_extensao {
  local arqorig="$original"
  local arqnovo="$novoformato"
  if [ "$arqorig" = "$arqnovo" ]; then
    zenity --error --text="Os formatos escolhidos são iguais.\nTente 
novamente!" --title="Conversor de música";
    g_retorno=tela_novof
  else
    g_retorno=tela_qualidade
  fi
}

while [ "$g_retorno" != fim ]; do
  case "$g_retorno" in
    tela_original)
      #tela para escolha do arquivo que vai ser convertido
      original=$(zenity --list --height=280 --title "Conversor de música" 
--text "Formato original" --radiolist --column "Marque" --
column "Extensão" TRUE wma FALSE flac FALSE ogg FALSE wav FALSE mp3 FALSE aac 
FALSE flv)
      baybay "$?"
      g_retorno=tela_diretorio
    ;;

    tela_diretorio)
      #tela para escolher onde esta o arquivo
      diretorio=$(zenity --file-selection --directory --title="Selecione o 
diretório dos arquivos "$original"." --file-filter="*.$original")
      baybay "$?"
      verifica_diretorio "$diretorio" "$original"
    ;;

    tela_novof)
      #tela para escolher o novo formato do arquivo
      novoformato=$(zenity --list --height=280 --title "Conversor de música" 
--text "Novo formato" --radiolist --column "Marque" 
--column "Extensão" FALSE wma FALSE flac FALSE ogg FALSE wav TRUE mp3 FALSE aac 
FALSE flv)
      baybay "$?"
      verifica_extensao "$original" "$novoformato"
    ;;

    tela_qualidade)
      #tela para escolher a qualidade do arquivo
      qualidade=$(zenity --list --height=280 --title "Conversor de música" 
--text "Escolha a qualidade do arquivo convertido" --
radiolist --column "Marque" --column "kbps" FALSE 64 FALSE 96 TRUE 128 FALSE 
192 FALSE 256 FALSE 320)
      baybay "$?"

      #contador de arquivos
      for contador in "$diretorio"/*."$original";do let totalarq++; done
      #acrescenta +1 no total de arquivos
      totalarq=$((totalarq+1))

      #conversão
      if [ "$novoformato" = "ogg" ]; then
        codec="-acodec libvorbis"
      else
        codec="-acodec libmp3lame"
      fi

      for nome in "$diretorio"/*."$original"; do
        # echo para montar a barra de progresso
        echo "# Convertendo "$nome""
        echo $((++cont * 100/$totalarq))
        #pega o nome do arquivo sem extensão
        x=$(echo "$nome" | cut -f1 -d".")
        ffmpeg -loglevel quiet -i "$nome" -f "$novoformato" $codec -ab 
"$qualidade""k" -ar 44100 "$x"."$novoformato"
      done | zenity --progress --auto-close --width 290 --no-cancel 
--title="Convertendo "$original" para "$novoformato""
      g_retorno=fim
    ;;
  esac
done;
        

Atenciosamente
Marlon V. Reck
address@hidden


reply via email to

[Prev in Thread] Current Thread [Next in Thread]