//Convertire un video in ASCII da linea di comando.

Convertire un video in ASCII da linea di comando.

1 vote
Share on FacebookShare on Google+Tweet about this on TwitterEmail this to someonePrint this page

This post has already been read 1395 times!

Qualche giorno fà, girellando per la web ho visto che usando VLC  è possibile visualizzare un video in formato ASCII, la cosa mi è sembrata divertente, a quel punto la prima cosa che ho pensato è come poter salvare alcuni pezzi del video però sfortunatamente l’operazione non sembrava così semplice. Mi sono detto, poco male, con mplayer da linea di comando la cosa sarà semplice, però anche in questo caso sono riuscito a fare poco più di un redirect dei caratteri in un file di testo.
Realmente quello che a me interessava era di poter ottenere il video che mi veniva mostrato dal riproduttore in un formato avi o mp4.
Continuando a cercare idee ho trovato persone che riproducevano il video e registravano un screencast, però questa soluzione non mi piaceva, soprattutto perche il risultato non era soddisfacente, però non era neanche quello che cercavo.
Bene mi sono messo mano all’opera e dopo qualche ora e diverse prove sono riuscito a creare uno script per convertire un video in ascii e salvarlo in mp4.

Il procedimento realmente è piu semplice di quello che sembra, riassumendo basta :

  • estrarre l’audio del video
  • estrarre i fotogrammi del video
  • convertire i fotogrammi in ascii salvandoli in immagine
  • comprimere nuovamente le immagini
  • ricostruire il video
  • inserire di nuovo l’audio

bene qui in basso vi mostro lo script che ho usato per fare il lavoro :

matteo@Duff:~/Videos/test$ cat convert_to_image.sh
#!/bin/bash

ffmpeg -i $2 audio.mp3
ffmpeg -i $2 -f image2 image-%04d.jpg
for i in $(ls image-*) ; do img2txt -W $1 -x 3 -y 5 -f tga $i > $i.tga ; rm -f $i ; convert -quality 40 -resize 800x600 $i.tga  $i.tga.jpg ; rm -f $i.tga ; done
ffmpeg   -framerate 25 -pattern_type glob -i '*.jpg'  -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" -c:v libx264 out.mp4
ffmpeg -i out.mp4 -i audio.mp3 -acodec copy -vcodec copy $3
rm *.jpg.tga.jpg
matteo@Duff:~/Videos/test$ 

per avviare lo script ha bisogno di 3 parametri, il numero di caratteri che dovrà avere il video in output, il video originale e il nome del file in output :

./convert2ACII.sh 80 video.mp4 videoASCII.mp4 

la conversione richiede diverso tempo dato che img2txt genere immagini tga abbastanza grandi però sono riuscito ad ottenere risultati buoni anche ad “alta definizione ASCII” 🙂

Questo è uno dei video che ho convertito in ASCII :

sul canale beGeekMyFriend potete trovare altri video convertiti in ASCII con lo stesso procedimento.

Per adesso avverto che lo script puo generare una grande quantitá di immagini nella directory su cui state lavorando quindi consigli vivamente di provarlo con video corti e non esagerare con  il numero di caratteri usati per l’output. Un valore ragionevole puo essere sui 100 caratteri, ricordate usate lo script a vostro rischio e pericolo, non mi faccio responsabile per danni che potete arrecare alla vostra distribizione, come sempre sconsigli fare copy paste di script dal web se non si capisce cosa si stia facento.

I video che ci sono sul canale usano 240 caratteri e come potete vedere la definizione è già così alta che spesso non si distinguono bene i caratteri a causa della compressione di youtube.

Adesso sto lavorando su una versione più efficiente, e uno script decente, prossimamente aggiornerò con nuovi risultati.

Se avete consigli o volete chiedere qualcosa potete commentare in basso .