The content of the page was recovered from LPROD Wiki
Ce plugin est la réponse informatique d'un programmeur comme Eric Seigne à un quidam utilisateur Laurent Bellegarde pour “faire des rendus plus simples avec un simple clic de souris” depuis Cinelerra sans taper de lignes de commandes.
Ce travail particulièrement génial a pour but de permettre à des personnes de plus en plus débutantes d'utiliser et de s'approprier un logiciel comme Cinelerra.
Améliorer les exports vidéos (Rendus)
Vous savez sans aucun doute exporter votre travail dans un fichier mpeg (par exemple) via l'export yuv4mpeg. Là vous avez deux boites déroulantes “mpeg2enc” et “ffmpeg” … si vous voulez modifier les commandes vous pouvez le faire à la main.
Le problème se pose lorsque vous avez envie de rajouter 4 ou 5 commandes que vous utilisez souvent … si vous voulez les mettre dans les boites déroulantes il faut absolument modifier le code source de cinelerra (fichier fileyuv.C) et recompiler tout !
Ce soir j'ai bossé sur un patch un peu plus propre qui permet justement à l'utilisateur d'ajouter ses propres commandes “custom” dans un fichier de configuration.
Pour celà (lorsque vous utilisez la version patchée de cinelerra) vous avez juste à saisir dans votre fichier ~/.cinelerra-cv/exports_fileyuv_options.rc autant de lignes que vous voulez, comme par exemple:
(DVD) | cinelerra_ffmpeg.sh 0 %
(VCD) | cinelerra_ffmpeg.sh 1 %
(WMV1 320x240) | cinelerra_ffmpeg.sh 2 %
(WMV1 640x480) | cinelerra_ffmpeg.sh 3 %
(WMV2 320x240) | cinelerra_ffmpeg.sh 4 %
(WMV2 640x480) | cinelerra_ffmpeg.sh 5 %
(MSMpegV2 320x240) | cinelerra_ffmpeg.sh 6 %
(MSMpegV2 640x480) | cinelerra_ffmpeg.sh 7 %
(RealVideo 320x240) | cinelerra_ffmpeg.sh 8 %
(384x288 DivX 4/5 700bps) | cinelerra_mencoder.sh 0 %
(640x480 DivX 4/5 2000bps) | cinelerra_mencoder.sh 1 %
(640x480 DivX 4/5 7000bps) | cinelerra_mencoder.sh 2 %
Avec des scripts cinelerra_ffmpeg.sh comme ceci:
#!/bin/sh
# By Ruda Matousek, October 5th 2004
# matousek(AT)utia.cas.cz
# used in kino project, updated for cinelerra exports
# by Eric Seigne, 2006 04 10 (http://fr.lprod.org)
usage()
{
# Title
echo "Title: DivX using FFMpeg"
# Usable?
command -v ffmpeg 1> /dev/null 2>&1
[ $? -eq 0 ] && echo Status: Active || echo Status: Inactive
# Type
echo Flags: single-pass file-producer
# Profiles
echo "Profile: DVD"
echo "Profile: VCD"
echo "Profile: WMV1 320x240"
echo "Profile: WMV1 640x480"
echo "Profile: WMV2 320x240"
echo "Profile: WMV2 640x480"
echo "Profile: MSMpegV2 320x240"
echo "Profile: MSMpegV2 640x480"
echo "Profile: RealVideo 320x240"
}
execute()
{
# add -hq if ffmpeg support it
FFMPEG=ffmpeg
# Arguments
profile="$1"
file="$2"
[ "x$file" = "x" ] && file="cinelerra_export_"`date +%Y-%m-%d_%H.%M.%S`
# Run the command
# Note that the -cache 8192 parameter is required to force mencoder
# to recognize the DV stream on STDIN.
case "$profile" in
"0" ) ${FFMPEG} -f yuv4mpegpipe -i - -y -target dvd -ilme -ildct -f mpeg2video "$file" ;;
"1" ) ${FFMPEG} -f yuv4mpegpipe -i - -y -target vcd -f mpeg2video "$file" ;;
"2" ) ${FFMPEG} -f yuv4mpegpipe -i - -y -vcodec wmv1 -s 320x240 "$file" ;;
"3" ) ${FFMPEG} -f yuv4mpegpipe -i - -y -vcodec wmv1 -s 640x480 "$file" ;;
"4" ) ${FFMPEG} -f yuv4mpegpipe -i - -y -vcodec wmv2 -s 320x240 "$file" ;;
"5" ) ${FFMPEG} -f yuv4mpegpipe -i - -y -vcodec wmv2 -s 640x480 "$file" ;;
"6" ) ${FFMPEG} -f yuv4mpegpipe -i - -y -vcodec msmpegv2 -s 320x240 "$file" ;;
"7" ) ${FFMPEG} -f yuv4mpegpipe -i - -y -vcodec msmpegv2 -s 640x480 "$file" ;;
"8" ) ${FFMPEG} -f yuv4mpegpipe -i - -y -vcodec rv10 -s 320x240 "$file" ;;
esac
}
[ "$1" = "--usage" ] || [ -z "$1" ] && usage "$@" || execute "$@"
Et le tour est joué, vous pouvez créer autant de scripts d'exports que vous voulez - y compris avec des logiciels qui n'existent pas encore - et cinelerra saura les utiliser ! Magique ? pas tant que ça, l'idée est de kino, regardez les fichiers /usr/lib/kino/scripts/exports/*.sh …
Bon, maintenant on croise les doigts pour que les développeurs de cinelerra acceptent de commiter ce patch dans l'upstream !
Contenu du patch
Je publie ici l'état du patch au 29 mai 2006 pour éviter tout pb si jamais …
diff -u hvirtual-2.0.0/cinelerra/fileyuv.C hvirtual-2.0.0.patch/cinelerra/fileyuv.C
--- hvirtual-2.0.0/cinelerra/fileyuv.C 2006-05-20 12:05:09.000000000 +0200
+++ hvirtual-2.0.0.patch/cinelerra/fileyuv.C 2006-05-29 22:11:59.000000000 +0200
@@ -360,6 +360,8 @@
delete pipe_config;
delete mpeg2enc;
delete ffmpeg;
+ //erics
+ delete custom;
}
int YUVConfigVideo::create_objects()
@@ -407,6 +409,33 @@
ffmpeg->add_item(new BC_MenuItem("(DVD) | ffmpeg -f yuv4mpegpipe -i - -y -target dvd -ilme -ildct -hq -f mpeg2video %"));
ffmpeg->add_item(new BC_MenuItem("(VCD) | ffmpeg -f yuv4mpegpipe -i - -y -target vcd -hq -f mpeg2video %"));
+ /* eric.seigne@ryxeo.com http://lprod.org patch */
+ y += 25;
+ x -= 160;
+ custom = new PipePreset(x, y, "custom", pipe_config);
+ add_subwindow(custom);
+
+ FILE *flux;
+ char buff[1024];
+ char conffile[1024];
+ sprintf(conffile, "%s/.bcast/exports_fileyuv_options.rc", getenv("HOME"));
+ flux = fopen(conffile,"r");
+ if(flux) {
+ fprintf(stderr,"file %s openned",conffile);
+ fgets(buff, 1024, flux);
+ while(!feof(flux)) {
+ fprintf(stderr," ->%s added",buff);
+ custom->add_item(new BC_MenuItem(buff));
+ fgets(buff, 1024, flux);
+ }
+ pclose(flux);
+ }
+ else {
+ perror("fopen");
+ fprintf(stderr,"ERROR: file %s can't be openned",conffile);
+ }
+ /* end eric.seigne@ryxeo.com http://lprod.org patch */
+
add_subwindow(new BC_OKButton(this));
add_subwindow(new BC_CancelButton(this));
show_window();
diff -u hvirtual-2.0.0/cinelerra/fileyuv.h hvirtual-2.0.0.patch/cinelerra/fileyuv.h
--- hvirtual-2.0.0/cinelerra/fileyuv.h 2006-05-20 12:05:09.000000000 +0200
+++ hvirtual-2.0.0.patch/cinelerra/fileyuv.h 2006-05-29 21:37:45.000000000 +0200
@@ -61,6 +61,8 @@
PipeConfig *pipe_config;
PipePreset *mpeg2enc;
PipePreset *ffmpeg;
+ //erics
+ PipePreset *custom;
};
Et le script cinelerra_mencoder.sh
#!/bin/sh
# By Ruda Matousek, October 5th 2004
# matousek(AT)utia.cas.cz
# used in kino project, updated for cinelerra exports
# by Eric Seigne, 2006 04 10 (http://fr.lprod.org)
usage()
{
# Title
echo "Title: DivX using MEncoder"
# Usable?
command -v mencoder 1> /dev/null 2>&1
[ $? -eq 0 ] && echo Status: Active || echo Status: Inactive
# Type
echo Flags: single-pass file-producer
# Profiles
echo "Profile: 384x288 DivX 4/5 700bps, mp3 128bps"
echo "Profile: 640x480 DivX 4/5 2000bps, mp3 128bps"
echo "Profile: 640x480 DivX 4/5 7000bps, mp3 224bps"
}
execute()
{
# Arguments
profile="$1"
file="$2"
[ "x$file" = "x" ] && file="cinelerra_export_"`date +%Y-%m-%d_%H.%M.%S`
# Run the command
# Note that the -cache 8192 parameter is required to force mencoder
# to recognize the DV stream on STDIN.
case "$profile" in
"0" ) mencoder - -quiet -cache 8192 -aspect 4:3 -vf harddup,scale=384:288 -ovc lavc -oac lavc -lavcopts vcodec=mpeg4:acodec=mp3:vhq:vbitrate=700:abitrate=128 -o "$file" ;;
"1" ) mencoder - -quiet -cache 8192 -aspect 4:3 -vf harddup,pp=ci,scale=640:480 -ovc lavc -oac lavc -lavcopts vcodec=mpeg4:acodec=mp3:vhq:vbitrate=2000:abitrate=128 -o "$file" ;;
"2" ) mencoder - -quiet -cache 8192 -aspect 4:3 -vf harddup,pp=ci,scale=640:480 -ovc lavc -oac lavc -lavcopts vcodec=mpeg4:acodec=mp3:vhq:vbitrate=7000:abitrate=224 -o "$file" ;;
esac
}
[ "$1" = "--usage" ] || [ -z "$1" ] && usage "$@" || execute "$@"