Maya playblast with FFMPEG

Postato in tech python il giorno 25/08/2011 alle ore 18:46

Finalmente rimetto mano al blog, scrivendo un post totalmente tecnico!!

Dalla versione 2011 di Autodesk Maya i codec integrati per effettuare un playblast video sono alquanto inutili: uno funziona male, un altro genera un video troppo grande da poter utilizzare ed un altro non va affatto.

Nella versione a 64bit poi le cose vanno ancora peggio!

Per risolvere questa situazione ho realizzato uno script che effettua un playblast di immagini JPEG e le converte in un filmato video tramite l'encoder FFmpeg.

Ecco le righe per effettuare il playblast come sequenza di JPEG:

cmd.setAttr("defaultRenderGlobals.imageFormat", 8) #imposto a JPEG
format = "image"
compression= "jpg"
image = "nomeFile" #senza estensione, Maya poi aggiunge il frame padding
startFrame=cmd.playbackOptions(q=1,ast=1)
endFrame=cmd.playbackOptions(q=1,aet=1)    
cmd.playblast(filename=image,offScreen=1, startTime=startFrame,endTime=endFrame,v=0, compression=compression, format=format,p=100, showOrnaments=1,fp=4,widthHeight=[960,650],fo=1)


Queste invece le righe per convertire le immagini in un file video di qualsiasi formato si voglia (sì, anche Quicktime!):

import subprocess
ffmpeg = "path_to_ffmpeg/ffmpeg.exe"
bitrate = "100000k"
#ffmpeg command:
ffCommand = ffmpeg + ' -b %s -i %s.%%04d.jpeg -s 960x650 -aspect 1.477 -pix_fmt rgb24 %s\'%(bitrate, image, file)
process = subprocess.Popen(ffCommand, shell=True)

Ho dovuto aggiungere le specifiche di bitrate, aspect-ratio e pixel_format poichè di default FFmpeg converte a 4:3 (vedere la documentazione di FFmpeg per ulteriori specifiche).

Per verificare il completamento del processo, basta eseguire questo controllo:

if not process.wait(): #returns True when FFmpeg stops
    ....

Attenzione: se il file video esiste già, FFmpeg attenderà un'azione da parte dell'utente e perciò il processo rimarrà impantanato. Occorre eseguire un controllo sull'esistenza e in caso positivo cancellare il file.

 

Nessun commento - Commenta

CakePHP e gli enum

Postato in tech web php il giorno 25/08/2011 alle ore 19:23

In questi giorni sto studiando il framework CakePHP, che ha un'ottima documentazione, sebbene manchi di chiarezza in qualche passaggio.

Un problema che ho dovuto affrontare è stato mostrare in un form valori predefiniti per un determinato campo sottoforma di un drop-down box (select) e che sostituiscano il tipo di dati enum che non è ancora supportato in CakePHP.

Ad esempio, un Task può avere come status i seguenti valori: "assigned","started", "closed".
Nel suo model perciò ho creato un metodo che riempie un array in questo modo:

class Task extends AppModel{
	var $name = 'Task';
	//other stuff

	function setStatus(){
		return array("assigned","started", "closed");
	}
}

 

Nel controller della classe invece, dentro ad ogni metodo che ne avrà bisogno, richiamerò l'array in questo modo:

class TasksController extends AppController{
	var $name = 'Tasks';

	function index(){
		$statuses = $this->Task->setStatus();
		$this->set('statuses', $statuses);
		$this->set('tasks', $this->Task->find(ll));
	}
}

 

Ora nella view per ottenere lo status del task basterà utilizzare:

$status = $statuses[$task['Task']['status']];

 

 

Nessun commento - Commenta

Life loop

Postato in me real_life il giorno 31/08/2011 alle ore 12:09

E di nuovo settembre..

Da qualche anno la mia vita assomiglia sempre più ad un loop senza via di uscita, un for senza break, un ciclo sempre uguale.

Siamo di nuovo a settembre.

def living():
	for day in life:
		living()
2 commenti - Commenta

Categorie