danixland's iMac

about this site

Benvenuto su danixland.net...

Se ti dovesse tornare utile quello che stai leggendo, o anche solo se ti è piaciuto e vorresti leggere qualcos'altro, puoi iscriverti al feed RSS cliccando qui. In questo modo rimarrai sempre aggiornato sulle ultime novità pubblicate su questo sito.

Se stai usando Internet Explorer ti consiglio di passare a firefox altrimenti non riuscirai a visualizzare correttamente queste e moltissime altre pagine web.

pspvm.sh – psp video maker

gio 15
apr '10

Questa sera vi presento uno scriptino basato su ffmpeg che ho buttato giù per convertire i video da vari formati al formato più digeribile dalla psp, e cioè il .mp4.
Lo script in questione può essere lanciato con 3 diverse opzioni e genererà output in base all’opzione scelta, andiamo a vederle nel dettaglio:

la prima opzione che definirei la più importante è l’opzione –video abbreviata -v, permette all’utente di convertire un video da un formato qualsiasi all’.mp4 compatibile con la psp. Quest’opzione richiede che le siano passati 2 parametri, il primo è ovviamente il nome del file da convertire, il secondo è il nome del file che risulterà dalla conversione (senza l’estensione, quella sarà aggiunta automaticamente). Non ho previsto che lo script usi lo stesso nome del file originale per evitare problemi nel caso in cui si converta un mp4 non compatibile con la psp in un mp4 ottimizzato, in quel caso infatti, usando lo stesso nome lo script sarebbe uscito in quanto il file finale esisterebbe già.

La seconda opzione disponibile è l’opzione –thumb o -t se preferite ;) . Quest’opzione si occuperà di creare un’anteprima del video che potrà essere visualizzata nel menu della psp, in questo modo se avrete dato un nome poco indicativo al vostro video, almeno l’anteprima vi darà una mano a ricordare di cosa si  tratta… Perchè quest’opzione funzioni dovremo passare anche stavolta 2 parametri, il primo è ovviamente il nome del video (conviene prendere quello già convertito), e il secondo parametro è un numero, e cioè il secondo da cui vorremo estrarre il fotogramma che farà da anteprima…

L’ultima opzione disponibile è –help abbreviata in -h, quest’opzione mostrerà un aiuto dettagliato sulle funzioni dello script e vi aiuterà a capire come usare le varie opzioni disponibili…

Mi sembra sia tutto, quindi passiamo allo script vero e proprio:

# pspvm.sh - psp video maker, a shell script that converts videos for the psp using ffmpeg
# author: danix < danix@danixland.net >

##### EXIT STATUS #####

E_INTERROR=71
E_NOINPUTVIDEOT=72
E_ALREADYTHM=73
E_NOSEC=74
E_NOINPUTVIDEOV=75
E_NOOUTPUTVID=76
E_NOOPT=77
E_HELP=78
E_COMMNOTFOUND=79

##### FUNZIONI #####

# showerror
showerror ()
{
	if [ -z $1 ];then
		echo "INTERNAL ERROR - ABORTING"
		exit $E_INTERROR
	fi
	case $1 in
		01)
			echo "non hai indicato un video da cui prendere l'anteprima o il video \"$INPUT_VIDEO\" non esiste"
			exit $E_NOINPUTVIDEOT
		;;
		02)
			echo "il file di output \"$THUMBNAME.thm\" esiste già"
			exit $E_ALREADYTHM
		;;
		03)
			echo "non hai indicato il secondo da cui prendere il fotogramma per l'anteprima"
			exit $E_NOSEC
		;;
		04)
			echo "non hai indicato un video da convertire o il video \"$INPUT_VIDEO\" non esiste"
			exit $E_NOIMPUTVIDEOV
		;;
		05)
			echo "non hai indicato un nome per creare il video di output o \"$OUTPUT_VIDEO.mp4\" esiste già"
			exit $E_NOOUTPUTVID
		;;
		06)
			echo "non hai specificato nessuna opzione"
			showhelp
			exit $E_NOOPT
		;;
	esac
}

# showhelp
showhelp ()
{
	echo -e "USO: $(basename $0) [option]  [input video name.ext] [time] [output video name]"
	echo -e "\tdove [option] è una tra:";echo
	echo -e "\t-v | --video\tconverte il video [input video name.ext] nel video [output video name].mp4"
	echo -e "\t\t\tl'opzione richiede 2 nomi, il primo deve essere il video da convertire, il secondo"
	echo -e "\t\t\tè il nome del video risultante (senza l'estensione)"
	echo -e "\t-t | --thumb\testrae un'anteprima dal video e la salva con lo stesso nome del file di"
	echo -e "\t\t\torigine ma con estensione .thm per poter essere letta dalla psp. Richiede il nome"
	echo -e "\t\t\tdel file di origine e il tempo, espresso in secondi, da cui estrarre l'immagine."
	echo -e "\t-h | --help\tmostra questo aiuto ed esce"
	echo
	echo -e "ESEMPI:"
	echo -e "$(basename $0) --video /home/danix/completa_attenzione.avi completa_attenzione"
	echo
	echo -e "$(basename $0) --thumb /home/danix/completa_attenzione.mp4 22"
	echo
	echo -e "$(basename $0) --help"
	echo
}

##### MAIN #####

if [ $# -eq 0 ];then
	showerror 06
	#echo "showerror(06)"
else
	while [ $# -gt 0 ];do
			case $1 in
			-t|--thumb)
				INPUT_VIDEO=$2
				SECOND=$3
				#NAME=$(echo $INPUT_VIDEO|sed -re "s/(.*\/)(.*.[amf][vlp][igv4])$/\2/")
				#THUMBNAME=${NAME%[amf][vlp][igv4]}thm
				THUMBNAME=$(echo $INPUT_VIDEO | rev | cut -f 2 -d .| rev)
				shift
				if [[ -z $INPUT_VIDEO || ! -f $INPUT_VIDEO ]];then
					showerror 01
					#echo "showerror(01)"
					#exit 1
				elif [[ -f $THUMBNAME.thm ]];then
					showerror 02
					#echo "showerror(02)"
					#exit 1
				elif [ -z $SECOND ];then
					showerror 03
					#echo "showerror(03)"
					#exit 1
				fi
                                # questo sarà un commento piuttosto lungo perchè devo capire che succede nel caso in cui ci si trovi davanti ad una riga di testo più lunga del previsto... speriamo funzioni tutto correttamente ;D
				ffmpeg -y -i $INPUT_VIDEO -f image2 -ss $SECOND -vframes 1 -s 160×120 -an $THUMBNAME.thm
				exit 0
			;;
			-v|--video)
				INPUT_VIDEO=$2
				OUTPUT_VIDEO=$3
				shift
				if [[ -z $INPUT_VIDEO || ! -f $INPUT_VIDEO ]];then
					showerror 04
					#echo "showerror(04)"
					#exit 1
				elif [[ -z $OUTPUT_VIDEO || -f ${OUTPUT_VIDEO}.mp4 ]];then
					showerror 05
					#echo "showerror(05)"
					#exit 1
				fi
				ffmpeg -i $INPUT_VIDEO -f psp -r 29.97 -b 768k -ar 24000 -ab 64k -s 320x240 $OUTPUT_VIDEO.mp4
				exit 0
			;;
			-h|--help)
				showhelp
				exit $E_HELP
			;;
			*)
				showhelp
				exit $E_COMMNOTFOUND
			;;
		esac
		shift
	done
fi

Fatemi sapere che ne pensate e se per caso vi torna utile… ovviamente è rilasciato sotto GPL v3 e quindi siete liberi di farci ciò che vi pare…

bye ;)

 

e ora?? Semplice, condividi quest'articolo con i tuoi amici...
l'autore di questo post:
Sono Danilo, ho 25 anni e mi interesso di web design da qualche anno. I temi usati su questo sito sono una mia creazione (nel bene e nel male). La mia occupazione principale è la fotografia e potete vedere alcune mie foto nella sezione gallery. Mi raccomando, commentate numerosi i miei articoli...
 

Puoi essere il primo a commentare!!

Lascia una Risposta

Collegati oppure:




XHTML: Puoi usare queste tag:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>