ãåç¥ã®ããã«ããããªãš3Dç»åã®ã¬ã³ããªã³ã°ã«ã¯æéãããããå€ãã®ã³ã³ãã¥ãŒã¿ãŒãªãœãŒã¹ãå¿ èŠã§ãã æãåºã¯ãŸã æ°é®®ã§ããåŠçã®é ãå€ã«æ ç»äœæããã°ã©ã ãå®è¡ããªããè³ãããªã³ã³ãã¥ãŒã¿ãŒãã»ããã¢ããããŸããããååäžã«ããŒããã©ã€ãã«ååãªã¹ããŒã¹ããªããããããªã«äœããè¿œå ããã®ãå¿ããŠããã¹ãŠãæåããããçŽãå¿ èŠããããŸããã çŸåšãçã®ãããã§ãã·ã§ãã«ããã®æäœããªã¢ãŒãã§å®è¡ããŠããŸãã ããšãã°ãç£ç£ã®ãžã§ãŒã ãºãã£ã¡ãã³ã¯ãæ ç»ãã¢ãã¿ãŒãã®æ®åœ±äžã«ãã·ãŒã³ã®ã¬ã³ããªã³ã°ãéå§ãããããŒã¿ã»ã³ã¿ãŒå šäœãäœæããããç¹ã«åœããŸããã ç§ã¯ãŸã èªåã®ããŒã¿ã»ã³ã¿ãŒãæ§ç¯ããã»ã©ã¯ãŒã«ã§ã¯ãããŸãããããã®æäœãå¥ã®ãµãŒããŒã§åå¥ã«èµ·åã§ãããšããèããããé·ãéå¹³ç©ãåŸãããšãã§ããŸããã§ããã
2çªç®ã®åé¡ã¯ããããªèªäœã®ç·šéã§ãã çŸä»£ã®ã³ã³ãã¥ãŒã¿ãŒããã匷åã«ãªã£ãŠãããšããäºå®ã«ããããããããããªã«ã¡ã©ã®éçºãæ¢ãŸã£ãŠããããçµæã®ãããªãã¡ã€ã«ã¯ãŸããŸãéããªã£ãŠããŸãã ãããŠãçµæãšããŠãããããåŠçããããšã¯åé¡ã«ãªããŸãã é·ããã£ã«ã ãç·šéãããšããã£ã«ã¿ãŒãšãã©ã³ãžã·ã§ã³ãé©çšããããã©ãã¯ã®ãã¬ãã¥ãŒãããã»ããµãŒã®èªã¿èŸŒã¿ãéå§ããç»åãé ãå§ããã¯ãªãšã€ãã£ããªç·šéããã»ã¹ãé¢åã«ãªããŸãã ç§ãè©Šããããšãããæãçç£çãªã®ã¯iMovieã§ãããã¯ãã¹ãŠã®Macã«ããªã€ã³ã¹ããŒã«ãããŠããŸãã 45åéç¶ãæ ç»ã§ãããæ¯èŒçäœé»åã®Macbookã§ã¯åé¡ãªãç·šéã§ããŸããã ä»»æã®ãã£ã«ã¿ãŒãé©çšããŠãé ããªããã¬ãã¥ãŒãŠã£ã³ããŠã§çµæã確èªã§ããŸãã ããã§ãã±ã·ã®ææè ã¯ããã§å¹žéã§ããã iMovieã®æ¬ ç¹ã®1ã€ã¯ãæäœäžã«ãéæ¹ããªãéã®ãã£ã¹ã¯ã¹ããŒã¹ãæ¶è²»ãå§ããããšã§ãã ã©ããããããã¯ç·šéãšãã¬ãã¥ãŒã®ããã®ç©æ¥µçãªãã£ãã·ã¥ã«ãããã®ã§ãã
ãã®èšäºã§ã¯ãããŒã ãããªã¯ãªããã®äŸã䜿çšããŠãç·šéãšã¬ã³ããªã³ã°ã®ããã2ã€ã®åé¡ã解決ããããšãããšãã®çµéšã説æããŸãã
楜åš
Linuxçšã®WindowsãMac OSãšæ¯èŒãããšãååãšããŠããã¹ã¯ãããã¢ããªã±ãŒã·ã§ã³ã¯ããã»ã©å€ããããŸãããããããªãšãã£ã¿ãŒã®éžæè¢ã¯é©ãã»ã©åºãããšãããããŸããã ããã€ãã®ãªãã·ã§ã³ã§éãã åŸãä»ã®ãšããç§ã¯Kdenliveã§å°ããªãããªãæ±ãããšã«æ±ºããŸããã ä»ã®ããã°ã©ã ãšæ¯èŒãããšãããã«ã¯åªããæ©èœã»ããããããŸããããã®èšäºã®ãã¬ãŒã ã¯ãŒã¯ã§ã¯1ã€ã ãã«èå³ããããŸãããçŽ æŽãããæ©èœã§ãïŒæ¢ã«å®æãããã£ã«ã ãå€æãããšããããã°ã©ã ã«ã¯2ã€ã®ãªãã·ã§ã³ããããŸã-éåžžã©ããããã¡ã€ã«ã«ã¬ã³ããªã³ã°ããããã¹ã¯ãªãããçæããŸãã
ãã®å Žåã圌女ã¯éåžžã®ã·ã§ã«ã¹ã¯ãªãããäœæããã ãã§ãåŸã§ã³ãã³ãã©ã€ã³ããå®è¡ã§ããŸãã å¥ã®ã³ã³ãã¥ãŒã¿ãŒãå«ãã ç§ã¯äœãåŸãŠããŸããïŒ ã¯ãããã®æ¹æ³ã§ãããžã§ã¯ãããªã¢ãŒããµãŒããŒã«çž®å°ã§ããŸãã ãããè¡ãã«ã¯ãã¯ã©ãŠããç¬èªã®ãµãŒããŒããŸãã¯ãªãã£ã¹ã§åžžã«çšŒåããŠãã匷åãªäœæ¥ã³ã³ãã¥ãŒã¿ãŒã䜿çšã§ããŸãïŒãã¡ãããç§ã¯ããã¯èšããŸããã§ããïŒã èšç»ã¯åçŽã§ãããããžã§ã¯ããåæžããã¹ã¯ãªãããçæãããããžã§ã¯ãå šäœããµãŒããŒã«è»¢éããããã»ã¹ããªã¢ãŒãã§éå§ããŸãã
ããããããã¯æ¬åœã®ãã€ãœã³ã«ã¯ç°¡åãããããã«æããŸãã ã¿ã¹ã¯ã«ããã€ãã®æ¡ä»¶ãè¿œå ããŸãã å ã®ãããªãã¡ã€ã«ã®ç·šéã¯å€ãã®ãªãœãŒã¹ãå¿ èŠãšããã¿ã¹ã¯ã§ãããšãã§ã«äžæºãèšã£ãŠããŸãã äœæ¥äžãå°ããªãã¬ãã¥ãŒãŠã£ã³ããŠã§çµæã確èªããåã ã®ã¹ããŒãªãŒãäœååãã¹ã¯ããŒã«ããåå¹ã調æŽãããã£ã«ã¿ãŒãå€æŽãã䌎å¥ãè¿œå ããŸãã ããããå°ããªãããªãã¡ã€ã«ã䜿çšããŠãããžã§ã¯ããããŠã³ãããå ã®ãã¡ã€ã«ã§æ¢ã«æçµã¢ã»ã³ããªãå®è¡ããŠããå Žåã¯ã©ãã§ããããã ãšã«ãããæäœäžã«å šç»é¢ãã¬ãã¥ãŒãéãããšã¯ã»ãšãã©ãããŸããã èŠçŽãããšãããã»ã¹ã¯æ¬¡ã®ããã«ãªããŸãã
- ãããªãœãŒã¹ããšã«ã軜éã®ã¯ããŒã³ãäœæããŸãã
- ãªãªãžãã«ããµãŒããŒã«è»¢éããŸãã
- ã€ã³ã¹ããŒã«ã¯ã軜éã³ããŒã䜿çšããŠããŒãœãã«ã³ã³ãã¥ãŒã¿ãŒã«å®è¡ãããŸãïŒã©ãããããã䜿çšããŸããïŒã
- çµã¿ç«ãŠãåã«ããããžã§ã¯ãããµãŒããŒã«è»¢éããŸãããµãŒããŒã«ã¯ãå ã®å質ã®ãœãŒã¹ã³ãŒããæ¢ã«ãããŸãã
- 軜éã¯ããŒã³ãå ã®ã¯ããŒã³ã«çœ®ãæããŸãã
- ãã£ã«ã ã®é«è§£å床ã§ã®ã¬ã³ããªã³ã°ãéå§ããŸãã
- ãªãã·ã§ã³ïŒé»åã¡ãŒã«ãŸãã¯SMSã§ããã»ã¹ã®å®äºãéç¥ããŸãã
- å®æããçµæãããœã³ã³ã«ããŠã³ããŒãããŸãã
- å®æãããããªïŒããã³èªåã®ã¹ãã«ïŒããã©ãã°ããŸãã
ãŸãæåã«ã
軜éã³ããŒ
Linuxã®å Žåããããªãå€æããã³å§çž®ããããã®ããªã人æ°ã®ããããã°ã©ã -HandBrakeããããŸãã ã¿ã¹ã¯ã¯åã«ãœãŒã¹ã³ãŒããå§çž®ããããšãªã®ã§ãèšå®ã«ã€ããŠã¯ããŸãèãããæ¢æã®ããªã»ããã䜿çšããŸãã è¯ãçµæïŒãªã³ãŒã«ã家åºçšãããªïŒãæäŸããiPodãéžæãããœãŒã¹ã®å§çž®ãè©Šã¿ãŸãã
çŽ æŽãããäŒæã®åŸããããã®ãœãŒã¹ãäœçŸãšã¯èšããªããŸã§ãæ°ååæã€ããšãããããã®äœæ¥ãäœããã®åœ¢ã§èªååããå¿ èŠãããå ŽåããããŸãã å ·äœçã«ã¯ãHandBrakeã«ã¯ç¬èªã®ã³ãã³ãã€ã³ã¿ãŒãã§ã€ã¹ããããŸã ã ãããã£ãŠã次ã®ãããªã¹ã¯ãªããããã°ããå®è¡ã§ããŸãã
#!/bin/bash # convert.sh quality=30 for file in ls $1/* do tempfile="${file##*/}" filename="${tempfile%.*}" outputFile="$2/$filename.mp4" echo -e "\n\n Compress file $file" HandBrakeCLI -i $file -o $outputFile --preset="iPod" -q $quality -w 160 done
convert.sh ./original-videos ./small-videosã³ãã³ãã䜿çšããŠå®è¡ããããšã«ãããåãã¡ã€ã«ã«å¯ŸããŠããå°ããæé©åãããã³ããŒãäœæããŸãã å¯äžã®æ¡ä»¶ã¯ãå°æ¥ç§ãã¡ã®ç掻ã楜ã«ããããšã§ãããã¹ãŠã®ãã¡ã€ã«ãšãã®ã¯ããŒã³ãåãååãæã€ããšã«åæããŸãïŒãã ããã»ãšãã©ã®å Žåãæ¡åŒµåã¯ç°ãªããŸãïŒã ãããç§ãããããšã®äŸã§ãã 2ã€ã®ãã©ã«ããŒïŒ
/å°åç»/ãªãªãžãã«åç» FILE0001.mp4 FILE0001.MOV FILE0002.mp4 FILE0002.MOV FILE0003.mp4 FILE0003.MOV ... ...
ãããã£ãŠãååã䜿çšããŠãããã°ã©ã ã§ã³ããŒãå ã®ã³ããŒã«çœ®ãæããããšãã§ããŸãã ãã®åŸãå ã®ãããªã®ãããã©ã«ããŒããµãŒããŒã«éä¿¡ãããå°ããªã³ããŒãã©ãããããã«æ®ããããã«äœæ¥ãç¶ããŸãã
å ã®ãããªãšãã®è»œéã¯ããŒã³ã®äŸïŒ
ããŒã...ç§ã¯å§çž®ã§è¡ãéããŸãããïŒ ãã¹ãŠã¯å®éšã®çŽåºŠã®ããã§ãïŒ
ãããžã§ã¯ã
ãã®ããããããžã§ã¯ããéå§ããŸããã ãã¡ããããã¬ãã¥ãŒã®å質ã¯äžå¿«ã§ãããäœããã¹ããã§ãããã¹ãŠã®äœæ¥ã®é床ãèœãšãäžå£ãªé ããåãé€ããããšèããŸããã æ³£ãç¶ããŠæ³šå ¥ããªããããã£ã«ã ãããŠã³ãããŸãã ç¹ã«ããã»ããµã«è² æ ããããããšãªãããã¹ãŠãã¹ããŒãã«æ©èœããŸãã éèŠãªç¬éïŒæ å ±ã®æãæ¥ãŸããã 倧åãªãã¿ã³Generate Script ...ãæŒããŠãçµæãä¿åããŸãã 次ã«ãäœãèµ·ããã®ããããã°ã©ã ãäžè¬çã«äœãä¿åããã®ããèŠãŠã¿ãŸãããã
2ã€ã®ãã¡ã€ã«ãKDEnliveããŒã ãã©ã«ããŒã«è¡šç€ºãããŸããïŒããã©ã«ãã¯ã/ kdenlive / scripts / ïŒïŒ
- ã·ã§ã«ã¹ã¯ãªããmy-movie_001.sh
- my-movie_001.sh.mltããã¡ã€ã«ããŸã
ã·ã§ã«ãã¡ã€ã«my-movie_001.shã«ã¯ãçãã³ãã³ãã»ããããããŸãã
#! /bin/sh SOURCE="/home/w32blaster/kdenlive/scripts/my-movie_001.sh.mlt" TARGET="/home/w32blaster/kdenlive/my-movie.mp4" RENDERER="/usr/bin/kdenlive_render" MELT="/usr/bin/melt" PARAMETERS="-pid:8613 $MELT hdv_1080_50i avformat - $SOURCE $TARGET properties=x264-medium g=120 crf=20 ab=160k threads=1 real_time=-1" $RENDERER $PARAMETERS
ããã«ã¯ç¹å¥ãªã¹ããªãŒãããžãã¯ã¯ãããŸããããã¹ãšèšå®ãä¿åããã ãã§ãå¿ èŠãªãã©ã¡ãŒã¿ãŒã§ã¬ã³ããªã³ã°ãéå§ããŸãã å¿ èŠã«å¿ããŠç·šéã§ããŸããã1ã€ã®ãã©ã¡ãŒã¿ãŒãthreads = 1ãã«æ³šæããŠãã ãããããã¯ããæ³åã®ãšãããã¹ã¬ããã®æ°ãèšå®ããŸãã ããã»ããµã®ãã¯ãŒã«å¿ããŠããã®æ°ãå¢ããããšãã§ããã¬ã³ããªã³ã°ããã©ãŒãã³ã¹ãå€§å¹ ã«åäžããŸãã ããã«ãã©ããããããããŒãããã«ããã匷åãªã³ã³ãã¥ãŒã¿ãŒã§å®è¡ããŸãã
ãã ãããã®å®éšã§ç¹ã«èå³æ·±ãã®ã¯ãæå³ã®ãã宣èšã§ããŒã¯ãããå¥ã®ãã¡ã€ã«ã§ãã
SOURCE = "/ home / w32blaster / kdenlive / scripts / my-movie_001.sh.mlt"
ããã¯ã©ã®ãããªMLTãã¡ã€ã«ã§ããïŒ
MLTãšãããžã§ã¯ãã®èª¬æ
ïŒå°ãªããšãç§ã«ãšã£ãŠã¯ïŒãªãŒãã³ãœãŒã¹ãœãããŠã§ã¢ã®äžçã«ã¯ããããªãããŒããã£ã¹ããéä¿¡ããããã®ãã®ãããªåœ¢åŒãšã MLTãšåŒã°ããåãååã®ãã¬ãŒã ã¯ãŒã¯ãããããšãããããŸãã ã ãµã€ãã¯æ¬¡ã®ããã«èšã£ãŠããŸãïŒ
MLTã¯ããã¬ãæŸéçšã«èšèšããã³éçºããããªãŒãã³ãœãŒã¹ã®ãã«ãã¡ãã£ã¢ãã¬ãŒã ã¯ãŒã¯ã§ãã æŸéå±ããããªç·šéè ãã¡ãã£ã¢ãã¬ãŒã€ãŒããã©ã³ã¹ã³ãŒããŒãWebã¹ããªãŒããŒãããã³ãã®ä»ã®å€ãã®çš®é¡ã®ã¢ããªã±ãŒã·ã§ã³ã«ããŒã«ããããæäŸããŸãã ã·ã¹ãã ã®æ©èœã¯ãããã«äœ¿çšã§ããåçš®ã®ããŒã«ãXMLãªãŒãµãªã³ã°ã³ã³ããŒãã³ããããã³æ¡åŒµå¯èœãªãã©ã°ã€ã³ããŒã¹ã®APIãä»ããŠæäŸãããŸãã
ã³ã³ãœãŒã«ããã°ã©ã Meltã䜿çšãããšããããªãããžã§ã¯ããã³ã³ãœãŒã«ã«çŽæ¥ãŸãšããããšãã§ããŸãã ã€ãŸããçè«çã«ã¯ãã³ã³ãœãŒã«ãé¢ããããšãªãæ ç»å šäœãäœæããããšããã§ããŸãã ãã®ããã«ã¯ãããã¡ãŒãã«ã®ããŒã ãäœæããŠå®è¡ããå¿ èŠããããŸããããã¡ãã倧å€æ°ã®ããŒã ã¯ããã奜ã¿ãŸããã 代ããã«ããããžã§ã¯ãå šäœãããŠããã¿ã¹XMLã«åºã¥ãç¹å¥ãªMLT圢åŒã§èšè¿°ãããŠããŸãã ãããã£ãŠããããªã¬ã³ããªã³ã°ã¯ãå°æ¥ã®æ ç»ã®ãã©ã¡ãŒã¿ãŒãšãããžã§ã¯ãèªäœã®äž¡æ¹ãMLT圢åŒã§äŸçµŠããã¡ã«ãã³ã³ãœãŒã«ããã°ã©ã ã®èµ·åã§ãã MLTãã¡ã€ã«èªäœã¯ãGUIããã°ã©ã ã«ãã£ãŠçæãããŸãã ç§ã®å Žåãç§ãèšã£ãããã«ãããã¯KDenliveã§ããã ãã®ãŠãŒãã£ãªãã£ããªãããã¯ã§äœ¿çšããæ¹æ³ã®è©³çŽ°ããèªã¿ãã ããã
ããã§ãã ãŒããŒããçæãããMLTãã¡ã€ã«èªäœã®æ§é ãèŠãŠã¿ãŸãããã
<?xml version='1.0' encoding='utf-8'?> <mlt title="Anonymous Submission" version="0.9.3" root="/home/w32blaster" LC_NUMERIC="en_GB.UTF-8"> <producer in="0" out="5367" id="117_4"> <property name="resource">Videos/small/FILE0001.mp4</property> ... - </producer> <playlist id="playlist1"> <entry in="0" out="2033" producer="117_4"> <filter out="1838" id="volume"> ... ... </filter> </playlist> <tractor title="Anonymous Submission" global_feed="1" in="0" out="17018" id="maintractor"> <property name="meta.volume">1</property> <track producer="black_track"/> <track hide="video" producer="playlist1"/> <track hide="video" producer="playlist2"/> <track producer="playlist3"/> <track producer="playlist4"/> <track producer="playlist5"/> <transition id="transition0"> <property name="a_track">1</property> <property name="b_track">2</property> <property name="mlt_type">transition</property> <property name="mlt_service">mix</property> <property name="always_active">1</property> <property name="combine">1</property> <property name="internal_added">237</property> </transition> .... - , .... </tractor> </mlt>
ããªã¥ãŒã ãšæãããªæ··ä¹±ã«ããããããããã®ãã¡ã€ã«ã¯ããªãåçŽãªæ§é ãããŠããŸãã
- mltã¯ãmlt圢åŒã®ãããªã®èª¬æã«éããªãããšãéç¥ããã¡ã€ã³ã¿ã°ã§ãã ãããžã§ã¯ãã®ãã©ã¡ãŒã¿ãŒãæåã«å®£èšãããŸãããç°¡åã«ããããã«äŸããåé€ãããŠããŸãã
- ãããã¥ãŒãµãŒã¯ãç»åã®ãœãŒã¹ã§ãããªããžã§ã¯ãã§ãã ããã¯ããããªãé³æ¥œãç»åãè²ã®å¡ãã€ã¶ãããã£ãã·ã§ã³ãããã«å¥ã®mltãã¡ã€ã«ïŒè©³çŽ°ã¯ä»¥äžïŒã«ãªããŸãã å éšã«ã¯å€ãã®ãã©ã¡ãŒã¿ãŒãããããã¡ã€ã«ãæäœããå ŽåããªãœãŒã¹ãžã®ãã¹ãéèŠã§ãã ãããžã§ã¯ãã«è¿œå ããããªãœãŒã¹ããšã«ãåå¥ã®ããããã¥ãŒãµãŒããçæãããŸãã
- ãã¬ã€ãªã¹ã -ãã¹ãŠã®ããããã¥ãŒãµãŒãã§æ§æããããã¬ã€ãªã¹ãã ãã£ã«ã¿ããããŸãïŒäžèšã®äŸã§ã¯ãããã¯é³é¿æžè¡°ãã£ã«ã¿ã§ãïŒã ãªãœãŒã¹ããšã«ãæ¿å ¥ããã»ã°ã¡ã³ãã瀺ããŸãã ã€ãŸããã¿ã€ã ã©ã€ã³ã§ã ãŒããŒã®ç«¯ãåãåããMLT圢åŒã®ã¬ãã«ã§ã ãšã³ããªã¿ã°ã®å ¥åºåãã©ã¡ãŒã¿ãŒãèšå®ããã ãã§ãã ããŠã ãšã³ããªãŒã¿ã°èªäœã«ã¯ããããã¥ãŒãµãŒããžã®ãªã³ã¯ããããŸãã
- ãã©ã¯ã¿ãŒ -å®éãããã¯äžè¬çã«åŒã°ããŠããããã«ãæ ç»å šäœãŸãã¯ã¿ã€ã ã©ã€ã³ã§ãã é åºãå€æŽãããããªã¯ãªããããã©ãã«ãŒäžã§ãã©ãã°ã¢ã³ãããããããå Žåãæ£åŒã«ã¯ãã³ãªãã¢ç·šéãšåŒã°ããŸããããã«ã€ããŠã¯ãããã§èª¬æããŸãã ãã¹ãŠã®ãã©ã³ãžã·ã§ã³ããªãŒããŒã¬ã€ãã¿ã€ãã«ãããã³ãã¹ãŠãã¹ãŠã¯ãã¿ã°ããã©ã¯ã¿ãŒãã«ãã£ãŠèšè¿°ãããŸãã
mltãã¡ã€ã«ã®æ§é ã®è©³çŽ°ã«ã€ããŠã¯ã ãã¡ããã芧ãã ãã ã
ããã§ãæåã®mltãã¡ã€ã«ãçæããŸããããã®ãã¡ã€ã«ã«ã¯ãå§çž®ããããããªã¯ããŒã³ã§æ§æããããã£ã«ã èªäœã®æ§é ãå«ãŸããŸãã ã ãŒããŒãã¬ã³ããªã³ã°ããæºåãã§ãããã³ã«ããã®æ§é ãæã€ãã®ãã¡ã€ã«ãçæããŸãã ã¯ã©ã€ã¢ã³ãåŽïŒã€ãŸãã©ãããããïŒã§ãããžã§ã¯ããã©ããªãããããã£ãããã§ããä»åºŠã¯ããµãŒããŒäžã§ãããæäœããæ¹æ³ãææ¡ããŠãããããèªäœãã¬ã³ããªã³ã°ããå¿ èŠããããŸãã èšç»ã§ã¯ãmltãã¡ã€ã«å ã®ãã¹ãŠã®ããããã¥ãŒãµãŒããããŸã£ããåãã§ãããå ã®ãããªã®å°ããªãããªã«çœ®ãæããŠãããã¢ã»ã³ããªãéå§ããåã«ããã·ã³ã°ãéå§ããŸãã çæ³çã«ã¯ãã ãã眮æã«æ°ä»ããªãã§ãããã
ãã®æäœã§ã¯ãã©ã®å°ããªãã¡ã€ã«ã倧ããªãªãªãžãã«ã«å¯Ÿå¿ããããèŠã€ããå¿ èŠããããŸãã åé¡ã¯ãããããã¥ãŒãµãŒãããããªã¯ãªããã®æè¡ããŒã¿ã䜿çšãããšããäºå®ã«ãã£ãŠè€éã«ãªããŸãã ãããã®1ã€ã®äŸã次ã«ç€ºããŸãã
<producer in="0" out="1327" id="65_2"> <property name="mlt_type">producer</property> <property name="length">1328</property> <property name="eof">pause</property> <property name="resource">Videos/Austria2015-small/FILE1235.mp4</property> <property name="meta.media.nb_streams">2</property> <property name="meta.media.0.stream.type">video</property> <property name="meta.media.0.stream.frame_rate">30</property> <property name="meta.media.0.stream.sample_aspect_ratio">0</property> <property name="meta.media.0.codec.width">160</property> <property name="meta.media.0.codec.height">90</property> <property name="meta.media.0.codec.frame_rate">90000</property> <property name="meta.media.0.codec.pix_fmt">yuv420p</property> <property name="meta.media.0.codec.sample_aspect_ratio">0</property> <property name="meta.media.0.codec.colorspace">709</property> <property name="meta.media.0.codec.color_trc">1</property> <property name="meta.media.0.codec.name">h264</property> <property name="meta.media.0.codec.long_name">H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10</property> <property name="meta.media.0.codec.bit_rate">52987</property> <property name="meta.media.1.stream.type">audio</property> <property name="meta.media.1.codec.sample_fmt">fltp</property> <property name="meta.media.1.codec.sample_rate">48000</property> <property name="meta.media.1.codec.channels">2</property> <property name="meta.media.1.codec.name">aac</property> <property name="meta.media.1.codec.long_name">AAC (Advanced Audio Coding)</property> <property name="meta.media.1.codec.bit_rate">163117</property> <property name="meta.attr.1.stream.language.markup">eng</property> <property name="meta.attr.major_brand.markup">mp42</property> <property name="meta.attr.minor_version.markup">512</property> <property name="meta.attr.compatible_brands.markup">isomiso2avc1</property> <property name="meta.attr.encoder.markup">HandBrake 0.10.1 2015030800</property> <property name="seekable">1</property> <property name="meta.media.sample_aspect_num">1</property> <property name="meta.media.sample_aspect_den">1</property> <property name="aspect_ratio">1</property> <property name="audio_index">1</property> <property name="video_index">0</property> <property name="mlt_service">avformat</property> <property name="meta.media.frame_rate_num">30</property> <property name="meta.media.frame_rate_den">1</property> <property name="meta.media.colorspace">709</property> <property name="meta.media.width">160</property> <property name="meta.media.height">90</property> <property name="meta.media.top_field_first">0</property> <property name="meta.media.progressive">1</property> <property name="meta.media.color_trc">1</property> </producer>
æªããªãããïŒ äœããã®æ¹æ³ã§ãããã®ãªãœãŒã¹ãã©ã¡ãŒã¿ããã¹ãŠçœ®ãæããå¿ èŠããããã§ããã°æåã§çœ®ãæããå¿ èŠã¯ãããŸããã ãã®åé¡ã¯ãmltã®ã¹ããŒã ããªããšããäºå®ã«ãã£ãŠããã«è€éã«ãªãããããã¡ã€ã«ã®æ£ç¢ºããæ€èšŒããã®ã¯ããã°ã©ã çã«å°é£ã§ãã ãã£ã³ã¹ãåããã¹ããŒã ãªãã§ãã£ãŠã¿ãŠãã ããã
ã¯ããŒã³ã®ã¡ã¿ããŒã¿ãå ã®ããŒã¿ã«çœ®ãæããã«ã¯ã©ãããã°ããã§ããããïŒãã¡ããããããªèªäœãç°ãªããããããã¯ç°ãªããŸãïŒã 幞ããªããšã«ãã¡ã«ãã¯æ£ããmltãäœãã®ã«ååè³¢ãã圌èªèº«ãåŸã§æ¶è²»ããŸãã meltã³ãã³ãã䜿çšããŠã¬ã³ããªã³ã°ãéå§ãããšããããŒã¿ãœãŒã¹ïŒäžèšã®ããã«ããããã¥ãŒãµãŒãïŒãšã¹ããªãŒã ããªãã€ã¬ã¯ããããã³ã³ã·ã¥ãŒããŒïŒãã³ã³ã·ã¥ãŒããŒãïŒãæå®ããå¿ èŠããããŸãã ã³ã³ã·ã¥ãŒãã¯ç°ãªãå Žåãããããã¹ãŠã®ãªãã·ã§ã³ã¯ããã§è¡šç€ºããããã³ã³ãœãŒã«ããã³ãã³ããå ¥åããããšã§è¡šç€ºã§ããŸãã
$ melt -query "consumers" --- consumers: - decklink - xgl - qglsl - sdl - sdl_audio - sdl_preview - sdl_still - cbrts - xml - sdi - jack - avformat - multi - null - gtk2_preview - blipflash - rtaudio ...
ã芧ã®ãšãããã¬ã³ããªã³ã°åºåãä»»æã®ãã®ã«ãªãã€ã¬ã¯ãã§ããŸãã ããšãã°ããã¡ã€ã«ãžã®éåžžã®ã¬ã³ããªã³ã°äžã«ãavformatã䜿çšãããŸãã ããŠã³ããããã®ã¯ãã¹ãŠ1ã€ã®ãã¡ã€ã«ã«ä¿åãããŸãã 2çªç®ã®äŸãšããŠã次ã®ã³ãã³ãã䜿çšããŠãããã«åºåãstdoutã«éãããšãã§ããŸãã
$ melt original.mlt -consumer libdv
ãã®åŸããããªåçã®ãããŠã£ã³ããŠãéãã溶ããŠãã£ã«ã ãçž®å°ããããã®éãéããŠãããŠã£ã³ããŠã«ãã®å Žã§ãªãã€ã¬ã¯ããããŸãã
ãã ãã ãxmlããã³ã³ã·ã¥ãŒããšããŠæå®ãããããªãã¡ã€ã«ããœãŒã¹ãšããŠæå®ãããšãmeltã¯ãã¹ãŠã®ãã¡ã€ã«ãšãã®æè¡ãã©ã¡ãŒã¿ãŒããªã¹ããããã¹ãŠã®ã³ã³ãã³ããXML圢åŒã§çŸãããã©ãŒããããããMLTãã¡ã€ã«ã«åºåããŸãã ã³ãã³ãã®äŸã次ã«ç€ºããŸãã
$ melt * .MOV -consumer xmlïŒoriginal.mlt
解å床MOVã®ãã®ãã£ã¬ã¯ããªã«ãããããªãã¡ã€ã«ã®ããããã¥ãŒãµãŒãã®ã¿ãå«ãMLTãã¡ã€ã«ãçæããŸãã åœç¶ãå ã®ïŒå€§ããªïŒãããªãã¡ã€ã«ã®æ£ããã¡ã¿ããŒã¿ã䜿çšããŸãã ãããç§ãã¡ã®é°æ¹¿ãªèšç»ã«å¿ èŠãªãã®ã§ãïŒ ã ããïŒ
- ãµãŒããŒäžã®å ã®å Žæãç¥ã£ãŠããŸãã
- ãããã®ãªãªãžãã«ã«åºã¥ããŠããªãªãžãã«ã®ãããªãšãã®ã¡ã¿ããŒã¿ãå«ãããããã¥ãŒãµãŒãã1ã€ã ãå«ãMLTãã¡ã€ã«ãã³ãã³ãã©ã€ã³ã§çæããŸãã original.mltãšåŒã³ãŸãããã ãã®ãã¡ã€ã«ã«ã¯æ ç»ã®èª¬æïŒã€ãŸããã©ã¯ã¿ãŒã¿ã°ïŒã¯å«ãŸããã1ã€ã®ãœãŒã¹ã®ã¿ãå«ãŸããŸãã ããããã®ãœãŒã¹ãšããŠäœ¿çšããŸã æ£ããããããã¥ãŒãµãŒãã
- çŸåšã®MLTãã¡ã€ã«ãã©ããããããããµãŒããŒã«è»¢éããŸãããµãŒããŒã«ã¯ãçŸåšã®å€æŽãå ããããæ ç»ãå«ãŸããŠããŸããããã³ããŒããããå°ããªã³ããŒãå«ãŸããŠããŸãã small.mltãšåŒã³ãŸããã
- ãªãªãžãã«ãšã³ããŒã¯åãååïŒãã ããæ¡åŒµåã¯ç°ãªãå¯èœæ§ãããïŒã念é ã«çœ®ããŠãæåã®MLTãã¡ã€ã«ã®ãæ£ããããããã¥ãŒãµãŒãš2çªç®ã®MLTãã¡ã€ã«ã®ãããªãã³ã°ãããããããã¥ãŒãµãŒãäžèŽãããããšãã§ããŸãã
- ãããã¥ãŒãµãŒèªäœã ãã§ãªããããããIDãç°ãªããããIDã眮ãæããå¿ èŠããããŸãã
- æžãå§ããããšãã§ããŸãã
ãã®çµæãåãããã¥ãŒãµãŒã¯æ¬¡ã®ããã«ãªããŸãã
<producer> <property name="resource">Videos/small/FILE1234.mp4</property> ... - </producer>
次ã®ãããªãããã¥ãŒãµãŒã«çœ®ãæããå¿ èŠããããŸãã
<producer> <property name="resource">Videos/original/FILE1234.MOV</property> ... - </producer>
ãã®æäœãå®äºããããã«ã ãã¹ãä»ãã®å°ããªPython ã¹ã¯ãªãããã¹ã±ããããŸããã å®éãç§ã¯Javaã®ä¿¡è ãªã®ã§ããããç§ã®æåã®Pythonã³ãŒãã§ãã èªãã åŸãç§ã®æ²ãã£ãæããŸã£ããã«ããå¿ èŠãããããšãããã£ãå Žåãããªãã®èããææ¡ã¯ãã«ãªã¯ãšã¹ãã®åœ¢ã§æè¿ãããŸãã
ãªã¹ã1ïŒMLTãã¡ã€ã«ãã³ãã©ãŒã³ãŒã
#!/usr/bin/env python import xml.etree.ElementTree as ET import os.path import sys, getopt def main(argv): ''' The main purpose of this programm is to take the given MLT file containing producers with an compressed ("small") resources (video, images, sound) and replace them with identical producers with uncompressed ("original") resources from another MLT file Example of usage: python process.py -s ~/Videos/small.sh.mlt -p ~/Videos/original/original.mlt ''' smallVideosFile, originalVideosFile, homeDir = _extractCLArguments(argv) if (smallVideosFile == '' or originalVideosFile == ''): print "Error. Both arguments -s and -p must be provided!" sys.exit(2) print "Start MLT file processor. We will modify %s using data from %s" % (smallVideosFile, originalVideosFile) # Parse the MLT file with small resources smallTree = ET.parse(smallVideosFile) smallTreeRoot = smallTree.getroot() # and MLT file with original (big, full size) resources originalTree = ET.parse(originalVideosFile) originalTreeRoot = originalTree.getroot() # prepare maps "video file name" <==> "producer ID" mapSmallProducers = _getMapOfProducerIds(smallTreeRoot) mapOriginalProducers = _getMapOfProducerIds(originalTreeRoot) # build map "small producer ID" <==> "original producer ID", having the same video resource mapID = _mergeMaps(mapSmallProducers, mapOriginalProducers) # update 'root' value in MLT tag _updateRootTag(homeDir, smallTreeRoot) # then replace all the producers containing small videos with those with original videos _replaceAllSmallProducersWithOriginal(mapOriginalProducers, smallTreeRoot, originalTreeRoot) # print modified MLT to output file ET.ElementTree(smallTreeRoot).write(smallVideosFile, encoding='utf-8', xml_declaration=True) def _extractResourceName(fullName): ''' Extracts only the resource name from full path. For example, if the fullName is Videos/small/FILE1114.mkv this method returns FILE1114 ''' if "?" in fullName: withoutParam = fullName.split("?",1)[0] return os.path.splitext(os.path.basename(withoutParam))[0] else: return os.path.splitext(os.path.basename(fullName))[0] def _mergeMaps(mapSmallProducers, mapOriginalProducers): ''' Builds map of producer IDs: each small producer's ID should match appropriate big producer's ID, having the same resource. ''' mapID = {} for fileName, oldProducerId in mapSmallProducers.items(): if (fileName in mapOriginalProducers): mapID[oldProducerId] = mapOriginalProducers[fileName] return mapID def _getMapOfProducerIds(tree): ''' Builds the map for the given file: "resource (video file name)" <=> "producer ID". ''' arrProducers = tree.findall('producer') # Collect the map "resourse (video file name)" <==> "id of the producer" mapIdToResource = {} for producer in arrProducers: resourceType = producer.find("*[@name='mlt_service']").text isReplacementNeeded = (resourceType == "avformat" or resourceType == "framebuffer" or resourceType == "xml") if (isReplacementNeeded): resourceValue = producer.find("*[@name='resource']").text # extract only filename (without path and extension) fileName = _extractResourceName(resourceValue) mapIdToResource[fileName] = producer.attrib.get('id') else: print "[Ignored] the producer %s (resource type is %s) is ignored" % (producer.attrib.get('id'), resourceType) pass return mapIdToResource def _replaceAllSmallProducersWithOriginal(mapOriginalProducers, rootToBeModified, rootOriginal): ''' Replaces all DOM-element 'Producer' containing small resources with identical producers, containing the original resource ''' print "Replace old producer having small size with another one having original resource:" arrSmallProducers = rootToBeModified.findall('producer') for producer in arrSmallProducers: resourceType = producer.find("*[@name='mlt_service']").text if (resourceType == "avformat"): _replaceProducerAvformat(producer, mapOriginalProducers, rootToBeModified, rootOriginal) elif (resourceType == "framebuffer"): _replaceProducerFramebuffer(producer, mapOriginalProducers, rootToBeModified, rootOriginal) elif (resourceType == "xml"): _replaceProducerXml(producer, mapOriginalProducers, rootToBeModified, rootOriginal) def _replaceProducerAvformat(producer, mapOriginalProducers, rootToBeModified, rootOriginal): ''' Replace entirely one producer, containing small resource with similar producer from original tree. Resulting producer should have the same ID, but it must get all the values from original tree (URLs, codec properties and other technical information) ''' resourceValue = producer.find("*[@name='resource']").text fileName = _extractResourceName(resourceValue) if(fileName in mapOriginalProducers): # remember in, out and length from small producer attrIn = producer.attrib.get('in') attrOut = producer.attrib.get('out') length = producer.find("*[@name='length']").text producerId = producer.attrib.get('id') originalId = mapOriginalProducers[fileName] origProducer = rootOriginal.find('.//producer[@id="' + originalId + '"]') if origProducer is not None: rootToBeModified.remove(producer) # do not touch original node, deal with clone instead origProducerClone = origProducer.copy() # update in, out and length to match with small producer origProducerClone.set('in', attrIn) origProducerClone.set('out', attrOut) origProducerClone.set('id', producerId) origProducerClone.find("*[@name='length']").text = length rootToBeModified.insert(1, origProducerClone) print " - Avformat resource (id=%s) is replaced with resource (id=%s)" % (producerId, originalId) else: print " - [Ignored] Avformat resource (id=%s) was not found. File name is '%s' and found original ID is '%s'" % (producerId, fileName, originalId) def _replaceProducerFramebuffer(producer, mapOriginalProducers, rootToBeModified, rootOriginal): ''' Update given producer's resource. The resulting producer should have the same properties except resource path. Keep in mind, that we need to keep the parameter after "?" sign. ''' resourceNode = producer.find("*[@name='resource']") resourceValue = resourceNode.text producerId = producer.attrib.get('id') fileName = _extractResourceName(resourceValue) if(fileName in mapOriginalProducers): originalId = mapOriginalProducers[fileName] origProducer = rootOriginal.find('.//producer[@id="' + originalId + '"]') if origProducer is not None: originalResourcePath = origProducer.find("*[@name='resource']").text extension = resourceValue.split("?",1)[1] resourceNode.text = originalResourcePath + "?" + extension print " - Framebuffer resource (id=%s) is replaced with resource (id=%s)" % (producerId, originalId) else: print " - [Ignored] the Framebuffer resource (id=%s) is ignored!" % (producerId) def _replaceProducerXml(producer, mapOriginalProducers, rootToBeModified, rootOriginal): ''' Update given producer in case if it is XML resource. The resulting producer should have updated resource path including .mlt extension. ''' resourceNode = producer.find("*[@name='resource']") resourceValue = resourceNode.text[:-4] # trim .mlt extension producerId = producer.attrib.get('id') fileName = _extractResourceName(resourceValue) if(fileName in mapOriginalProducers): originalId = mapOriginalProducers[fileName] origProducer = rootOriginal.find('.//producer[@id="' + originalId + '"]') if origProducer is not None: originalResourcePath = origProducer.find("*[@name='resource']").text resourceNode.text = originalResourcePath + ".mlt" print " - XML resource (id=%s) is replaced with resource (id=%s)" % (producerId, originalId) def _updateRootTag(homedir, rootToBeModified): ''' In order to find all the resources, MLT uses the arggument "root" placed in tag MLT. When we work on different computers, we must also update this value in order MELT would be able to find resources. ''' if (homedir != ''): rootToBeModified.set('root', homedir) def _extractCLArguments(argv): inputfile = '' outputfile = '' homedir = '' try: opts, args = getopt.getopt(argv,"hs:p:u:",["smallfile=","producersfile=", "userhomedir="]) except getopt.GetoptError: print 'process.py -s <smallFileToBeModified> -p <producersFile>' sys.exit(2) for opt, arg in opts: if opt == '-h': print '''process.py -s <smallFile> -p <producersFile> -u <userHomeDir> where "smallFile" is a mlt file to be modified and "producersFile" is a mlt file containing the list of producers with original resources. ''' sys.exit() elif opt in ("-s", "--smallfile"): inputfile = arg elif opt in ("-p", "--producersfile"): outputfile = arg elif opt in ("-u", "--userhomedir"): homedir = arg return inputfile, outputfile, homedir if __name__ == "__main__": main(sys.argv[1:])
次ã®ã³ãã³ãã§ãã®ã¹ã¯ãªãããå®è¡ããŸãã
ïŒpython process.py -s small.mlt -p original.mlt
ã original.mltãã¡ã€ã«ãããã¹ãŠã®ãããã¥ãŒãµãŒãååŸãã small.mltãã¡ã€ã«å ã®å¯Ÿå¿ãããããã¥ãŒãµãŒã«çœ®ãæããŸããããã®ä»ã®ãããã¥ãŒãµãŒã¯å€æŽããªãã§ãã ããããšè¡šç€ºãããŸãã
ãã¹ãŠããŸãšãã
ããŠãä»åºŠã¯ãããžã§ã¯ãããªã¢ãŒãã§ã¢ã»ã³ãã«ããŠã¿ãŸãã Linuxã«ããã¯ããªã®ã§ããµãŒããŒåŽã§ç解ããããã·ã³ãã«ãªã·ã§ã«ã¹ã¯ãªãããäœæããŸãããã
ãªã¹ã2ïŒå®å
šãªãµãŒããŒåŽã¹ã¯ãªãã
#!/bin/bash SMALL_RESORCES="Small" ORIGINAL_RESOURCES="Original" KDENLIVE_SCRIPT="austria-2015_001.sh" PY_SCRIPT="/home/ilya/home-workspace/mlt-producer-replacer/process.py" CURRENT_DIR="/home/ilya/Videos/MltProcessor" rm log echo -e "\n\n Step 1. Rename all the .mp4.mlt resources to .MOV.mlt" rm $ORIGINAL_RESOURCES/*.MOV.mlt for file in $ORIGINAL_RESOURCES/*.mlt; do cp "$file" "$ORIGINAL_RESOURCES/`basename $file .mp4.mlt`.MOV.mlt" done echo -e "\n\n Step 2. Generate fresh list of producers with original sources" rm $CURRENT_DIR/original.mlt cd ~ melt $CURRENT_DIR/$ORIGINAL_RESOURCES/*.{MOV,mp3} -consumer xml:original.mlt cd $CURRENT_DIR mv ~/original.mlt $CURRENT_DIR echo -e "\n\n Step 3. Update MLT and replace small videos with original ones" # process the main MLT file cp $KDENLIVE_SCRIPT.mlt $KDENLIVE_SCRIPT.mlt-BACKUP python $PY_SCRIPT -s $KDENLIVE_SCRIPT.mlt -p $CURRENT_DIR/original.mlt -u $HOME echo -e "\n\n Step 4. Update additional MLT files" # process other MLT resources, that are producers with type=xml for i in $ORIGINAL_RESOURCES/*.MOV.mlt; do python $PY_SCRIPT -s $i -p $CURRENT_DIR/original.mlt -u $HOME done echo -e "\n\n Step 5. Run rendering" ./$KDENLIVE_SCRIPT echo -e "\n\n Step 6. Make it smaller" HandBrakeCLI -i austria.mp4 -o austria.small.m4v --preset="Universal" echo "FINISHED" >> log
...ããã¯ãå¿ èŠãªãã¹ãŠãå®è¡ããŸãããªãªãžãã«ããæ°ããMLTãçæããPythonããŒã¹ã®ã¹ã¯ãªãããå®è¡ããŠãœãŒã¹ã眮ãæããã¬ã³ããªã³ã°ãéå§ããŸãã æåŸã«ãé»åã¡ãŒã«ãŸãã¯SMSã§ã¢ã©ãŒãã貌ãä»ããããšãã§ããŸãã
ã泚æ äžèšã®ã¹ã¯ãªããã®ã¹ããã1ãšã¹ããã4ã§èª¬æãããŠããå°ããªåŸ®åŠãã«ã€ããŠã³ã¡ã³ãããããšæããŸãã åè¿°ããããã«ããããªãåçã«å ããŠãä»ã®mltãã¡ã€ã«ããœãŒã¹ãšããŠæ©èœã§ããŸãã , .. Clip Job . , .
, , . {fileName}.{extension}.mlt . :
<producer id="12_1" in="0" out="375"> <property name="mlt_type">producer</property> <property name="resource">Videos/MltProcessor/Original/IMG_3764.MOV.mlt</property> <property name="mlt_service">xml</property> .... </producer>
, Step 1 , melt . , IMG_3764.mp4.mlt IMG_3764.MOV.mlt . Step 4 , mlt.
å šäœå
ããã§ãæ ç»ã®äœæãæåããæåŸãŸã§ã©ã®ããã«èŠãããããŸãšããŸãã
- ãã¹ãŠã®ãœãŒã¹ãåéãïŒé³æ¥œã䜿çšã§ããŸãïŒãå°ããªã¯ããŒã³ãäœæããŸãã
- Kdenliveãªã©ã®GUIããã°ã©ã ã§æ°ãããããžã§ã¯ããäœæãããã¹ãŠã®ã¯ããŒã³ãè¿œå ããŸãã
- ãããžã§ã¯ãã®æºåããŸã æŽã£ãŠããªãã«ãããããããGenerateãã¡ã€ã«ãã¯ãªãã¯ããŠã·ã§ã«ã¹ã¯ãªãããçæããŸãããªãã·ã§ã³ã§ããã©ã¡ãŒã¿ã§ã¹ã¬ããã®æ°ãèšå®ã§ããŸãããã®ãã¡ã€ã«ã¯å€æŽãããŸããã
- å ã®ãããªãPythonã¹ã¯ãªãããããã³ã·ã§ã«ã¹ã¯ãªãããåã®æ®µèœãããµãŒããŒã«ããããããŸãã
- æ ç»ã®ç·šéãéå§ããŸããæ ç»ãäœæããŠæé«å質ã§èŠèŽããæºåãã§ããããæ°ããmltãã¡ã€ã«ãããçŽããŸãã
- ãµãŒããŒã«ãã¡ã€ã«ã1ã€ã ãã¢ããããŒãããèªå·±èšè¿°ã·ã§ã«ã¹ã¯ãªãããå®è¡ããŸãïŒãªã¹ã2ïŒã
åœç¶ãç·šéäžã«ã ãŒããŒãäœåºŠãã¬ã³ããªã³ã°ã§ããããããµãŒããŒã«mltãã¡ã€ã«ã1ã€ã ãéä¿¡ããŠã©ãããããã§äœæ¥ãç¶ããå¿ èŠããããŸããä»ã®ãã¹ãŠã¯å€æŽãããŸãããããããäž»ãªããªãã¯ã¯ãããã»ã¹ããªã¢ãŒããµãŒããŒã§èµ·åããããããã¬ã³ããªã³ã°ãéå§ããããšã§ãç°¡åã«ããžãã¹ãé²ããããã€ã³ã¹ããŒã«ãç¶è¡ããããã¹ãªãŒãç¶æ ã«ããããã©ãããããããªãã«ãããã§ããããšã§ãã
ãã®çµæãåã³ã©ãããããããæ¯åå®è¡ããéåžžã«å°ããªã¹ã¯ãªãããäœæããŸãã
#!/bin/bash SERVER_HOSTNAME="10.20.30.40" USERNAME="ilya" REMOTE_PROJECT_DIR="/home/ilya/Videos/MltProcessor" REMOTE_ORIGINAL_DIR="/home/ilya/Videos/MltProcessor/Original" LOCAL_MLT="/home/w32blaster/kdenlive/scripts/austria-2015_001.sh.mlt" LOCAL_SOURCES_DIR="/home/w32blaster/Videos/Austria2015-small" # 1. Upload main MLT file scp $LOCAL_MLT $USERNAME@$SERVER_HOSTNAME:$REMOTE_PROJECT_DIR # 2. Upload all others MLT files, that represents producer sources scp $LOCAL_SOURCES_DIR/*.mlt $USERNAME@$SERVER_HOSTNAME:$REMOTE_ORIGINAL_DIR # 3. Execute rendering on the remote server ssh $USERNAME@$SERVER_HOSTNAME "$REMOVE_PROJECT_DIR/run.sh"
ãã¡ããããããèªååã§ããŸããããšãã°ãã¯ã©ãŠãã¹ãã¬ãŒãžãä»ããŠMLTãã¡ã€ã«ãåæãããµãŒããŒäžã®ãã¡ã€ã«ãå€æŽããããšãã«ç£èŠããèªåçã«ã¬ã³ããªã³ã°ãéå§ãããªã©ã§ãããããããã®é åçãªããšãèªåã§è¡ãããšããå§ãããŸãã
ãããã«
ãã¡ãããããã«åºã¥ããŠãã¹ã¿ãŒãã¢ãããéå§ãããã£ãããŒãªååãèãåºããå£ã²ãã¡ã¬ãã§ããŽãæãã®ã¯ææå°æ©ã§ãããã®å Žåãããã»ã¹ã®ã¢ã€ãã¢ãã®ãã®ãå ·äœåããããšããŸããããã®æ¹æ³ã¯ããŸã äžè¬çãªäœ¿çšã®ããã§ã¯ãªãã奜ããª
å°ãèããŸããã
- ãã®æ¹æ³ããã¹ãŠã®Kdenliveãã£ã«ã¿ãŒã§æ©èœããªãå¯èœæ§ããããŸãããã¹ãŠããã¹ãããæ©äŒããããŸããã§ãã
- ãµãŒããŒã«ç©ççã«ã¢ã¯ã»ã¹ããããšããå§ãããŸããããã¯ãå¹³åçãªãã£ãã«ãæã€ãããã¯ãŒã¯ãä»ããŠãã¹ãŠã®é«å質ã®ãªãªãžãã«ããµãŒããŒã«è»¢éããã®ã«æéããããããã§ããçæ³çãªãªãã·ã§ã³ïŒãã©ãã·ã¥ãã©ã€ããŸãã¯æºåž¯ã䜿çšããŠãããªãã¡ã€ã«ã転éããŸãã
- ãããŠãã¯ããããç§èªèº«ãåé¡ãæãã€ããŠãããèªåã§è§£æ±ºãããšæããªããèšãèš³ãšããŠãã€ãã«Pythonã«ç²Ÿéããããã®çŽ æŽãããèšãèš³ãèŠã€ãããšèšãããšãã§ããŸãã
è¯ãé±æ«ãïŒãããŠãæ»ãããããéããšããžãšéªã®å¹ãã ãŸãã®å€¢ããã§ã«ãã©ãã£ã³åŠçããŠãã人ã®ããã«-次ã®ã·ãŒãºã³ã«è¯ãä¹ãå¿å°ã§ãïŒ