sábado, 20 de junho de 2015

Localizando arquivos duplicados no terminal com fdupes

Fdupes é um excelente programa para localizar arquivos duplicados pelo terminal, podendo fazer também a exclusão dos arquivos duplicados por ele.
O fdupes analisar o md5sum de todos os arquivos e não somente o nome dos mesmos, portanto você pode até renomear o arquivo duplicado com outro nome diferente que o fdupes saberá que se trata do mesmo arquivo. Vale lembrar que um arquivo com mesmo nome idêntico, mas com conteúdo diferente, mesmo que seja de apenas um caractere a mais ou a menos não é um arquivo duplicado, já que o md5sum do mesmo será diferente e portanto os mesmos não serão listados como duplicados.

Para localizar arquivos duplicados com o fdupes é necessário sempre especificar um nome de diretório.

Opções mais usadas são:
-r = incluir subdiretórios
-S = exibi os tamanhos dos arquivos
-d = excluir arquivos duplicados
-m = informações da quantidade de arquivos duplicados
-h = ajuda

Localizar arquivos duplicados

$ fdupes -r /mnt/dados
$ fdupes -r documentos/

Notas:
O fdupes exibi um indicador de porcentagem durante a procura.
Ao exibir o resultado da procura o fdupes agrupa sempre os arquivos semelhantes e coloca uma linha em branco entre cada listagem, para facilitar sua compreensão.


Exemplo curto para demostrar a procura pelo fdupe

Estrutura de diretórios a partir do diretório Documentos, que contém os subdiretórios atestar e prov.

$ tree 
|-- Criando vídeos com efeitos com o ffmpeg usando filtros.odt 
|-- ffmpeg.pdf 
|-- atestar 
|   |-- avarias.txt 
|   |-- myfirewall 
|   `-- varias.txt 
|-- fundo.png 
|-- postar.odt 
`-- prov 
    `-- varias.txt 

2 directories, 8 files 

Onde avarias.txt é exatamente o mesmo arquivo varias.txt em que copiei o mesmo com outro nome diferente.

$ fdupes -r Documentos/ 
Documentos/atestar/varias.txt           
Documentos/prov/varias.txt 
Documentos/atestar/avarias.txt 

Veja que ele acusou que o avarias.txt é exatamente o mesmo arquivo varias.txt, pois o seu conteúdo é idêntico e que também tem outro varias.txt no subdiretório prov.

Nota:
Se você tiver uma partição, HD externo ou diretório com vários gigabytes e milhares de arquivos principalmente se os mesmos forem maiores que 100 MB este processo poderá demorar bastante.

Numa partição com 164.774 arquivos num total de 165 GB levou 45 minutos para conclusão total em uma cpu Core2Duo de 2.4 Ghz.

Se você tiver uma grande quantidade de arquivos duplicados o bom é redirecionar a procura para um arquivo no disco para analisar com calma a melhor altitude a tomar. Exemplo: fdupes -r /Documentos > fdupes.log


Excluído arquivos duplicados

$ fdupes -r -d  Documentos/ 
[1] Documentos/atestar/varias.txt       
[2] Documentos/prov/varias.txt 
[3] Documentos/atestar/avarias.txt 

Set 1 of 1, preserve files [1 - 3, all]: 2 

   [-] Documentos/atestar/varias.txt 
   [+] Documentos/prov/varias.txt 
   [-] Documentos/atestar/avarias.txt 

Continuado a utilizar os mesmos arquivos do exemplo curto, ele avisa que existe 3 duplicações de um mesmo arquivo e pergunta qual você deseja preservar destes 3 arquivos, sendo que eu digitei 2 e teclei Enter, sendo então excluídos automaticamente o arquivo 1 e 3 e no final ele apresenta lista de todos os arquivos que foram preservados e excluídos com o caminho dos mesmos.
Os que tiver  [-] foram excluídos e os que tiver  [+] foram os arquivos preservados.
A frase Set 1 of 1, preserve files diz que foi encontrado um conjunto de arquivos duplicados, ou seja, apenas 1 arquivo duplicado, caso fosse 5 arquivos duplicados o 5 vai depois de of.

Nota:
Se quiser preservar todos os arquivos duplicados do mesmo nome apresentado, digite all e tecle Enter, que ele passa para o próximo conjunto de arquivo duplicado caso houver.

Se você tiver um diretório com uma grande quantidade de arquivos duplicados para excluir com fdupes pode ficar cansativo já que você terá que escolher qual deles preservará, mas para poucos arquivos não é trabalhoso.

Obtendo a informações das quantidade de arquivos duplicados

$ fdupes -r -m  Documentos/ 
8 duplicate files (in 4 sets), occupying 1.6 megabytes 

No exemplo acima existe 4 conjuntos de arquivos duplicados (4 tipos de arquivos diferentes em que existem duplicação dos mesmos), sendo no total 8 duplicações de arquivos que ocupam 1.6 MB de espaço em disco.

Download fdupes

Procure no repositório de sua distro por fdupes, caso não tiver você também pode baixar o sources em http://fdupes.googlecode.com/files/fdupes-1.51.tar.gz
para compilação.

Para que usa o Slackware e derivados com o sbopkg:
$ sudo sbopkg -i fdupes

segunda-feira, 8 de junho de 2015

Criando vídeo dentro de vídeo com efeito acelerado no vídeo interno

Nesta dica vamos criar um vídeo dentro de outro vídeo com o vídeo interno com um efeito de uma pequena aceleração para antecipar a cena do vídeo principal.

$ ffmpeg -i pati.mp4 -s 640x360 -q:v 0 -vf "movie=pati.mp4, setpts=0.9*PTS,scale=100:60 [vid2]; [in][vid2] overlay=main_w-overlay_w-10:280 [out]"  videoduplo.avi


No exemplo acima você pode utilizar o mesmo vídeo 2x na linha de comando do ffmpeg, sendo que o vídeo interno estará com uma pequena aceleração em relação ao vídeo principal.
A dimensão 640x360 e o tamanho de tela que terá o arquivo de saída, podendo você especificar a sua desejada, mas deverá neste caso alterar também os valores de scale e de  overlay=main_w-overlay_w para que se enquadre com o tamanho de tela que você especificar.
O vídeo terminará no tempo do vídeo principal com música normal do começo ao fim, sendo que o vídeo secundário não tem a parte do áudio transferido caso o vídeo de entrada seja um clipe musical e o mesmo terminará antes do vídeo principal já que o mesmo está acelerado.

Sobre os valores da posição do vídeo interno

O primeiro valor 10 deixa o vídeo quase encostado do lado direito da janela do vídeo principal. 
O segundo valor 280 desloca o vídeo para baixo, próximo ao limite da parte inferior do vídeo principal e sendo que ambos valores é de acordo com o tamanho de tela do vídeo principal.

Tamanho do vídeo interno

O tamanho do vídeo interno e o que vem depois de scale= ou seja 100:60

Abaixo um exemplo criando do vídeo dentro de vídeo.




segunda-feira, 1 de junho de 2015

Inserindo legenda em vídeo na linha de comando com o FFmpeg

Os arquivos da legenda .ass, .ssa e .srt deve está na codificação de caractere UTF-8 para funcionar corretamente com o ffmpeg, pois senão surgirá um monte de erros e a legenda pode não ser embutida ou ficar dessincronizada no vídeo.


Verificando a codificação de caracteres do arquivo da legenda

$ file video.srt 
video.srt: Pascal source, UTF-8 Unicode text, with CRLF line terminators

$ file trovao.srt 
trovao.srt: Pascal source, ISO-8859 text, with CRLF line terminators 

Nota:
O ffmpeg poderá não inseri a legenda no vídeo com codificação diferente de UTF-8, ou apresentar muitos erros caso consiga inserir, como fora de sincronismo, pular frases, etc.

Como mudar a codificação de caractere caso esteja diferente do UTF-8 ?

Você pode utilizar para isto qualquer editor de texto ASCII que permite especificar uma codificação de caracteres como o Leafpad.
No Leafpad, abra o arquivo da legenda .ass e depois ir no menu Arquivo/Salvar Como, em Codificação de caracteres, escolha UTF-8 e CR+LF e clique em Salvar, depois confirme sobrescrever o arquivo atual.


Outra forma de mudar a codificação é usando o comando iconv em uma janela de terminal.

Convertendo de ISO-8859-1 para UTF-8

$ iconv -f iso-8859-1 -t utf-8 legenda > legenda2

Onde o arquivo legenda2 está com todo o seu conteúdo no formato UTF-8.


Inserindo legenda .ass (.ssa)

O arquivo da legenda .ass  (.ssa - Sub Station Alpha), deve está na codificação de caractere UTF-8 para funcionar corretamente com o ffmpeg.

$ ffmpeg -i video.flv -vf ass=video.ass noite.avi 

Pronto.

Notas:
Para que se possa unir a legenda .ass você deve ter o pacote  libass instalado em seu sistema e o ffmpeg da sua distro deve ter sido compilado com a opção --enable-libass caso contrário não funcionará.


Alterando tamanho da fonte, cor e altura no arquivo da legenda .ass

Como arquivo de legenda .ass também é um arquivo de texto puro ASCII, o mesmo pode ser editado manualmente, para alterar as opções da legenda, sendo  a mais fácil o tamanho da legenda. 
Em Style: Default,Arial,16   troque o tamanho 16 por 36. 

[V4+ Styles] 
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, AlphaLevel, Encoding 
Style: Default,Arial,36,&Hffffff,&Hffffff,&H0,&H0,0,0,0,1,1,0,2,10,10,10,0,0 

Notas:
O tamanho 36 fica muito bom na visualização em um monitor LCD 4:3 de 17" com linhas de 21 caracteres incluído os espaços em branco, e sendo que a previsão é de no máximo 35 a 40 caracteres incluindo os espaços em branco pra caber na mesma linha (vídeo com tela de 640x270).

Alterando a cor da legenda

O padrão da cor da legenda é branco (&Hffffff,&Hffffff) 

Pra deixar a legenda na cor amarela, substitua por H0000ffff, devendo ficar assim.:
Style: Default,Arial,36,&H0000ffff,&H0000ffff 


Subindo a altura da legenda

No valor padrão abaixo:
Style: Default,Arial,16,&Hffffff,&Hffffff,&H0,&H0,0,0,0,1,1,0,2,10,10,10,0,0 

O terceiro valor da direita para esquerda da linha Style, modifica a altura padrão da legenda, sendo o valor 10 o padrão.
Para subir a legenda mais um pouco, um valor bom é o 30 que não deixa a mesma muito embaixo da tela.

Style: Default,Arial,16,&Hffffff,&Hffffff,&H0,&H0,0,0,0,1,1,0,2,10,10,30,0,0

Se utilizar o valor 80 a legenda ficará no meio da tela.

Importante:
O tamanho da legenda .ass e a cor alterada, bem como a altura da mesma no arquivo poderá não ser vista sua alteração ao reproduzir o vídeo com alguns players de vídeo mesmo o arquivo da legenda tendo o mesmo nome do vídeo e estando na mesma pasta, sendo a visualização das alterações somente depois de embutida a legenda ao vídeo nestes players.

O arquivo de vídeo com o arquivo da legenda separada .ass não será vista a mesma durante a reprodução em uma TV LED com entrada usb tendo os dois em um pendrive, somente será vista a legenda quando o arquivo da legenda for .srt.



Convertendo o formato .srt pra .ass com o ffmpeg 

Se você tem um arquivo de legenda .srt e que converter para .ass para poder especificar o tamanho da fonte e usar também a cor amarela na legenda sem precisar instalar programas adicionais para isto, você pode fazer pelo próprio ffmpeg e um editor de texto ASCII.

Antes de usar o ffmpeg é importantíssimo que o arquivo da legenda esteja com a codificação UTF-8, pois senão não funcionara corretamente, devendo salvar o arquivo da legenda na codificação de caractere UTF-8 como descrito anteriormente.

Para converter a legenda .srt para .ass

$  ffmpeg -i trovao.srt trovao.ass 

Pronto, arquivo de legenda convertido para .ass

Nota:
Também pode-se especificar a extensão .ssa que produz o mesmo resultado na conversão.

Inserido legenda .srt com o ffmpeg

O arquivo da legenda .srt (SubRip) deve está na codificação de caractere UTF-8, caso não estiver a mesma poderá não ser inserida ou apresentar muitos erros.

$ ffmpeg -i video.flv -vf subtitles=video.srt saida.avi


Notas:
Testado com vídeos de entrada nos formatos flv, mp4 e avi com o ffmpeg versão 2.1.5 no Salix 14.1.


Verificando os formatos de arquivo de legenda suportado pelo ffmpeg 


$ ffmpeg -codecs | grep "^...S" 
ffmpeg version 2.1.5 Copyright (c) 2000-2014 the FFmpeg developers 
  built on Jun 30 2014 00:37:24 with gcc 4.8.2 (GCC) 
  configuration: --prefix=/usr --libdir=/usr/lib --shlibdir=/usr/lib --mandir=/usr/man --enable-shared --disable-static --disable-debug --enable-pthreads --enable-x11grab --disable-libfaac --enable-libcaca --enable-librtmp --enable-libmp3lame --enable-libmodplug --enable-libspeex --enable-libwavpack --enable-libtheora --enable-libv4l2 --enable-libvorbis --enable-libx264 --enable-libschroedinger --enable-libass --enable-libxvid --enable-gpl --enable-postproc --enable-libopus --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libvpx --enable-libcdio --enable-openal --enable-avresample --enable-version3 --disable-ssse3 --arch=i486 --cpu=i686 
  libavutil      52. 48.101 / 52. 48.101 
  libavcodec     55. 39.101 / 55. 39.101 
  libavformat    55. 19.104 / 55. 19.104 
  libavdevice    55.  5.100 / 55.  5.100 
  libavfilter     3. 90.100 /  3. 90.100 
  libavresample   1.  1.  0 /  1.  1.  0 
  libswscale      2.  5.101 /  2.  5.101 
  libswresample   0. 17.104 /  0. 17.104 
  libpostproc    52.  3.100 / 52.  3.100 
 ..S... = Subtitle codec 
 DES... ass                  ASS (Advanced SSA) subtitle 
 DES... dvb_subtitle         DVB subtitles (decoders: dvbsub ) (encoders: dvbsub ) 
 ..S... dvb_teletext         DVB teletext 
 DES... dvd_subtitle         DVD subtitles (decoders: dvdsub ) (encoders: dvdsub ) 
 ..S... eia_608              EIA-608 closed captions 
 D.S... hdmv_pgs_subtitle    HDMV Presentation Graphic Stream subtitles (decoders: pgssub ) 
 D.S... jacosub              JACOsub subtitle 
 D.S... microdvd             MicroDVD subtitle 
 DES... mov_text             MOV text 
 D.S... mpl2                 MPL2 subtitle 
 D.S... pjs                  PJS (Phoenix Japanimation Society) subtitle 
 D.S... realtext             RealText subtitle 
 D.S... sami                 SAMI subtitle 
 DES... srt                  SubRip subtitle with embedded timing 
 DES... ssa                  SSA (SubStation Alpha) subtitle 
 DES... subrip               SubRip subtitle 
 D.S... subviewer            SubViewer subtitle 
 D.S... subviewer1           SubViewer v1 subtitle 
 D.S... text                 raw UTF-8 text 
 D.S... vplayer              VPlayer subtitle 
 D.S... webvtt               WebVTT subtitle 
 DES... xsub                 XSUB 


Para reproduzir o vídeo legendado na TV

Em TVs de LEDs com entrada usb, o vídeo pode está tanto no formato avi com codec de vídeo FMP4, libxvid ou msmpeg4, ou no formato mp4 com codec de vídeo h264 ou x264 e os vídeos pode ter uma resolução de tela de até 1920 x 1080 pixels (Full HD – 1080p).

Em aparelhos de DVDPlayer com suporte a DivX com entrada usb.
O vídeo deve está no formato avi com codec de vídeo libxvid ou msmpeg4, lembrando que o tamanho máximo de tela suportado pelo aparelho é de 720x576 pixels, maior que isto não rodará.