|
|
Line 1: |
Line 1: |
− | '''Result of the scripts'''
| + | == chronology == |
| | | |
− | <html>
| + | in visioning chronological order, newest first |
− | <iframe src="https://player.vimeo.com/video/239142597?title=0&credits=0&portrait=0&byline=0" width="640" height="360" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
| + | |
− | </iframe>
| + | |
− | </html>
| + | |
| | | |
− | watch this at full resolution (full HD), or you will not see anything :)
| + | ===Arrival=== |
| + | * seen 2017/11/05 (completed) - 2016 - [http://www.imdb.com/title/tt2543164/ imdb] - [https://www.rottentomatoes.com/m/arrival_2016 rotten tomatoes] |
| + | * torrent, language, first contact, heptapods, time awareness, giant squid |
| + | * related: [https://www.youtube.com/watch?v=d3zTfXvYZ9s Time Travel in Fiction Rundown(youtube)] |
| + | [[File:Arrival-filming-locations-poster-e1485131647103.jpg|150px]] |
| | | |
− | == how does it works == | + | ===String theory=== |
| + | * seen ~2017/11/03 (completed) - uploaded in 2015 - [https://www.youtube.com/watch?v=S8sbzA5j2Tk #1], [https://www.youtube.com/watch?v=l5t8STlF_ns #2], [https://www.youtube.com/watch?v=Q8ccXzM3x8A comments of Dr Tony Padilla] |
| + | * youtube, documentary, physics, theory, fundamental |
| + | [[File:About Testing String Theory by Analogy.gif|150px]] |
| | | |
− | notes for me and whoever might find this interesting
| + | ===Blade runner 2049=== |
| + | * seen 2017/11/01 (completed) - 2017 - [http://www.imdb.com/title/tt1856101/ imdb] - [https://www.rottentomatoes.com/m/blade_runner_2049 rotten tomatoes] |
| + | * ugc toison d'or, photography & CG++, romantic relation with IA, hologram embodiment, memories factory, augmented vision |
| + | [[File:Blade-runner2049 poster.jpg|150px]] |
| | | |
− | === logo === | + | ===Stalker=== |
| + | * seen 2017/10/30 (completed) - 1971 - [http://www.imdb.com/title/tt0079944/ imdb] |
| + | * torrent, poetry, sadness, mysticism, painting, sculpture, water |
| + | [[File:Stalker 1979 poster.jpg|150px]] |
| | | |
− | the logo is using the 'ascii' font JS Cursive, slightly modified on the 'n'
| + | ===THX 1138=== |
− |
| + | * seen ~2017/10/22 (completed) - 1971 - [http://www.imdb.com/title/tt0066434/ imdb] |
− | __ __, ,_ _ __, __ _ ,
| + | * torrent, underground city, inhibiting drugs, no border spaces, christ, skins |
− | _(_,_(_/(__/ (__/ (_(_/(__(_/__(/__/_)_
| + | [[File:Thx1138 movie poster.jpeg|150px]] |
− | _/_
| + | |
− | (/
| + | |
| | | |
− | that's a nice way to display other fonts in the terminal; see resources for links
| + | ===Wrong=== |
| + | * seen ~2017/10/20 (completed) - 2012 - [http://www.imdb.com/title/tt1901040/ imdb] |
| + | * torrent, twisted reality, time & social inconsistency, french accent, lost dog |
| + | [[File:Wrong the movie poster.jpg|150px]] |
| | | |
− | === information gathering === | + | ===Tank girl=== |
| + | * seen 2017/10/16 & 17 (completed) - 1995 - [http://www.imdb.com/title/tt0114614/ imdb] |
| + | * torrent, desert, grunge, feminism, real character + anime, cobain (ost), iggy pop |
| + | * [http://web.stanford.edu/class/femst140x/Abstracts/tank%20girl.htm Tank Girl = Riot Grrl?] |
| + | [[File:Tank-girl-movie-poster-1995-1020472204.jpg |150px]] |
| | | |
− | to retrieve the file information, i used '''ffprobe''', it dumps a lot of info
| + | ===Virtual Revolution=== |
| + | * seen 2017/10/10 (completed) - 2016 - [http://www.imdb.com/title/tt4054004/ imdb] |
| + | * torrent, blade runner-like merged with kind-of sucker punch |
| + | [[File:V1.bTsxMjI3NDA5OTtqOzE3NDY3OzEyMDA7MTIwMDsxNjAw.jpeg|150px]] |
| | | |
− | Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'carnages_creamy_patterns.mov':
| + | ===The dark tower=== |
− | Metadata:
| + | * seen 2017/10/10 (completed) - 2017 - [http://www.imdb.com/title/tt1648190/ imdb] |
− | major_brand : qt
| + | * torrent, parallel worlds, psychic power, king arthur |
− | minor_version : 512
| + | [[File:The-Dark-Tower-Poster-McConaughey.jpg|150px]] |
− | compatible_brands: qt
| + | |
− | encoder : Lavf56.40.101
| + | |
− | Duration: 01:39:01.03, start: 0.000000, bitrate: 200411 kb/s
| + | |
− | Stream #0:0(eng): Video: qtrle (rle / 0x20656C72), rgb24, 1920x1080, 200408 kb/s, 30 fps, 30 tbr, 15360 tbn, 15360 tbc (default)
| + | |
− | Metadata:
| + | |
− | handler_name : DataHandler
| + | |
− | encoder : Lavc56.60.100 qtrle
| + | |
| | | |
− | for the credits, i just used the ''Stream #0:0'', reformated as a tabbed list
| + | ===Logan's run=== |
| + | * seen 2017/10/09 (completed) - 1976 - [http://www.imdb.com/title/tt0074812/?ref_=fn_al_tt_1 imdb] |
| + | * torrent, dome city, limited lifetime, sadmen, cardboard models++ |
| + | [[File:Logan s run.jpg|150px]] |
| | | |
− | other info comes from the file browser (''nemo'' in my case)
| + | ===StarCraft 2 - Legacy of the Void=== |
| + | * seen 2017/10/09 - 2015 - [https://www.youtube.com/watch?v=erTmXZCEYko&t=3864s youtube] [[wikipedia:StarCraft_II:_Legacy_of_the_Void | wikipedia]] |
| + | * youtube, game, cinematic, protoss, 3d, fan-made |
| | | |
− | === scripting === | + | ===Horizon : Robot Dinosaur World=== |
− | here comes the interesting part!
| + | * seen 2017/10/09 - 2017 - [https://www.youtube.com/watch?v=iMko75rhJUc&t=2310s youtube] [[wikipedia:Horizon_Zero_Dawn | wikipedia]] |
| + | * youtube, game, cinematic, 3d, fan-made |
| | | |
− | the process requires a minimum of text editing: just create a '''media_*.py''' file containing the required vars (with correct types)
| + | ===Le fidèle=== |
| + | * seen 2017/10/06 (completed) - 2017 - http://www.imdb.com/title/tt2586120/ imdb] |
| + | * cinéma aventure, gangster, porsche, brusseler, [[wikipedia:Patrick_Haemers|Patrick Haemers]] |
| + | [[File:Le-fidele.20170821101527.jpg|150px]] |
| | | |
− | ==== media info ==== | + | ===In the aftermath=== |
| + | * seen 2017/10/05 (completed) - 1988 - [http://www.imdb.com/title/tt0206827/ imdb] |
| + | * torrent, real character + anime, dark, serie z |
| + | [[File:In the aftermath.jpg|150px]] [[File:In the aftermath2.jpg|200px]] |
| | | |
− | example of media info file
| + | == series == |
| | | |
− | '''WARNING''': mediawiki removes the "'" chars, go to source to copy/paste! (append '''&action=edit''' to current url)
| + | * [http://www.imdb.com/title/tt4158110/ Mr. Robot], torrent |
| + | [[File:Mr robot.jpg|150px]] |
| | | |
− | from styler import *
| + | * [http://www.imdb.com/title/tt2861424/ Rick and Morty], torrent |
− | filename = style("b|yellow") + "carnages_teeny_black.mkv [#6]" + style("")
| + | [[File:Poster-rick-y-morty.jpg|150px]] |
− | t_date= "date: " + style("b") + "20171019" + style("")
| + | |
− | t_size= "size: " + style("b") + "2.507.349.390 bytes" + style("")
| + | |
− | t_duration= "duration: " + style("b") + "00:08:16.8" + style("")
| + | |
− | t_author = "author:" + style("b") + "françois zajéga" + style("")
| + | |
− | t_credits = '''title font: JS Cursive By Joan Stark'''
| + | |
− | t_stream = '''stream #0:0(eng): video:
| + | |
− | mjpeg
| + | |
− | yuvj444p(pc, bt470bg/unknown/unknown)
| + | |
− | 1920x1080
| + | |
− | SAR 1:1 DAR 16:9
| + | |
− | 25 fps
| + | |
− | 25 tbr
| + | |
− | 1k tbn
| + | |
− | 1k tbc (default)
| + | |
− | encoder: Lavc56.60.100 libx264'''
| + | |
− | t_input= '''source:
| + | |
− | width: 1024
| + | |
− | height: 544'''
| + | |
| | | |
− | content of the video here above
| + | == listings == |
| | | |
− | the imported script comes from [https://github.com/frankiezafe/TerminalStyler TerminalStyler]
| + | * [https://www.youtube.com/playlist?list=LLaTxtuDCjHDuzXGfI6b1zcQ youtube likes] |
| + | * [https://vimeo.com/frankiezafe/likes vimeo likes] |
| | | |
− | ==== animation ==== | + | == resources == |
| | | |
− | the animation is done via another python script, '''credits_generator.py''':
| + | * https://www.rollingstone.com/movies/lists/50-best-sci-fi-movies-of-the-1970s-20150114/laserblast-1978-20150113 |
− | | + | * https://mubi.com/lists/the-fabulous-world-of-eastern-european-cinema |
− | import os
| + | |
− | import sys
| + | |
− | import time
| + | |
− | from styler import *
| + | |
− |
| + | |
− | mediainfo = __import__( str( sys.argv[1] )[:-3], fromlist=["*"] )
| + | |
− |
| + | |
− | ############# config #############
| + | |
− | margin = (4,10)
| + | |
− | logo = '''
| + | |
− |
| + | |
− | __ __, ,_ _ __, __ _ ,
| + | |
− | _(_,_(_/(__/ (__/ (_(_/(__(_/__(/__/_)_
| + | |
− | _/_
| + | |
− | (/
| + | |
− |
| + | |
− | '''
| + | |
− | ret = style("_n")
| + | |
− | t_mtop = style("_n" + str( margin[0] ) )
| + | |
− | t_mlef = style("_s" + str( margin[1] ) )
| + | |
− | logo_margined_y = style("_n" + str( margin[0] ) + "|cyan" ) + margin_left( logo, margin[1] ) + style("")
| + | |
− | logo_margined_w = style("_n" + str( margin[0] ) ) + margin_left( logo, margin[1] ) + style("")
| + | |
− | credits_margined = margin_left( mediainfo.t_credits, margin[1] )
| + | |
− | stream_margined = margin_left( mediainfo.t_stream, margin[1] )
| + | |
− | input_margined = margin_left( mediainfo.t_input, margin[1] )
| + | |
− |
| + | |
− | ############# frames #############
| + | |
− |
| + | |
− | frames = []
| + | |
− | frames.append( [t_mtop, 4] )
| + | |
− | for i in range( 0, 5 ):
| + | |
− | if i % 2 == 0:
| + | |
− | frames.append( [logo_margined_w, 0.1] )
| + | |
− | else:
| + | |
− | frames.append( [logo_margined_y, 0.15] )
| + | |
− | frames.append( [style("_n" + str( margin[0] + 8 )), 0.1] )
| + | |
− | frames.append( [logo_margined_y, 0.5] )
| + | |
− | frames.append( [
| + | |
− | logo_margined_y +
| + | |
− | ret + t_mlef + mediainfo.filename +
| + | |
− | ret + t_mlef,
| + | |
− | 1] )
| + | |
− |
| + | |
− | authinfo = ret + t_mlef + mediainfo.t_date + ret + t_mlef + mediainfo.t_size + ret + t_mlef + mediainfo.t_duration + ret + t_mlef + mediainfo.t_author
| + | |
− | for i in range( linecount(stream_margined) ):
| + | |
− | frames.append( [
| + | |
− | logo_margined_y +
| + | |
− | ret + t_mlef + mediainfo.filename +
| + | |
− | ret +
| + | |
− | ret + lines( authinfo, 0, i ),
| + | |
− | 0.05] )
| + | |
− | frames.append( [
| + | |
− | logo_margined_y +
| + | |
− | ret + t_mlef + mediainfo.filename +
| + | |
− | ret +
| + | |
− | ret + authinfo + ret,
| + | |
− | 5] )
| + | |
− |
| + | |
− | techinfo = stream_margined + ret + input_margined
| + | |
− | for i in range( linecount(stream_margined) ):
| + | |
− | frames.append( [
| + | |
− | logo_margined_y +
| + | |
− | ret + t_mlef + mediainfo.filename +
| + | |
− | ret +
| + | |
− | ret + lines( techinfo, 0, i ),
| + | |
− | 0.05] )
| + | |
− | frames.append( [
| + | |
− | logo_margined_y +
| + | |
− | ret + t_mlef + mediainfo.filename +
| + | |
− | ret +
| + | |
− | ret + techinfo,
| + | |
− | 3] )
| + | |
− | frames.append( [
| + | |
− | logo_margined_y +
| + | |
− | ret + t_mlef + mediainfo.filename +
| + | |
− | ret +
| + | |
− | ret + techinfo +
| + | |
− | ret + credits_margined,
| + | |
− | 2] )
| + | |
− |
| + | |
− | ############# animation #############
| + | |
− |
| + | |
− | for i in frames:
| + | |
− | os.system('clear')
| + | |
− | print( i[0] )
| + | |
− | sys.stdout.write( t_mlef )
| + | |
− | sys.stdout.flush()
| + | |
− | time.sleep( i[1] )
| + | |
− | | + | |
− | | + | |
− | * __import__( str( sys.argv[1] )[:-3], fromlist=["*"] ) is super useful, as it allows to pass the media_*.py path as an rgument, without changing anything to this script
| + | |
− | * '''margin''' represents the top and left margin of the text, expressed in returns and tabs
| + | |
− | * '''frames''' is a list of the animation frame, with text at position 0 and duration at 1
| + | |
− | * functions '''linecount''' and '''lines''' (from styler.py) allows to make the text animations easier: '''lines''' function truncates the block of text by lines (from, to)
| + | |
− | | + | |
− | Once all frames are packed, we just have to loop over them and print the text. Lines ''sys.stdout'' allows to offset the cursor by the left margin.
| + | |
− | | + | |
− | To test, just launch the script in terminal,
| + | |
− | | + | |
− | python credits_generator.py media_*.py
| + | |
− | | + | |
− | ==== recording ====
| + | |
− | | + | |
− | once everything's ready on python level, we still have to record the execution of the script and save it as a video
| + | |
− | | + | |
− | bash is there to help:
| + | |
− | | + | |
− | #!/bin/bash
| + | |
− |
| + | |
− | #open gnome-terminal in fullscreen, with menu bar enabled
| + | |
− |
| + | |
− | if [ -f "tmp.mov" ]
| + | |
− | then
| + | |
− | rm tmp.mov
| + | |
− | fi
| + | |
− | if [ -f "credits.mkv" ]
| + | |
− | then
| + | |
− | rm credits.mkv
| + | |
− | fi
| + | |
− | ffmpeg -loglevel quiet -nostats -video_size 1920x1080 -framerate 30 -f x11grab -i :0.0 -q:v 1 -vcodec qtrle tmp.mov > /dev/null &
| + | |
− |
| + | |
− | python credits_generator.py $1
| + | |
− |
| + | |
− | killall ffmpeg
| + | |
− |
| + | |
− | sleep 1
| + | |
− |
| + | |
− | ffmpeg -ss 00:00:01 -i tmp.mov -video_size 1920x1080 -vcodec mjpeg -q:v 0 -vf crop=740:700:0:25,pad=1920:1080:iw-740:ih-700 credits.mkv
| + | |
− | | + | |
− | first thing to do is to remove old video files: as we launch ffmpeg recording in silent mode, we will not be able to confirm overwrite!
| + | |
− | | + | |
− | second line is just a standard line to grab screen
| + | |
− | | + | |
− | the last ffmpeg command is a bit special: the 1 second removal is due to glitches appearing when ffmpeg synchronises with display, and the cropping and padding removes the menu bar of the fullscreen terminal
| + | |
− | | + | |
− | The full process outputs a credits.mkv in full HD, ready to be used!
| + | |
− | | + | |
− | == resources ==
| + | |
| | | |
− | * [https://github.com/frankiezafe/TerminalStyler/ TerminalStyler] - script to style the console output
| + | [[category:documentation]] |
− | * [http://www.patorjk.com/software/taag/ taag] - online interface to use 'ascii' fonts
| + | [[category:notes]] |
− | * [http://www.figlet.org/ FIGlet] - a program for making large letters out of ordinary text
| + | [[category:video]] |
− | * [https://github.com/blueset/figlet-fonts figlet-fonts] - collection of ascii art fonts for figlet or toilet
| + | |
− | * [https://asciinema.org/ asciinema] - record and share your terminal sessions, the right way.
| + | |