sábado, 6 de setembro de 2008

Juntando vários arquivos .pdf em um só com o auxílio de um código em lLPO C e a ferramenta pdftk

Para mais informações sobre o pdftk, de uma buscada na internet
O programa converte todos os arquivos .pdf da pasta com excessão aqueles com espacos no nome, por exemplo "exemplo 1.pdf"
Copie oo código c e salve como 1.c
Complile, cc 1.c -o 1 e execute com ./1
Pronto basta procurar o arquivo PDFTK ...
Ai vai o código:
Eu ia colocar em c mas como nao da pra colocar vai em xml









#include <stdlib.h>


#include <stdio.h>


#include <string.h>


#define LEITURA 0


#define ESCRITA 1


#define LEITURAESCRITA
2


#define TAMNOME 500


/*===================================================================*/


/*===================================================================*/


void
mostraRespricoes();


int open1(char *file,
int oflag );


void prog();


char *gettextoarq(int
fd, char *buf, int buf_size, char *texto);


char
*gettextoarq1Somenteleitura( char *arq, char *texto);


char
***getLinhasSomenteleitura(char *arq, int *j, char ***texto4);


void mostraLinhas(char
*arq, int j);


char
*getLinhaISomenteleitura(char *arq, int *j, char *linha, int I);


char
*gettextoarq1Somenteleitura1( char *arq);


char
*getLinhaISomenteleitura1(char *arq, int I);


int
getNumeroLinhaString(char *str);


int contachar(char
string[], char letra);


void mostraLinhas1(char
*arq);


int
getNumeroLinhaStringArquivo(char *arq);


char *strpdftk(char
*arq);


void limpaStr(char
*Str);


char
**getvetorLinhasArg(char *arq);


void mostraLinhas2(char
*arq);


char
**getvetorLinhasArg1(char *arq);


char
**getvetorLinhasArg1(char *arq);


void mostraLinhas3(char
*arq);


int
getimaiorStringemArq(char *arq);


int
get_Strlen_da_maior_String_em_Arq(char *arq);


char
***alocar_vetor_string_arq(char *arq);


char
***get_vetor_string_arq(char *arq);


void mostraLinhas4(char
*arq);


char
***alocar_vetor_string_arq(char *arq);


char
substituiEspacoPor_(char *str);


char *subs_str(char
*string, char *substring, char *nova);


/*===================================================================*/


/*===================================================================*/


/*===================================================================*/


char
***get_vetor_string_arq(char *arq)


{


int l, i, j, k, m, n,
o, num_linhas;


char ***vet1, **vet;


vet1=NULL; vet=NULL;


vet1=alocar_vetor_string_arq(arq);


vet=*vet1;/* tenho o
vetor de strings alocadinha basta preenchê-lo*/


num_linhas=getNumeroLinhaStringArquivo(arq);


for(i=0;
i<num_linhas; i++)


{


sprintf(vet[i] ,
"%s", getLinhaISomenteleitura1(arq, i) );


}


return vet1;



}


/*===================================================================*/


/*===================================================================*/





void mostraLinhas4(char
*arq)


{


int l, i, nl;


char **vet, ***vet1;


vet=NULL; vet1=NULL;


vet1=get_vetor_string_arq(arq);


vet=*vet1;


nl=getNumeroLinhaStringArquivo(arq);


for(i=0; i <
nl;i++)


{


printf("\n
vet[%i]: %s", i, vet[i]);


}



printf("\n\n
************************************\n\n");



}


/*===================================================================*/


void mostraLinhas3(char
*arq)


{


int l, i;


char **vet;


vet=NULL;


vet=getvetorLinhasArg1(arq);



if(vet==NULL){printf("\n Deu problema no mostra linha3 ver e
nulo !\n");}


//t8=getLinhaISomenteleitura1(arq,
9);


/*printf("\n
Passemos a i=getNumeroLinhaStringArquivo(arq);\n");*/


i=getNumeroLinhaStringArquivo(arq);


//printf("
********* Mostrando as %i linhas do arquivo %s ****\n\n", i,
arq);


printf("Linhas(vet)[
%i ]{%i}: %s \n", 0, strlen(vet[0]), vet[0]);


printf("Linhas(vet)[
%i ]{%i}: %s \n", 1, strlen(vet[1]), vet[1]);


/*


for(l=0; l < i;
l++)


{


printf("Linhas(vet)[
%i ]{%i}: %s \n", l, strlen(vet[l]), vet[l]);


}*/


printf("\n\n
************************************\n\n");



}


/*===================================================================*/


/*===================================================================*/


void mostraLinhas2(char
*arq)


{


int l, i;


char **vet;



vet=getvetorLinhasArg(arq);



//t8=getLinhaISomenteleitura1(arq,
9);



i=getNumeroLinhaStringArquivo(arq);


//printf("
********* Mostrando as %i linhas do arquivo %s ****\n\n", i,
arq);



for(l=0; l < i;
l++)


{


printf("Linhas(vet)[
%i ]{%i}: %s \n", l, strlen(vet[i]), vet[i]);


}


printf("\n\n
************************************\n\n");



}


/*===================================================================*/


int
get_Strlen_da_maior_String_em_Arq(char *arq)


{


int l, i, k, la, bb,
maior, idomaior;


char **vet,
str[TAMNOME];


k=0;maior=0;


for(i=0;
i<getNumeroLinhaStringArquivo(arq);i++)


{


k =
strlen(getLinhaISomenteleitura1(arq, i));


if(k>=maior){maior=k;idomaior=i;}


}


return maior;


}


/*===================================================================*/


char
***alocar_vetor_string_arq(char *arq)


{


int tam1, tam2, i,
j;


char **vetor;


tam2 =
get_Strlen_da_maior_String_em_Arq(arq);


tam2=tam2*sizeof(char);


tam1=getNumeroLinhaStringArquivo(arq);


if((vetor=(char**)malloc(tam1*sizeof(char*)))==NULL)


{


printf("\n Nao
foi possivel alocar as linhas do de vetor de strings para do arquivo
\n");


return NULL;


}


for(i=0;
i<tam1;i++)


{


if((vetor[i]=(char*)malloc(tam2))==NULL)


{


printf("\n
Nao foi possivel alocar as colunas do vetor de strings para do
arquivo \n");


for(--i;i>=0;i--)


{


free(vetor[i]);


}


free(vetor);


return NULL;


}


}


return &vetor;








}


/*===================================================================*/


int
getimaiorStringemArq(char *arq)


{


int l, i, k, la, bb,
maior, idomaior;


char **vet,
str[TAMNOME];


k=0;maior=0;


for(i=0;
i<getNumeroLinhaStringArquivo(arq);i++)


{


k =
strlen(getLinhaISomenteleitura1(arq, i));


if(k>=maior){maior=k;idomaior=i;}


}


return idomaior;


}


/*===================================================================*/char
**getvetorLinhasArg1(char *arq)


{


int l, i, k, la, bb;


char **vet,
str[TAMNOME];


/* o probela e alocar
o vetor para armazenar*/



i=getNumeroLinhaStringArquivo(arq);


vet=(char**)malloc(i*sizeof(char*));


if(vet==NULL){printf("\n
Nao foi possivel alocar as linhas do vetor de linhas \n");
return NULL;}





for(la=0; la < i;
la++)


{


strcpy(str
,getLinhaISomenteleitura1(arq, la));


k = strlen(str);


/*printf("\n k
= strlen(str);: %i\n st: %s\n", k, str);*/


vet[la]=(char*)malloc(k*sizeof(char));if(vet[la]==NULL){printf("\n
Nao foi possivel alocar as colunas do vetor de linhas \n");
free(vet);return NULL;}



sprintf(vet[la],
"%s", str);


for(bb=0; bb<=la;
bb++)


printf("%s \n
", vet[bb]);


//strcpy(vet[l],
str);


// if((l%2)!=0){


//printf("
%i%%3=%i\nLinhas(vet[%i])[ %i ]: %s \n str : %s \n\n",l, l%3, l,
l, vet[l], str);


//}



}


//printf("
vet[1-4]: %s %S %s %S \n\n", vet[0], vet[1], vet[2], vet[4]);


printf(" Agora vem
a montagem do vetor vet : %s \n\n", vet);


/* for(la=0; la <
i; la++)


{



printf("\n
vet[%i]: %s\n ", la, vet[la]);



}*/


return vet;




}


/*===================================================================*/





void mostraLinhas1(char
*arq)


{


int l, i;






//t8=getLinhaISomenteleitura1(arq,
9);



i=getNumeroLinhaStringArquivo(arq);


printf("
Mostrando as %i linhas do arquivo \n\n", i);



for(l=0; l < i;
l++)


{


printf("Linhas[
%i ]: %s \n", l, getLinhaISomenteleitura1(arq, l));



}


printf("\n\n
************************************\n\n");



}


/*===================================================================*/


char
**getvetorLinhasArg(char *arq)


{


int l, i, k;


char **vet, *str;


l=getNumeroLinhaStringArquivo(arq);


//printf("
Mostrando as %i linhas do arquivo \n\n", l);


vet=(char**)malloc(l*sizeof(char));


if(vet==NULL){printf("\n
Nao foi possivel alocar as linhas do vetor de linhas \n");
return NULL;}


for(i=0; i < l;
i++)


{


strcpy(str
,getLinhaISomenteleitura1(arq, i));


k = strlen(str);


vet[i]=(char*)malloc(k*sizeof(char));


if(vet[i]==NULL){printf("\n
Nao foi possivel alocar as colunas do vetor de linhas \n");
return NULL;}


strcpy(vet[i] ,
str);


printf("vet[ %i
]: %s \n", l, vet[i]);



}


//printf("\n\n
************************************\n\n");




return vet;


}


/*===================================================================*/


/*===================================================================*/


void mostraLinhas(char
*arq, int j)


{


int l;



//t8=getLinhaISomenteleitura1(arq,
9);




printf("\n\n
Mostrando as %i linhas do arquivo \n\n", j);



for(l=0; l < j;
l++)


{


printf("Linhas[
%i ]: %s \n", l, getLinhaISomenteleitura1(arq, l));



}


printf("\n\n
************************************\n\n");


printf(" %s \n O
Arquivo tem %i linhas", gettextoarq1Somenteleitura1(arq),
getNumeroLinhaString(gettextoarq1Somenteleitura1(arq)));/**//**/


printf("\n\n
************************************\n\n");


}


/*===================================================================*/


void mostraRespricoes()


{




printf(" 1 - O
arquivo arqpdf.txt tem que estar no mesmo diretorio \n ");


printf(" 2 - Os
arquivos a serem convertidos devem estar no mesmo diretorio \n");


printf(" 3 - O
arquivo gerado tera o nome de \'PDFTK921_ ...pdf\'\n");


printf(" 4 - Os
nomes dos arquivos a serem unidos nao podem possuir espacoe em
branco, pelo menos por enquanto\n");



}


/*===================================================================*/


/*===================================================================*/


int contachar(char
string[], char letra)


{


int contador,
tamanho, ocorrencia = 0;


tamanho =
strlen(string);



for(contador=1;contador <= tamanho;contador++)



if(string[contador] == letra)


ocorrencia++;


return(ocorrencia);


}


/*===================================================================*/


int
getNumeroLinhaString(char *str)


{


/*onde str é a
string com várias linhas*/


return
contachar(str, '\n');



}


/*===================================================================*/


int
getNumeroLinhaStringArquivo(char *arq)


{


/*onde str é a
string com várias linhas*/


int i;


char *s1;


s1=gettextoarq1Somenteleitura1(arq);


i=getNumeroLinhaString(s1);


i=i-1;


return i;


}





/*===================================================================*/





/* fazer uma função
que retorne somente a string da linha,


* deve-se passar a
linha e um ponteiro onde string estara*/


char
*getLinhaISomenteleitura1(char *arq, int I)


{


int i;


char text[10000],
*t1, *t2, charater[500], *ta1;



t1=gettextoarq1Somenteleitura1(arq);


sprintf(text, "%s",
t1);



/* agora com a
string t1 tendo uma copia em "text"


* da pra ficar
mais aliviado, pois nao perderemos o


* conteudo do
arquivo, os nomes dos documentos*/


//res = strtok(s,
delim);


t2=strtok(text,
"\n");


//sprintf(texto[0],
"%s", t2);


//printf(" \n
O conteudo da variaveis text (antes de retornar a linha) e %s \n Ja o
conteudo de t2 e %s \n \n", text, t2);



if(I==0)


{



return t2;


}


for(i=1;(i<=I)&&
(t2 != NULL); i++)


{ //res =
strtok(NULL, delim);


t2=strtok(NULL,
"\n");


sprintf(charater,
"%s", t2);


//printf("
\n O conteudo do arquivo na linha %i e %s \n Ja o conteudo de t2 e
%s \n Ja o conteudo de charater e %s \n", i, text, t2,
charater);



if(i==I)


{ strcpy(ta1,
charater);


return t2;


}


if(t2==NULL)


{


printf("
\n A linha pedida para a funcao e maior que a quanidade de linhas no
arquivo! \n Entre com um valor de linha menor que o numero de linhas
do arquivo!\n ");



return NULL;


}




}


if(i==I)


{


strcpy(ta1,
charater);


return t2;


}


return NULL;


}





/*===================================================================*/


void limpaStr(char
*Str)


{


int i, j;



i=strlen(Str);


for(j=i-1;j>=0;j--)


{


/*Str[j]=NULL*/;strcpy((*(Str+j)),"
");


}


}


/*===================================================================*/


/* fazer uma função
que retorne somente a string da linha,


* deve-se passar a
linha e um ponteiro onde string estara*/


char
*getLinhaISomenteleitura(char *arq, int *j, char *linha, int I)


{


int i;


char texto[500][500],
text[10000], *t1, *t2, charater[500];


printf("\n
Agora entrarei na funcao t1=gettextoarq1Somenteleitura(arq, t1);\n");


t1=gettextoarq1Somenteleitura1(arq);


sprintf(text, "%s",
t1);


/* agora com a
string t1 tendo uma copia em "text"


* da pra ficar
mais aliviado, pois nao perderemos o


* conteudo do
arquivo, os nomes dos documentos*/



t2=strtok(text,
"\n");


sprintf(texto[0],
"%s", t2);


*j=i;


if(I==0)


{


if(/*
*linha==NULL */strcmp(linha,NULL)==0)


{/* se estiver
passando somente um


* ponteiro sem
nada , NULL*/



linha=texto[0];


}


sprintf(linha,
"%s", texto[0]);


return
linha;


}


//printf("*j=
%i \t", *j);


for(i=1;(i<500)||(t2!=NULL);
i++)


{


t2=strtok('\0',
"\n");


sprintf(charater,
"%s", t2);


strcpy(texto[i],
charater);


*j=i;


// printf("*j=
%i \t", *j);


if(t2==NULL ||
strlen(charater)<3)


{



*j=i;



printf("
\n A linha pedida para a funcao e maior que a quanidade de linhas no
arquivo! \n Retornarei a ultima linha do arquivo\n ");



if(/*
*linha==NULL */strcmp(linha,NULL)==0)


{/* se
estiver passando somente um


* ponteiro
sem nada , NULL*/


linha=texto[i-1];


/*linha =
*//*strcpy(linha, texto[i-1]);*/


return
linha;


}


sprintf(linha,
"%s", texto[i-1]);


return linha;




}


if(i==I)


{


if(/*
*linha==NULL */strcmp(linha,NULL)==0)


{/* se
estiver passando somente um


* ponteiro
sem nada , NULL*/


linha=texto[i];


return
linha;


}


sprintf(linha,
"%s", texto[i]);


return linha;


}



}


return NULL;


}





/*===================================================================*/





char
***getLinhasSomenteleitura(char *arq, int *j, char ***texto4)


{


int i;


char texto[500][500],
text[10000], *t1, *t2, charater[500], **texto5;


t1=gettextoarq1Somenteleitura(arq,
t1);


printf("\n
entrou em char ***getLinhasSomenteleitura(char *arq, int *j, char
***texto4) \n gettextoarq1Somenteleitura(arq, t1); = %s \n ",
t1);



sprintf(text, "%s",
t1);


/* agora com a
string t1 tendo uma copia em "text"


* da pra ficar
mais aliviado, pois nao perderemos o


* conteudo do
arquivo, os nomes dos documentos*/



t2=strtok(text,
"\n");


sprintf(texto[0],
"%s", t2);


*j=i;


//printf("*j=
%i \t", *j);


for(i=1;(i<500)||(t2!=NULL);
i++)


{


t2=strtok('\0',
"\n");


sprintf(charater,
"%s", t2);


strcpy(texto[i],
charater);


*j=i;


// printf("*j=
%i \t", *j);


if(t2==NULL ||
strlen(charater)<3)


{



*j=i;


/*
*texto4=&texto[0][0];


*texto4= =
strdup(texto[0]);*/


// strcpy(texto5,
texto);


*texto4=texto5;


return texto4;



}



}


/*
*texto4=&texto[0][0];


*texto4= =
strdup(texto[0]);*/


// strcpy(texto5,
texto);


*texto4=texto5;


// return
&texto5;


return texto4;


}


/*===================================================================*/


char
*gettextoarq1Somenteleitura1( char *arq)


{



int fd, buf_size;


char buf[500],
buf2[10000], *buf3;


buf_size=499;


fd=open1(arq,
LEITURA);


buf3=gettextoarq(fd,
buf, buf_size,buf2);


close(fd);


return buf3;



}


/*===================================================================*/


/*===================================================================*/


/*===================================================================*/


/*===================================================================*/


/*===================================================================*/





char *strpdftk(char
*arq)


{


int i, j, k, l, m, n,
n1;


char *arq1, *arq2,
*arqout, *out, *ext, *meio;


l=getNumeroLinhaStringArquivo(arq);



n1=strlen("pdftk
");


n1=n1+800;


out=(char*)malloc(n1*sizeof(char));


arq1=(char*)malloc((n1-120)*sizeof(char));


arq2=(char*)malloc((n1-120)*sizeof(char));


ext=(char*)malloc((n1-500)*sizeof(char));


k=0;


i=0;


m=1;


//printf("\n
String0: %s\n", out);


//limpaStr(out);


//printf("\n
String1depois: %s\n", out);


/*printf("\n\n\n\n
getLinhaISomenteleitura1(arq, 2) : %s \n\n\n",
getLinhaISomenteleitura1(arq, 2));*/


/*


printf("\n\n\n\n
arquivos0 e arquivo1 arquivo2 respectivamente %s %s %s \n\n\n",
getLinhaISomenteleitura1(arq, 0), getLinhaISomenteleitura1(arq, 1),
getLinhaISomenteleitura1(arq, 2));*/


arq1=getLinhaISomenteleitura1(arq,
0);


arq2=getLinhaISomenteleitura1(arq,
1);


sprintf(ext, "
pdftk %s %s cat output PDFTK921_%i.pdf ;", arq1, arq2, 0);


//printf("\n %s
\n", ext);


strcat(out, ext);


k++;


sprintf(ext, "
pdftk PDFTK921_%i.pdf %s cat output PDFTK921_%i.pdf ;", k-1,
getLinhaISomenteleitura1(arq, 2), k);


strcat(out, ext);


//printf("\n
%s\n\n ", ext);


k++;


sprintf(ext, "
pdftk PDFTK921_%i.pdf %s cat output PDFTK921_%i.pdf ;", k-1,
getLinhaISomenteleitura1(arq, 3), k);


strcat(out, ext);


//printf("\n
%s\n\n ", ext);


k++;


for(i=4; i<l; i++)


{



sprintf(ext, "
pdftk PDFTK921_%i.pdf %s cat output PDFTK921_%i.pdf ;", k-1,
getLinhaISomenteleitura1(arq, i), k);


strcat(out, ext);


//printf("\n
\n %s\n\n ", ext);


k++;




}


//printf("\n out
= %s\n", out);


--k;


for(--k;k>=0;k--)


{


sprintf(ext, "
rm pdftk PDFTK921_%i.pdf ; ", k);


strcat(out, ext);


// printf("\n
\n %s\n\n ", ext);


}


strcat(out, " ls
-la ");


//printf("\n out
= %s\n", out);


return out;


}


/*===================================================================*/


/*===================================================================*/


/*===================================================================*/


/*===================================================================*/


/*===================================================================*/


/*===================================================================*/


/*===================================================================*/


/*===================================================================*/





char
*gettextoarq1Somenteleitura( char *arq, char *texto)


{



int fd, buf_size;


char buf[500],
buf2[10000], *buf3;


buf_size=499;


fd=open1(arq,
LEITURA);


printf("\n
Agora entrarei na funcao buf3=gettextoarq(fd, buf,
buf_size,buf2);\n");


buf3=gettextoarq(fd,
buf, buf_size,buf2);


printf("\n
Antes de entrar no If do texto \nO conteudo do arquivo %s e :\n %s
\n", arq, buf3);


if(/*
*texto==NULL */strcmp(texto,NULL)==0)


{/* se estiver
passando somente um


* ponteiro
sem nada , NULL*/


texto=buf3;



}


sprintf(texto,
"%s", buf3);


//printf("\n
Agora entrarei na funcao close(fd);\n");


close(fd);


//printf("\n O
conteudo do arquivo %s e :\n %s \n", arq, buf3);


return buf3;



}


/*===================================================================*/


char *gettextoarq(int
fd, char *buf, int buf_size, char *texto)


{


for(;;)


{


if(read(fd, buf,
buf_size)==0)


{


sprintf(texto, "
%s \n", buf);


return texto;


}


sprintf(texto, "
%s \n", buf);


}



}


/*===================================================================*/


int open1(char *file,
int oflag )


{


int fd;


if((fd=open(file,
oflag))==-1)


{


printf("\n Nao
e possivel abrir o arquivo %s \n", file);


return fd;


}


return fd;


}
/*===================================================================*/


char
substituiEspacoPor_(char *str)


{


return subs_str(str,
" ", "_");


}



/*===================================================================*/


char *subs_str(char
*string, char *substring, char *nova)


{


char *extrai;


int
tamanho1,tamanho2,contador, a4;





tamanho1 =
strlen(substring);


tamanho2 =
strlen(nova);


a4=strlen(string);





if((tamanho1 >
tamanho2) || (tamanho2 > tamanho1))


return(" ");


else


{


extrai =
strstr(string,substring);





if(extrai)


{



for(contador = 0;contador < a4; contador++)



string[(extrai - string) + contador] = nova[contador];



return(string);


}


else


return("
");


}


}



/*===================================================================*/


void prog()


{


char cmd[400],
arq[200], texto[600], **t1, ***t6, *t7, *t10, *t8, tr[200];


int i;


strcpy(tr,"O
joao e bacana pra caramba");


t7=NULL,t8=NULL;


sprintf(arq, "%s",
"arqpdf.txt");


//sprintf(stdout
,"%s", "imprimindo na tela, stdout com sprintf");


/*
printf("************************************");


printf("\n\n a
string %s sem espacos e : %s \n\n", tr,
substituiEspacoPor_(tr));*/


printf("************************************");


printf("\n
Programa que concatenara todos os arquivos .pdf em um \n\n\n ");


printf(" Para
esse programa funcionar direito e Necessario que: \n ");


mostraRespricoes();


sprintf(cmd, "for
x in *.pdf; do echo %s ", "\"$x\"; done >
arqpdf.txt");


system(cmd);


printf(" \n
cmd:\n %s \n ", cmd);



t10=strpdftk(arq);


printf(" \n
cmd:\n %s \n ", t10);


system(t10);



printf("
\n\n");


}


/*===================================================================*/


int main()


{


prog();



return ;


}


/*===================================================================*/





/*





*


* ordem das chamadas
de funções que estão me
dando dor de cabeça:


*


* prog();
==>>getLinhaISomenteleitura(arq, &i, t7, 3); ==>>
gettextoarq1Somenteleitura1(arq); ==>> ==>> ==>>
==>> ==>> ==>> ==>> ==>> ==>>
==>>


*


* -> prog();
==>>mostraLinhas(arq, 10); ==>>getLinhaISomenteleitura1(arq,
3); ==>> t1=gettextoarq1Somenteleitura1(arq); ==>> ==>>
==>> ==>> ==>> ==>> ==>> ==>>
==>> ==>>




-> prog();
==>>mostraRespricoes() ==>>[mostraLinhas4(arq);==>>
(vet1=get_vetor_string_arq(arq);==>>)==>>nl=getNumeroLinhaStringArquivo(arq);==>>]==>>
==>> ==>> ==>> ==>> ==>> ==>>
==>> ==>> ==>>








* */

quarta-feira, 3 de setembro de 2008

Link q mostra como instalar a interface gráfica no debian GNU/Linux 40.0 Etch cd oficial i 386 Biário-1

A instalação do Debian é bem tranquila, para instalar a interface gráfica, basta seguir as informações do link: http://wiki.forumdebian.com.br/index.php/Instalando_um_Ambiente_Gr%C3%A1fico_no_Debian

Se desejar ver a documentação do Debian em Português acesse:

http://wiki.forumdebian.com.br/index.php/P%C3%A1gina_principalhttp://wiki.forumdebian.com.br/index.php/P%C3%A1gina_principal

sexta-feira, 29 de agosto de 2008

Usando o pdftk, como converter 2 .pdf em 1

Apenas espelhando o site www.vivaolinux.com.br/dica/Manipulando-arquivos-PDF-com-pdftk/
É que esqueci como coverter 2 .pdf para 1

O download desta ferramenta está disponível em .tar.gz e .tar.bz2 no link:

* http://www.accesspdf.com

Concluído o download, deve-se fazer a descompactação do mesmo:

$ tar -zxvf pdftk-1.12.tar.gz
ou
$ tar -jxvf pdftk-1.12.tar.bz2

Agora entre no diretório criado e em seguida no sub-diretório pdftk:

$ cd pdftk-1.12/pdftk

Dependendo de sua distribuição, execute o comando make 'arquivo', onde 'arquivo' corresponde à sua distribuição. Exemplos:

* Debian: make Makefile.Debian
* Mandrake: make Makefile.Mandrake
* RedHat: make Makefile.RedHat
* Outros: make Makefile.Generic


Terminado o processo de instalação, o arquivo "pdftk-1.12/pdftk/pdftk" já estará criado e poderá ser utilizado.

Dicas de utilização

Concatenando dois arquivos em um:

$ pdftk Arquivo1.pdf Arquivo2.pdf cat output Concatenado1e2.pdf

Dividindo arquivos:

$ pdftk Arquivo.pdf burst

* Desta forma cada página do arquivo será separada em um arquivo independente e nomeados como pg_0001.pdf, pg_0002.pdf e assim por diante.

Selecionando páginas a serem separadas:

$ pdftk Arquivo.pdf cat 1-5 10-12 output PaginasSelecionadas.pdf

* O arquivo PaginasSelecionadas.pdf será criado com as páginas de 1 a 5 e de 10 a 12 do arquivo Arquivo.pdf.

Pode-se remover uma determinada página repetindo o comando anterior alterando apenas os parâmetros. Por exemplo, remover a página 5 de um arquivo:

$ pdftk Arquivo.pdf cat 1-4 6-end output NovoArquivo.pdf

Você pode também criar um relatório com os metadados e "jogá-los" em um .txt:

$ pdftk Arquivo.pdf dump_data output relatorio.txt

Maiores informações podem ser obtidas no manual no pdftk em pdftk-1.12/pdftk.1.txt.

Fontes:

* http://applications.linux.com/applications/06/04/17/1943230.shtml?tid=47
* http://www.accesspdf.com/article.php/20041129180128366

E manual do pdftk:

$ less ./pdftk-1.12/pdftk.1.txt

terça-feira, 15 de julho de 2008

Usando funções para substituir o comando for da linguagem C

Alguns cientistas da computação provaram que é possível resolver problemas de linguagens decidíveis (a maior parte dos programas de computador comerciais) utilizando-se apenas de funções recursivas , e entrando nessa onde resolvi fazer o seguinte código?

[code]




//################################################
//Bibliotecas incluídas no programa
//################################################
#include
#include
//################################################
//======================================================
//Funções utilizadas no programa
//======================================================
//------------------------------------------------------
int fib10it(int fib1)
{
int atual, prox, ant, i;
atual=1; prox=1; ant=0; i=0;

if(fib1 < 0){
printf("\n |> !!! Erro !!! Fibonacci nao aceita numeros negativos \n");
return 0;}
if(fib1==0)return 1;
if(fib1==1)return 1;
for(i=0; i < fib1; i++)
{
atual = ant + prox; ant=prox;
prox = atual;
}
return atual;//retorna o valor de fibonacci de forma iterativa

}
//------------------------------------------------------
//------------------------------------------------------
int fib10(int fib1)
{
if(fib1 < 0){
printf("\n |> !!! Erro !!! Fibonacci nao aceita numeros negativos \n");
return 0;}
if(fib1==0)return 1;
if(fib1==1)return 1;
//printf("\n\n Esta passando na funcao recursiva fib10()! \n\n");
return fib10(fib1 -1 )+ fib10(fib1 - 2);
}
//------------------------------------------------------
void fc2(int va)
{

printf(" \t %i", fib10it(va));
}
//------------------------------------------------------
//------------------------------------------------------
void fc1(int va)
{

printf(" \t %i", fib10(va));
}
//------------------------------------------------------
int forrec7( int j, void (*func1)())/* equivaçemte ao for(i=0; i < = j; i++), onde func1 é o endereço da função que você deseja que esteje dentro do for

seria semelhante a:
for(i=0; i < = j; i++)
func1();

*/
{

return forrec(0, j, func1);
}
//------------------------------------------------------
int forrec6( int j, void (*func1)())/* equivaçemte ao for(i=0; i < j; i++), onde func1 é o endereço da função que você deseja que esteje dentro do for

seria semelhante a:
for(i=0; i < j; i++)
func1();

*/
{

return forrec1(0, j, func1);
}
//------------------------------------------------------
int forrec5(int i, void (*func1)())/* equivaçemte ao for(; i > 0; i--), onde func1 é o endereço da função que você deseja que esteje dentro do for

seria semelhante a:
for(; i > 0; i--)
func1();

*/
{

if(i < = 0)
return 0;
(*func1)();
/*printf("\n i=%i, j=%i", i, j);*/
i--;
return forrec5(i, func1);
}
//------------------------------------------------------
int forrec4(int i, void (*func1)())/* equivaçemte ao for(; i > = 0; i--), onde func1 é o endereço da função que você deseja que esteje dentro do for

seria semelhante a:
for(; i > = 0; i--)
func1();

*/
{

if(i < 0)
return 0;
(*func1)();
/*printf("\n i=%i, j=%i", i, j);*/
i--;
return forrec4(i, func1);
}
//------------------------------------------------------
int forrec3(int i, int j, void (*func1)())/* equivaçemte ao for(i=j; i > = 0; i--), onde func1 é o endereço da função que você deseja que esteje dentro do for

seria semelhante a:
for(i=j; i > = 0; i--)
func1();




*/
{
if(i < 0)
return 0;
return forrec4(j, func1);
}
//------------------------------------------------------
int forrec2(int i, int j, void (*func1)())/* equivaçemte ao for(i=j; i > 0; i--), onde func1 é o endereço da função que você deseja que esteje dentro do for

seria semelhante a:
for(i=j; i > 0; i--)
func1();

*/
{

if(i < = 0)
return 0;
(*func1)();
/*printf("\n i=%i, j=%i", i, j);*/
i--;
return forrec2(i, j, func1);
}
//------------------------------------------------------
int forrec1(int i, int j, void (*func1)())/* equivaçemte ao for(i=0; i < j; i++), onde func1 é o endereço da função que você deseja que esteje dentro do for

seria semelhante a:
for(i=0; i < j; i++)
func1();

*/
{

if(i > = j)
return 0;
(*func1)();
/*printf("\n i=%i, j=%i", i, j);*/
i++;
return forrec1(i, j, func1);
}
//------------------------------------------------------
//------------------------------------------------------
int forrec(int i, int j, void (*func1)())/* equivaçemte ao for(; i<=j; i++), onde func1 é o endereço da função que você deseja que esteje dentro do for

seria semelhante a:
for(; i < = j; i++)
func1();

*/
{

/* em haskell (não testei ainda) :
forrec i j = forrec (i=i+1) j
forrec i j
| i > j =0
*/

if(i>j)
return 0;
(*func1)(i);
/*printf("\n i=%i, j=%i", i, j);*/
i++;
return forrec(i, j, func1);
}

//------------------------------------------------------
void for_iterativo(int i, int j, void (*func1)())
{
for( ; i < = j ; i++)
(*func1)(i);

}
//------------------------------------------------------
void for_iterativo1( int j, void (*func1)())/* for( i=0 ; i <= j ; i++)*/
{
int i;
i=0;
for( ; i < = j ; i++)
(*func1)(i);

}
//------------------------------------------------------
//------------------------------------------------------
void fib20()
{
int op, seq;
op=0, seq=0;
printf("\n | > \t Deseja que o for usado seja o recursivo ou o iterativo ? \n | > \t Para recursivo tecle 1 \n | > \t Para iterativo tecle 2: \n | > ");
scanf("%i", &op);
printf("\n | > \t Entre com o termo que deseja gerar a sequencia: \n | >");
scanf("%i", &seq);
printf("\n | > \t A sequencia de fibonacci e: \n | > \t ");
(op==1)?forrec7( seq , &fc1):for_iterativo1( seq, &fc2);

}
//------------------------------------------------------
//------------------------------------------------------
int fib2(int fib1)
{
int op;
op=0;
printf("\n | > \t Deseja que o for usado seja o recursivo ou o iterativo ? \n | > \t Para recursivo tecle 1 \n | > \t Para iterativo tecle 2: \n | > ");
scanf("%i", &op);
(op==1)?forrec7( fib1 , &fc1):for_iterativo1( fib1, &fc2);
printf("\n | > \t A sequencia de fibonacci e: \n | >");

return 0;

}
//------------------------------------------------------
void cle()
{
//?????????????????
// Declarações de variáveis principais
int seq;

//?????????????????
/* !!!!!!!!!!!!!!! */
//inicalização das variáveis
seq=0;
/* !!!!!!!!!!!!!!! */
printf("\n\n\n | > Programa que retorna a sequencia do numero de fibonacci \n ");
fib20();
printf("\n\n\n");

}
//------------------------------------------------------
//======================================================
int main(int argc, char **argv)
{
cle();
return 0;
}





[/code]

Esse código foi testado apenas na linguagem C!
Esse código da função que realiza a tarefa do comando for é interessante, pois utilizando-se de funções recursivas evita-se entrar em loops infinitos, já que um loop na pilha da recursão no máximo estouraria a pilha..! O uso de funções recursivas exige mais tempo de processamento e memória, mas é menos sujeito a erros, vale a pena o programador se perguntar: "O que desejo ? Eficiência ou garantia que meu código está coeso e não dará pau ?"

domingo, 6 de julho de 2008

__| O cara da informatica |__

Hoje recebi um e-mail do DEFUG e entre algumas coisinhas do DEFUG, achei interessante postar isso aqui, para aqueles que pensam que o cara da informática é um ser que não necessita de descanso, repare nas coias ai abaixo ...!


"Nem tudo que publicamos aqui e' serio, na verdade adoramos rir de nos mesmos e, sempre publicamos textos engracados que falam desta nossa vida tecnologica. O Fernando Anselmo, fernando.anselmo@dfjug.org, coordenador e moderador da lista de discussao do DFJUG, distribuiu o texto abaixo entre os amigos (e a carapuca serviu para todos :-))

Para os verdadeiros CARAS DA INFORMaTICA
1) O CARA DA INFORMaTICA dorme. Pode parecer mentira, mas o CARA DA INFORMaTICA precisa dormir como qualquer outra pessoa. Esqueca que ele tem celular e telefone em casa, ligue so para o escritorio;

2) O CARA DA INFORMaTICA come. Parece inacreditavel, mas e verdade. O CARA DA INFORMaTICA tambem precisa se alimentar e tem hora para isso;

3) O CARA DA INFORMaTICA pode ter familia. Essa e a mais incrivel de todas: Mesmo sendo um CARA DA INFORMaTICA, a pessoa precisa descansar no final de semana para poder dar atencao a familia, aos amigos e a si proprio, sem pensar ou falar em informatica, impostos, formularios, consertos e demonstracoes, manutencao, virus e etc.;

4) O CARA DA INFORMaTICA, como qualquer cidadao, precisa de dinheiro. Por essa voce nao esperava, ne? e surpreendente, mas o CARA DA INFORMaTICA tambem
paga impostos, compra comida, precisa de combustivel, roupas e sapatos e ainda consome Lexotan para conseguir relaxar. Nao peca aquilo pelo que nao pode pagar ao CARA DA INFORMaTICA;

5) Ler, estudar tambem e trabalho. E trabalho serio. Pode parar de rir. Nao e piada. Quando um CARA DA INFORMaTICA esta concentrado num livro ou publicacao especializada ele esta se aprimorando como profissional, logo trabalhando;

6) De uma vez por todas, vale reforcar: O CARA DA INFORMaTICA nao e vidente, nao joga taro e nem tem bola de cristal, pois se achou isto demita-o e contrate um PARANORMAL OU DETETIVE. Ele precisa planejar, se organizar e assim ter condicoes de fazer um bom trabalho, seja de que tamanho for. Prazos sao essenciais e nao um luxo. Se voce quer um milagre, ore bastante, faca jejum, e deixe o pobre do CARA DA INFORMaTICA em paz;

7) Em reunioes de amigos ou festas de familia, o CARA DA INFORMaTICA deixa de ser o CARA DA INFORMaTICA e reassume seu posto de amigo ou parente, exatamente como era antes dele ingressar nesta profissao. Nao peca conselhos, dicas. ele tem direito de se divertir;

8) Nao existe apenas um 'levantamentozinho' , uma 'pesquisazinha' , nem um 'resuminho', um 'programinha pra controlar minha loja', um 'probleminha que a maquina nao liga', um 'sisteminha' , uma 'passadinha rapida (ALIAS CONTA-SE DE ONDE SAIMOS E ATe CHEGARMOS)', pois esqueca os 'inha e os inho (programinha, sisteminha, olhadinha, )' pois, CARAS DA INFORMATICA nao resolvem este tipo de problema. Levantamentos, pesquisas e resumos sao frutos de analises cuidadosas e requerem atencao, dedicacao. Esses topicos podem parecer inconcebiveis a uma boa parte da populacao, mas servem para tornar a vida do CARA DA INFORMATICA mais suportavel;

9) Quanto ao uso do celular: celular e ferramenta de trabalho. Por favor, ligue, apenas, quando necessario. Fora do horario de expediente, mesmo que ainda duvide, o CARA DA INFORMATICA pode estar fazendo algumas coisas que voce nem pensou que ele fazia, como dormir ou namorar, por exemplo;

10) Pedir a mesma coisa ao mesmo tempo nao faz o CARA DA INFORMATICA trabalhar mais rapido. Solicite, depois aguarde o prazo dado pelo CARA DA INFORMATICA;

11) Quando o horario de trabalho do periodo da manha vai ate 12h, nao significa que voce pode ligar as 11:58 horas. Se voce pretendia cometer essa gafe, ligue apos o horario do almoco (relembre o item 2). O mesmo vale para a parte da tarde: ligue no dia seguinte;

12) Quando o CARA DA INFORMATICA estiver apresentando um projeto, por favor, evite as perguntas que nao tenham relacao com o projeto. Isso tira a concentracao, alem de torrar a paciencia.

13) O CARA DA INFORMATICA nao inventa problemas, nao muda versao de WINDOWS, nao tem relacao com virus, NaO e CULPADO PELO MAL USO DE EQUIPAMENTOS, INTERNET E AFINS. Nao reclame! O CARA DA INFORMATICA com certeza fez o possivel para voce pagar menos. Se quer EMENDAR, EMENDE, mas antes demita o CARA DA INFORMATICA e contrate um CARA DE POG;

14) Os CARAS DA INFORMATICA nao sao os criadores dos ditados 'o barato sai caro' e 'quem paga mal paga em dobro'. Mas estao todos de acordo com eles;

15) Nao pergunte para O CARA DA INFORMATICA uma sugestao de computador BOM e BARATO para voce comprar. Nao existe computador BOM e BARATO. Ou e uma coisa, ou e outra;

16) E, finalmente, o CARA DA INFORMATICA tambem e filho de DEUS e nao filho disso que voce pensou.

Agora, depois de aprender sobre O CARA DA INFORMATICA, repasse aos seus amigos, afinal, essas verdades precisam chegar a todos. O CARA DA INFORMATICA agradece.
/** Certificacao JEDI http://www.dfjug.org/DFJUG/tvdfjug/videos/v_wildt.html **/"

terça-feira, 1 de julho de 2008

Matando processos com o auxílio da shell do linux, do kill e do ps

Para matar aquele processo chato que acabou entrando em loop infinito, ou você não aguenta mais esperar a resposta dele...!!

Para matar um processo é necessário primeiro saber qual é o número do PID dele, para isso você digita na shell:

$ ps -A



Sabendo o PID basta dar o comando:

$ kill PID_do_Processo


Por exemplo eu vou matar o processo do java, para isso dei um ps -A que me gerou o resultado abaixo:

danilomatias@danilomatias-laptop:~$ ps -A
PID TTY TIME CMD
1 ? 00:00:02 init
2 ? 00:00:00 kthreadd
3 ? 00:00:00 migration/0
4 ? 00:00:00 ksoftirqd/0
5 ? 00:00:00 watchdog/0
6 ? 00:00:00 migration/1
7 ? 00:00:00 ksoftirqd/1
8 ? 00:00:00 watchdog/1
9 ? 00:00:00 events/0
10 ? 00:00:00 events/1
11 ? 00:00:00 khelper
46 ? 00:00:00 kblockd/0
47 ? 00:00:00 kblockd/1
50 ? 00:00:00 kacpid
51 ? 00:00:00 kacpi_notify
134 ? 00:00:00 kseriod
176 ? 00:00:00 pdflush
177 ? 00:00:00 pdflush
178 ? 00:00:00 kswapd0
219 ? 00:00:00 aio/0
220 ? 00:00:00 aio/1
1417 ? 00:00:00 ksuspend_usbd
1420 ? 00:00:00 khubd
1558 ? 00:00:00 ata/0
1565 ? 00:00:00 ata/1
1566 ? 00:00:00 ata_aux
2319 ? 00:00:00 scsi_eh_0
2320 ? 00:00:00 scsi_eh_1
2321 ? 00:00:00 scsi_eh_2
2361 ? 00:00:00 scsi_eh_3
2362 ? 00:00:00 usb-storage
2398 ? 00:00:00 scsi_eh_4
2399 ? 00:00:00 scsi_eh_5
2536 ? 00:00:00 kjournald
2741 ? 00:00:00 udevd
3049 ? 00:00:00 kpsmoused
4263 ? 00:00:00 kjournald
4534 tty4 00:00:00 getty
4535 tty5 00:00:00 getty
4537 tty2 00:00:00 getty
4540 tty3 00:00:00 getty
4541 tty6 00:00:00 getty
4727 ? 00:00:00 acpid
4761 ? 00:00:00 kondemand/0
4762 ? 00:00:00 kondemand/1
4847 ? 00:00:00 syslogd
4900 ? 00:00:00 dd
4902 ? 00:00:00 klogd
4924 ? 00:00:00 dbus-daemon
4940 ? 00:00:00 NetworkManager
4954 ? 00:00:00 NetworkManagerD
4967 ? 00:00:00 system-tools-ba
4987 ? 00:00:00 avahi-daemon
4988 ? 00:00:00 avahi-daemon
5030 ? 00:00:00 cupsd
5098 ? 00:00:00 dhcdbd
5117 ? 00:00:01 hald
5120 ? 00:00:00 console-kit-dae
5121 ? 00:00:00 hald-runner
5194 ? 00:00:00 hald-addon-inpu
5200 ? 00:00:00 hald-addon-cpuf
5201 ? 00:00:00 hald-addon-acpi
5225 ? 00:00:00 hald-addon-stor
5228 ? 00:00:00 hald-addon-stor
5254 ? 00:00:00 hcid
5274 ? 00:00:00 btaddconn
5275 ? 00:00:00 btdelconn
5285 ? 00:00:00 bluetoothd-serv
5286 ? 00:00:00 bluetoothd-serv
5291 ? 00:00:00 krfcommd
5330 ? 00:00:00 gdm
5333 ? 00:00:00 gdm
5337 tty7 00:05:46 Xorg
5375 ? 00:00:00 atd
5389 ? 00:00:00 cron
5486 ? 00:00:00 vmnet-bridge
5497 ? 00:00:00 dhclient
5504 ? 00:00:00 vmnet-netifup
5517 ? 00:00:00 vmnet-dhcpd
5532 ? 00:00:00 vmnet-netifup
5541 ? 00:00:00 vmnet-dhcpd
5546 ? 00:00:00 vmnet-natd
5624 tty1 00:00:00 getty
5719 ? 00:00:01 gconfd-2
5721 ? 00:00:00 gnome-keyring-d
5722 ? 00:00:00 x-session-manag
5809 ? 00:00:00 seahorse-agent
5813 ? 00:00:00 dbus-daemon
5814 ? 00:00:01 gnome-settings-
5822 ? 00:00:00 pulseaudio
5825 ? 00:00:00 gconf-helper
5834 ? 00:00:00 compiz
5840 ? 00:00:06 gnome-panel
5841 ? 00:00:02 gnome-screensav
5842 ? 00:00:01 nautilus
5849 ? 00:00:00 bonobo-activati
5876 ? 00:00:00 gvfsd
5893 ? 00:00:00 gvfs-fuse-daemo
5914 ? 00:00:15 compiz.real
5915 ? 00:00:00 bluetooth-apple
5918 ? 00:00:00 update-notifier
5922 ? 00:00:00 tracker-applet
5925 ? 00:00:00 evolution-alarm
5928 ? 00:00:00 trackerd
5931 ? 00:00:01 nm-applet
5932 ? 00:00:00 python
5933 ? 00:00:00 gnome-volume-ma
5935 ? 00:00:00 gnome-power-man
5986 ? 00:00:00 evolution-excha
5994 ? 00:00:00 trashapplet
5996 ? 00:00:00 evolution-data-
5999 ? 00:00:00 gvfsd-trash
6007 ? 00:00:00 gvfsd-burn
6024 ? 00:00:00 sh
6025 ? 00:00:00 compiz-decorato
6027 ? 00:00:04 gtk-window-deco
6036 ? 00:00:00 mixer_applet2
6039 ? 00:00:00 fast-user-switc
6052 ? 00:20:36 firefox
6428 ? 00:00:14 java
6489 ? 00:00:02 gnome-terminal
6491 ? 00:00:00 gnome-pty-helpe
6492 pts/0 00:00:00 bash
6509 pts/1 00:00:00 bash
6577 ? 00:00:00 sh
6578 ? 00:00:00 dcop
6580 pts/1 00:00:00 ps

Verifiquei que o PID do java é: 6428

Agora vou dar o comando para matar o processo 6428:

danilomatias@danilomatias-laptop:~$ kill 6428


Prontinho processo morto com êxito!

Assindo Vídeos no linux com o ffplay

O ffplay é um programa de visualização de vídeos que acompanha o ffmpeg, ao instalar o ffmpeg, para poder converter vídeos (você instala nas distribuições baseadas em debian com o comando $ sudo apt-get install ffmpeg)

Quando você instalou o ffmpeg instalou sem querer também o ffplay e o ffserver

O comando para ver um vídeo (qualquer formato de vídeo que o ffmpeg suporta, a lista se encontra na próxima postagem, um deles é o .flv) no ffplay é:

$ ffplay nome_do_video.extensao_do_video

Por exemplo se eu quero ver o vídeo 1.flv eu dou o comando:

$ ffplay 1.flv



As opções do ffplay se encontram abaixo:




danilomatias@danilomatias-laptop:~/Vídeos/ffmpeg$ ffplay
ffplay version SVN-rUNKNOWN, Copyright (c) 2003-2006 Fabrice Bellard, et al.
usage: ffplay [options] input_file
Simple media player

Main options:
-h show help
-x width force displayed width
-y height force displayed height
-s size set frame size (WxH or abbreviation)
-fs force full screen
-an disable audio
-vn disable video
-ss pos seek to a given position in seconds
-bytes seek by bytes
-nodisp disable graphical display
-f fmt force format

Advanced options:
-ast
-pix_fmt format set pixel format
-stats show status
-debug print specific debug info
-bug workaround bugs
-vismv visualize motion vectors
-fast non spec compliant optimizations
-genpts generate pts
-lowres
-skiploop
-skipframe
-skipidct
-idct algo set idct algo
-er threshold set error detection threshold (0-4)
-ec bit_mask set error concealment options
-rtp_tcp force RTP/TCP protocol usage
-sync type set audio-video sync. type (type=audio/video/ext)
-threads count thread count

While playing:
q, ESC quit
f toggle full screen
p, SPC pause
a cycle audio channel
v cycle video channel
t cycle subtitle channel
w show audio waves
left/right seek backward/forward 10 seconds
down/up seek backward/forward 1 minute
mouse click seek to percentage in file corresponding to fraction of width




Para exibir isso que está acima de o comando:



$ ffplay


Olhando essa ajuda ai acima observa-se que a forma geral do comando é:
ffplay [options] input_file

Ou seja: ffplay opções arquivoDeVideo



Um exemplo, para conseguir ver o vídeo pti.flv com algumas opções digitei:


$ ffplay pti.flv -skiploop -skipframe -stats -ss pos -fs -ast -debug -vismv -genpts
-lowres -threads count

Onde o Vídeo pti, rodará na tela inteira do monitor (-fs) e as demais opções estão ali a volta.




Espero ter ajudado!

Lembre-se o ffplay é o player que toca o maior número de formatos existentes (pelo menos dos que eu conheço)

Apenas por isso acho que essa dica é válida

Abração e se cuida!

sábado, 28 de junho de 2008

Convertendo vídeos no linux baseado em distribuições debian, e baixando vídeos do youtube

Caso não tenha o ffmpeg instalado em seu computador digite na console do seu linux baseado em distribuições debian (Kurumin, ubuntu ...)

$ sudo apt-get install ffmpeg


Para ver os formatos que o ffmpeg pode converter basta dar o comando na shell:



$ ffmpeg -formats



O Resultado é:



FFmpeg version SVN-rUNKNOWN, Copyright (c) 2000-2007 Fabrice Bellard, et al.
configuration: --enable-gpl --enable-pp --enable-swscaler --enable-pthreads --enable-libvorbis --enable-libtheora --enable-libogg --enable-libgsm --enable-dc1394 --disable-debug --enable-shared --prefix=/usr
libavutil version: 1d.49.3.0
libavcodec version: 1d.51.38.0
libavformat version: 1d.51.10.0
built on Mar 12 2008 14:31:53, gcc: 4.2.3 (Ubuntu 4.2.3-2ubuntu4)
File formats:
E 3g2 3gp2 format
E 3gp 3gp format
D 4xm 4X Technologies format
D MTV MTV format
D RoQ Id RoQ format
D aac ADTS AAC
DE ac3 raw ac3
E adts ADTS AAC
DE aiff Audio IFF
DE alaw pcm A law format
DE amr 3gpp amr file format
DE asf asf format
E asf_stream asf format
DE au SUN AU Format
DE audio_device audio grab and output
DE avi avi format
D avs avs format
E crc crc testing format
D daud D-Cinema audio format
D dc1394 dc1394 A/V grab
D dsicin Delphine Software International CIN format
D dts raw dts
DE dv DV video format
D dv1394 dv1394 A/V grab
E dvd MPEG2 PS format (DVD VOB)
D ea Electronic Arts Multimedia Format
DE ffm ffm format
D film_cpk Sega FILM/CPK format
DE flac raw flac
D flic FLI/FLC/FLX animation format
DE flv flv format
E framecrc framecrc testing format
DE gif GIF Animation
DE gxf GXF format
DE h261 raw h261
DE h263 raw h263
DE h264 raw H264 video format
D idcin Id CIN format
DE image2 image2 sequence
DE image2pipe piped image2 sequence
D ingenient Ingenient MJPEG
D ipmovie Interplay MVE format
DE m4v raw MPEG4 video format
D matroska Matroska file format
DE mjpeg MJPEG video
D mm American Laser Games MM format
DE mmf mmf format
E mov mov format
D mov,mp4,m4a,3gp,3g2,mj2 QuickTime/MPEG4/Motion JPEG 2000 format
E mp2 MPEG audio layer 2
DE mp3 MPEG audio layer 3
E mp4 mp4 format
D mpc musepack
DE mpeg MPEG1 System format
E mpeg1video MPEG video
E mpeg2video MPEG2 video
DE mpegts MPEG2 transport stream format
D mpegvideo MPEG video
E mpjpeg Mime multipart JPEG format
DE mulaw pcm mu law format
D mxf MXF format
D nsv NullSoft Video format
E null null video format
D nut nut format
D nuv NuppelVideo format
DE ogg Ogg format
E psp psp mp4 format
D psxstr Sony Playstation STR format
DE rawvideo raw video format
D redir Redirector format
DE rm rm format
E rtp RTP output format
D rtsp RTSP input format
DE s16be pcm signed 16 bit big endian format
DE s16le pcm signed 16 bit little endian format
DE s8 pcm signed 8 bit format
D sdp SDP
D shn raw shorten
D smk Smacker Video
D sol Sierra SOL Format
E svcd MPEG2 PS format (VOB)
DE swf Flash format
D tiertexseq Tiertex Limited SEQ format
D tta true-audio
DE u16be pcm unsigned 16 bit big endian format
DE u16le pcm unsigned 16 bit little endian format
DE u8 pcm unsigned 8 bit format
D vc1 raw vc1
E vcd MPEG1 System format (VCD)
D video4linux video grab
D video4linux2 video grab
D vmd Sierra VMD format
E vob MPEG2 PS format (VOB)
DE voc Creative Voice File format
DE wav wav format
D wc3movie Wing Commander III movie format
D wsaud Westwood Studios audio format
D wsvqa Westwood Studios VQA format
D wv WavPack
DE yuv4mpegpipe YUV4MPEG pipe format

Codecs:
D V 4xm
D V D 8bps
D V VMware video
D V D aasc
EA ac3
DEA adpcm_4xm
DEA adpcm_adx
DEA adpcm_ct
DEA adpcm_ea
DEA adpcm_ima_dk3
DEA adpcm_ima_dk4
DEA adpcm_ima_qt
DEA adpcm_ima_smjpeg
DEA adpcm_ima_wav
DEA adpcm_ima_ws
DEA adpcm_ms
DEA adpcm_sbpro_2
DEA adpcm_sbpro_3
DEA adpcm_sbpro_4
DEA adpcm_swf
DEA adpcm_xa
DEA adpcm_yamaha
D A alac
DEV D asv1
DEV D asv2
D V D avs
DEV bmp
D V D camstudio
D V D camtasia
D V D cavs
D V D cinepak
D V D cljr
D A cook
D V D cyuv
D A dca
D A dsicinaudio
D V D dsicinvideo
DES dvbsub
DES dvdsub
DEV D dvvideo
DEV D ffv1
DEVSD ffvhuff
DEA flac
DEV D flashsv
D V D flic
DEVSD flv
D V D fraps
DEA g726
DEV gif
DEA gsm
D A gsm_ms
DEV D h261
DEVSDT h263
D VSD h263i
EV h263p
D V DT h264
DEVSD huffyuv
D V D idcinvideo
D A imc
D V D indeo2
D V indeo3
D A interplay_dpcm
D V D interplayvideo
EV jpegls
D V kmvc
EV libtheora
EV ljpeg
D V D loco
D A mace3
D A mace6
D V D mdec
DEV D mjpeg
D V D mjpegb
D V D mmvideo
DEA mp2
D A mp3
D A mp3adu
D A mp3on4
D A mpc sv7
DEVSDT mpeg1video
DEVSDT mpeg2video
DEVSDT mpeg4
D VSDT mpegvideo
DEVSD msmpeg4
DEVSD msmpeg4v1
DEVSD msmpeg4v2
D V D msrle
D V D msvideo1
D V D mszh
D V D nuv
DEV pam
DEV pbm
DEA pcm_alaw
DEA pcm_mulaw
DEA pcm_s16be
DEA pcm_s16le
DEA pcm_s24be
DEA pcm_s24daud
DEA pcm_s24le
DEA pcm_s32be
DEA pcm_s32le
DEA pcm_s8
DEA pcm_u16be
DEA pcm_u16le
DEA pcm_u24be
DEA pcm_u24le
DEA pcm_u32be
DEA pcm_u32le
DEA pcm_u8
DEV pgm
DEV pgmyuv
DEV png
DEV ppm
D A qdm2
D V D qdraw
D V D qpeg
D V D qtrle
DEV rawvideo
D A real_144
D A real_288
D A roq_dpcm
D V D roqvideo
D V D rpza
DEV D rv10
DEV D rv20
D A shorten
D A smackaud
D V smackvid
D V D smc
DEV snow
D A sol_dpcm
DEA sonic
EA sonicls
D V D sp5x
DEV D svq1
D VSD svq3
D V targa
D V theora
D V D tiertexseqvideo
D V tiff
D V D truemotion1
D V D truemotion2
D A truespeech
D A tta
D V D ultimotion
D V vc1
D V D vcr1
D A vmdaudio
D V D vmdvideo
DEA vorbis
D V vp3
D V vp5
D V vp6
D V vp6f
D V D vqavideo
D A wavpack
DEA wmav1
DEA wmav2
DEVSD wmv1
DEVSD wmv2
D V wmv3
D V D wnv1
D A ws_snd1
D A xan_dpcm
D V D xan_wc3
D V D xl
DEV D zlib
DEV zmbv

Supported file protocols:
file: pipe: udp: rtp: tcp: http:
Frame size, frame rate abbreviations:
ntsc pal qntsc qpal sntsc spal film ntsc-film sqcif qcif cif 4cif
Motion estimation methods:
zero(fastest) full(slowest) log phods epzs(default) x1 hex umh iter

Note, the names of encoders and decoders dont always match, so there are
several cases where the above table shows encoder only or decoder only entries
even though both encoding and decoding are supported for example, the h263
decoder corresponds to the h263 and h263p encoders, for file formats its even
worse



Em outras palavras ele é capaz de converter qualquer formato desses abaixo para qualquer formato desses abaixo:






.3gp2
.3gp
.4xm
.MTV
.aac
.ac3
.adts
.aiff
.alaw
.amr
.asf
.asf_stream
.au
.audio_device
.avi
.avs
.crc
.daud
.dc1394
.dsicin
.dts
.dv
.dv1394
.dvd
.ea
.ffm
.film_cpk
.flac
.flic
.flv
.framecrc
.gif
.gxf
.h261
.h263
.h264
.idcin
.image2
.image2pipe
.ingenient
.ipmovie
.m4v
.matroska
.mjpeg
.mm
.mmf
.mov
.m4a
.3gp
.3g2
.mj2
.mp2
.mp3
.mp4
.mpc
.mpeg
.mpeg1video
.mpeg2video
.mpegts
.mpegvideo
.mpjpeg
.mulaw
.mxf
.nsv
.null
.nut
.nuv
.ogg
.psp
.psxstr
.rawvideo
.redir
.rm
.rtp
.rtsp
.s16be
.s16le
.s8
.sdp
.shn
.smk
.sol
.svcd
.swf
.tiertexseq
.tta
.u16be
.u16le
.u8
.vc1
.vcd
.video4linux
.video4linux2
.vmd
.vob
.voc
.wav
.wc3movie
.wsaud
.wsvqa
.wv
.yuv4mpegpipe

Codecs:
.4xm
.8bps
.VMware video
.aasc
.ac3
.adpcm_4xm
.adpcm_adx
.adpcm_ct
.adpcm_ea
.adpcm_ima_dk3
.adpcm_ima_dk4
.adpcm_ima_qt
.adpcm_ima_smjpeg
.adpcm_ima_wav
.adpcm_ima_ws
.adpcm_ms
.adpcm_sbpro_2
.adpcm_sbpro_3
.adpcm_sbpro_4
.adpcm_swf
.adpcm_xa
.adpcm_yamaha
.alac
.asv1
.asv2
.avs
.bmp
.camstudio
.camtasia
.cavs
.cinepak
.cljr
.cook
.cyuv
.dca
.dsicinaudio
.dsicinvideo
.dvbsub
.dvdsub
.dvvideo
.ffv1
.ffvhuff
.flac
.flashsv
.flic
.flv
.fraps
.g726
.gif
.gsm
.gsm_ms
.h261
.h263
.h263i
.h263p
.h264
.huffyuv
.idcinvideo
.imc
.indeo2
.indeo3
.interplay_dpcm
.interplayvideo
.jpegls
.kmvc
.libtheora
.ljpeg
.loco
.mace3
.mace6
.mdec
.mjpeg
.mjpegb
. mmvideo
.mp2
.mp3
.mp3adu
.mp3on4
. mpc sv7
.mpeg1video
.mpeg2video
.mpeg4
.mpegvideo
.msmpeg4
.msmpeg4v1
.msmpeg4v2
.msrle
.msvideo1
.mszh
.nuv
.pam
.pbm
.pcm_alaw
.pcm_mulaw
.pcm_s16be
.pcm_s16le
.pcm_s24be
.pcm_s24daud
.pcm_s24le
.pcm_s32be
.pcm_s32le
.pcm_s8
.pcm_u16be
.pcm_u16le
.pcm_u24be
.pcm_u24le
.pcm_u32be
.pcm_u32le
.pcm_u8
.pgm
.pgmyuv
.png
.ppm
.qdm2
.qdraw
.qpeg
.qtrle
.rawvideo
.real_144
.real_288
.roq_dpcm
.roqvideo
.rpza
.rv10
.rv20
.shorten
.smackaud
.smackvid
.smc
.snow
.sol_dpcm
.sonic
.sonicls
.sp5x
.svq1
.svq3
.targa
.theora
.tiertexseqvideo
.tiff
.truemotion1
.truemotion2
.truespeech
.tta
.ultimotion
.vc1
.vcr1
.vmdaudio
.vmdvideo
.vorbis
.vp3
.vp5
.vp6
.vp6f
.vqavideo
.wavpack
.wmav1
.wmav2
.wmv1
.wmv2
.wmv3
.wnv1
.ws_snd1
.xan_dpcm
.xan_wc3
.xl
.zlib
.zmbv





O Comando para converter Vídeos usando o ffmpeg é :



ffmpeg -i nome_do_arquivo_a_ser_convrtido.extensao_do_arquivo -ab 56 -ar 22050 -b 50 -s 320x240 -title Titulo\ do\ Video -comment Comentario\ Sobre\ o\ video nome_do_videoConvertido.extensaoDesejadaDoArquivoConvertido




Para baixar os vídeos do site do youtube você pode utilizar o programa youtube-dl, já para instalar o programa youtube-dl no seu computador basta basta dar o comando:
$ sudo apt-get install youtube-dl

Para baixar o vídeo do youtube basta você saber o url do vídeo (o endereço lá na barra de endereços, começa com: http://br.youtube.com/...) e
dar o comando:
$ youtube-dl -t url_do_youtube_de_seu_video_a_baixar

onde o -t vai dar o nome do título ao seu vídeo+alguns_caracteres_loucos

As opções dele são (comando youtube-dl -h):

Usage: youtube-dl [options] video_url

Options:
-h, --help print this help text and exit
-v, --version print program version and exit
-u USERNAME, --username=USERNAME
account username
-p PASSWORD, --password=PASSWORD
account password
-o FILE, --output=FILE
output video file name
-q, --quiet activates quiet mode
-s, --simulate do not download video
-t, --title use title in file name
-l, --literal use literal title in file name
-n, --netrc use .netrc authentication data
-g, --get-url print final video URL only
-2, --title-too used with -g, print title too

Por exemplo para baixar e converter o clipe da música the scientis do coldplay eu digitei na shell:

$ youtube-dl -t http://br.youtube.com/watch?v=V3Kd7IGPyeg


Retrieving video webpage... done.
Extracting video title... done.
Extracting URL "t" parameter... done.
Requesting video file... done.
Video data found at http://v23.cache.googlevideo.com/get_video?video_id=V3Kd7IGPyeg&origin=mia-v9.mia.youtube.com&signature=8D276E61B6768A37B575ECBFE1256192C8A841DE.70A5E75A202DBC3A1748773BF40CF9CAFA9B20A0&ip=189.58.113.244&ipbits=16&expire=1214700090&key=yt1&sver=2
Retrieving video data: 100.0% ( 9.22M of 9.22M) at 82.35k/s ETA 00:00 done.
Video data saved to coldplay_the_scientist-V3Kd7IGPyeg.flv



$ ffmpeg -i coldplay_the_scientist-V3Kd7IGPyeg.flv -ab 56 -ar 22050 -b 50 -s 320x240 -title The\ Scientist\ Coldplay coldplay_the_scientist.avi