SlideShare une entreprise Scribd logo
1  sur  15
Télécharger pour lire hors ligne
ttyrecからGIFアニメ 
を作る話 
2014.8.28 YAPC::Asia 2014 前夜祭 
すぎゃーん (@sugyan)
Self Introduction 
• ID: sugyan 
• Lang: Perl, JavaScript, Go, … 
• Location: Hikarie 
• Faction: Enlightened
ttyrec? 
“ttyrec is a tty recorder. Recorded 
data can be played back with the 
included ttyplay command.” 
2000-12-27: ttyrec 1.0 Released 
http://0xcc.net/ttyrec/index.html
何がしたいか 
• ターミナル操作を紹介したい 
• pecoなど便利なツールの良さを伝える 
• 実際の操作を見せるのが一番 
• blogに貼るにはGIFアニメがお手頃
既存のもの 
• LICEcap, Gifzo などのアプリケーション 
• 範囲を指定して録画、共有 
• とても汎用的 
• Linuxは…?
既存のもの 
• ttygif 
• https://github.com/icholy/ttygif 
• ttyrecの録画を再生しながらcapture 
• ImageMagickを使ってGIF生成
突然のGo 
• https://github.com/sugyan/ttygif 
• ttyplay & capture & generate GIF 
• ImageMagick依存なく全部Goで出来る 
• 作ってみたくなった
スクショ不要論 
“ttygifとその系列、端末マニアではない人の95%く 
らいのユースケースでは端末に依存するシーケンスと 
か流さないだろうし、色とかが微妙に違ってもそこが 
主眼じゃないと思うので、単純に内部に端末を持って 
ダイレクトにGIFを吐ければ良くて、いちいちスクリー 
ンショト取るの筋悪ではないの?”
スクショ不要論 
• さっそく作られた 
• https://github.com/saitoha/seq2gif 
• 自分でも作った 
• https://github.com/sugyan/ttyrec2gif
そしてWebへ 
• 全部、JavaScriptでも出来るのでは 
• ttyrecレコードの解析 
• 内部での端末エミュレート、描画 
• GIF生成
そしてWebへ 
• 全部、JavaScriptでも出来るのでは 
• https://github.com/chjj/term.js 
• https://github.com/niklasvh/html2canvas 
• https://github.com/jnordberg/gif.js
そしてWebへ 
• http://ttyrec2gif.herokuapp.com/ 
• Drag&Dropでttyrecordを受け取り 
• JavaScriptだけでGIF生成まで完結 
• デモ
そしてWebへ 
• Webを使う利点: UIを作りやすい 
• 色やサイズやフォントなどのカスタマイズ 
• Frameの間引きやDelay調整 
• 仕上がり確認や共有もしやすい
そしてWebへ 
• サーバ側がやること無い… 
• 成果物を保存するくらい?
引き続き作っていきます 
ご意見・アイデアなど お寄せください

Contenu connexe

Tendances

Pythonによる非同期プログラミング入門
Pythonによる非同期プログラミング入門Pythonによる非同期プログラミング入門
Pythonによる非同期プログラミング入門Hironori Sekine
 
210911 これから始める電子工作とMicroPython
210911 これから始める電子工作とMicroPython210911 これから始める電子工作とMicroPython
210911 これから始める電子工作とMicroPythonTakuya Nishimoto
 
次世代言語 Python による PyPy を使った次世代の処理系開発
次世代言語 Python による PyPy を使った次世代の処理系開発次世代言語 Python による PyPy を使った次世代の処理系開発
次世代言語 Python による PyPy を使った次世代の処理系開発shoma h
 
蛇を埋葬する(PythonをEmbedする)
蛇を埋葬する(PythonをEmbedする)蛇を埋葬する(PythonをEmbedする)
蛇を埋葬する(PythonをEmbedする)Shintarou Okada
 
Corona Handson vol.2 #4
Corona Handson vol.2 #4Corona Handson vol.2 #4
Corona Handson vol.2 #4Tetsuo Ono
 
Analog Devices の IP コアを使う
Analog Devices の IP コアを使うAnalog Devices の IP コアを使う
Analog Devices の IP コアを使うryos36
 
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...Yoshifumi Kawai
 
PYNQ 祭り: Pmod のプログラミング
PYNQ 祭り: Pmod のプログラミングPYNQ 祭り: Pmod のプログラミング
PYNQ 祭り: Pmod のプログラミングryos36
 
Python & PyConJP 2014 Report
Python & PyConJP 2014 ReportPython & PyConJP 2014 Report
Python & PyConJP 2014 Reportgree_tech
 
A quick tour of the Cysharp OSS
A quick tour of the Cysharp OSSA quick tour of the Cysharp OSS
A quick tour of the Cysharp OSSYoshifumi Kawai
 
NextGen Server/Client Architecture - gRPC + Unity + C#
NextGen Server/Client Architecture - gRPC + Unity + C#NextGen Server/Client Architecture - gRPC + Unity + C#
NextGen Server/Client Architecture - gRPC + Unity + C#Yoshifumi Kawai
 

Tendances (12)

Pythonによる非同期プログラミング入門
Pythonによる非同期プログラミング入門Pythonによる非同期プログラミング入門
Pythonによる非同期プログラミング入門
 
210911 これから始める電子工作とMicroPython
210911 これから始める電子工作とMicroPython210911 これから始める電子工作とMicroPython
210911 これから始める電子工作とMicroPython
 
次世代言語 Python による PyPy を使った次世代の処理系開発
次世代言語 Python による PyPy を使った次世代の処理系開発次世代言語 Python による PyPy を使った次世代の処理系開発
次世代言語 Python による PyPy を使った次世代の処理系開発
 
蛇を埋葬する(PythonをEmbedする)
蛇を埋葬する(PythonをEmbedする)蛇を埋葬する(PythonをEmbedする)
蛇を埋葬する(PythonをEmbedする)
 
Corona Handson vol.2 #4
Corona Handson vol.2 #4Corona Handson vol.2 #4
Corona Handson vol.2 #4
 
PyCharm入門
PyCharm入門PyCharm入門
PyCharm入門
 
Analog Devices の IP コアを使う
Analog Devices の IP コアを使うAnalog Devices の IP コアを使う
Analog Devices の IP コアを使う
 
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
 
PYNQ 祭り: Pmod のプログラミング
PYNQ 祭り: Pmod のプログラミングPYNQ 祭り: Pmod のプログラミング
PYNQ 祭り: Pmod のプログラミング
 
Python & PyConJP 2014 Report
Python & PyConJP 2014 ReportPython & PyConJP 2014 Report
Python & PyConJP 2014 Report
 
A quick tour of the Cysharp OSS
A quick tour of the Cysharp OSSA quick tour of the Cysharp OSS
A quick tour of the Cysharp OSS
 
NextGen Server/Client Architecture - gRPC + Unity + C#
NextGen Server/Client Architecture - gRPC + Unity + C#NextGen Server/Client Architecture - gRPC + Unity + C#
NextGen Server/Client Architecture - gRPC + Unity + C#
 

En vedette

小学生でも分かった気になるiOS8のSize Class
小学生でも分かった気になるiOS8のSize Class小学生でも分かった気になるiOS8のSize Class
小学生でも分かった気になるiOS8のSize Class今城 善矩
 
分散システムにおけるUUID(汎用一意識別子)の利用拡大
分散システムにおけるUUID(汎用一意識別子)の利用拡大分散システムにおけるUUID(汎用一意識別子)の利用拡大
分散システムにおけるUUID(汎用一意識別子)の利用拡大Kazuki Aranami
 
HelsinkiJS meet-up. Dmitry Soshnikov - ECMAScript 6
HelsinkiJS meet-up. Dmitry Soshnikov - ECMAScript 6HelsinkiJS meet-up. Dmitry Soshnikov - ECMAScript 6
HelsinkiJS meet-up. Dmitry Soshnikov - ECMAScript 6Dmitry Soshnikov
 
Uuidはどこまでuuidか試してみた
Uuidはどこまでuuidか試してみたUuidはどこまでuuidか試してみた
Uuidはどこまでuuidか試してみたYu Yamada
 
Open Source and the Internet of Things
Open Source and the Internet of ThingsOpen Source and the Internet of Things
Open Source and the Internet of ThingsBlack Duck by Synopsys
 
Node.js with WebRTC DataChannel
Node.js with WebRTC DataChannelNode.js with WebRTC DataChannel
Node.js with WebRTC DataChannelmganeko
 
Apache NiFi- MiNiFi meetup Slides
Apache NiFi- MiNiFi meetup SlidesApache NiFi- MiNiFi meetup Slides
Apache NiFi- MiNiFi meetup SlidesIsheeta Sanghi
 
Why Zsh is Cooler than Your Shell
Why Zsh is Cooler than Your ShellWhy Zsh is Cooler than Your Shell
Why Zsh is Cooler than Your Shelljaguardesignstudio
 
OSS についてあれこれ
OSS についてあれこれOSS についてあれこれ
OSS についてあれこれTakuto Wada
 

En vedette (11)

小学生でも分かった気になるiOS8のSize Class
小学生でも分かった気になるiOS8のSize Class小学生でも分かった気になるiOS8のSize Class
小学生でも分かった気になるiOS8のSize Class
 
分散システムにおけるUUID(汎用一意識別子)の利用拡大
分散システムにおけるUUID(汎用一意識別子)の利用拡大分散システムにおけるUUID(汎用一意識別子)の利用拡大
分散システムにおけるUUID(汎用一意識別子)の利用拡大
 
From Device to Data Center to Insights
From Device to Data Center to InsightsFrom Device to Data Center to Insights
From Device to Data Center to Insights
 
UUID
UUIDUUID
UUID
 
HelsinkiJS meet-up. Dmitry Soshnikov - ECMAScript 6
HelsinkiJS meet-up. Dmitry Soshnikov - ECMAScript 6HelsinkiJS meet-up. Dmitry Soshnikov - ECMAScript 6
HelsinkiJS meet-up. Dmitry Soshnikov - ECMAScript 6
 
Uuidはどこまでuuidか試してみた
Uuidはどこまでuuidか試してみたUuidはどこまでuuidか試してみた
Uuidはどこまでuuidか試してみた
 
Open Source and the Internet of Things
Open Source and the Internet of ThingsOpen Source and the Internet of Things
Open Source and the Internet of Things
 
Node.js with WebRTC DataChannel
Node.js with WebRTC DataChannelNode.js with WebRTC DataChannel
Node.js with WebRTC DataChannel
 
Apache NiFi- MiNiFi meetup Slides
Apache NiFi- MiNiFi meetup SlidesApache NiFi- MiNiFi meetup Slides
Apache NiFi- MiNiFi meetup Slides
 
Why Zsh is Cooler than Your Shell
Why Zsh is Cooler than Your ShellWhy Zsh is Cooler than Your Shell
Why Zsh is Cooler than Your Shell
 
OSS についてあれこれ
OSS についてあれこれOSS についてあれこれ
OSS についてあれこれ
 

Similaire à ttyrecからGIFアニメを作る話

PythonのGUI_2018 with NSEG
PythonのGUI_2018 with NSEGPythonのGUI_2018 with NSEG
PythonのGUI_2018 with NSEGJun Okazaki
 
一年ツイッター
一年ツイッター一年ツイッター
一年ツイッターXMLProJ2014
 
Pyramid + socket.io 人狼を作ってみた
Pyramid + socket.io 人狼を作ってみたPyramid + socket.io 人狼を作ってみた
Pyramid + socket.io 人狼を作ってみたJunya Hayashi
 
gitを使って、レポジトリの一部抽出forkしてみました
gitを使って、レポジトリの一部抽出forkしてみましたgitを使って、レポジトリの一部抽出forkしてみました
gitを使って、レポジトリの一部抽出forkしてみましたTakako Miyagawa
 
やさしいGitの内部構造 - yapcasia2013
やさしいGitの内部構造 - yapcasia2013やさしいGitの内部構造 - yapcasia2013
やさしいGitの内部構造 - yapcasia2013DQNEO
 
「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of PythonTakanori Suzuki
 
Python用ゲームエンジンPyxelで遊んでみた
Python用ゲームエンジンPyxelで遊んでみたPython用ゲームエンジンPyxelで遊んでみた
Python用ゲームエンジンPyxelで遊んでみたHirofumi Watanabe
 
TFLite_and_PyTorch_Mobile
TFLite_and_PyTorch_MobileTFLite_and_PyTorch_Mobile
TFLite_and_PyTorch_Mobileyusuke shibui
 
211120 他人の書いたPythonスクリプトをステップ実行で理解する
211120 他人の書いたPythonスクリプトをステップ実行で理解する211120 他人の書いたPythonスクリプトをステップ実行で理解する
211120 他人の書いたPythonスクリプトをステップ実行で理解するTakuya Nishimoto
 
とっとるびー第29回発表資料(RICOH THETAの全天球画像を部分転送して遠隔地のOculusでみる)
とっとるびー第29回発表資料(RICOH THETAの全天球画像を部分転送して遠隔地のOculusでみる)とっとるびー第29回発表資料(RICOH THETAの全天球画像を部分転送して遠隔地のOculusでみる)
とっとるびー第29回発表資料(RICOH THETAの全天球画像を部分転送して遠隔地のOculusでみる)mecha mogera
 
スクレイピングとPython
スクレイピングとPythonスクレイピングとPython
スクレイピングとPythonHironori Sekine
 
ゲーム開発者向けPythonセミナー(2018年06月20日)
ゲーム開発者向けPythonセミナー(2018年06月20日)ゲーム開発者向けPythonセミナー(2018年06月20日)
ゲーム開発者向けPythonセミナー(2018年06月20日)Ryo Takahashi
 
Introduction about Tizen on Open Seminor Kagawa 2012
Introduction about Tizen on Open Seminor Kagawa 2012Introduction about Tizen on Open Seminor Kagawa 2012
Introduction about Tizen on Open Seminor Kagawa 2012Yuya Adachi
 
女子美術大学メディアアート演習ⅡB 2012 Spring 第10回 2/2
女子美術大学メディアアート演習ⅡB 2012 Spring 第10回 2/2女子美術大学メディアアート演習ⅡB 2012 Spring 第10回 2/2
女子美術大学メディアアート演習ⅡB 2012 Spring 第10回 2/2Satoru Tokuhisa
 

Similaire à ttyrecからGIFアニメを作る話 (20)

Unreal engine4を使ったVRコンテンツ製作で 120%役に立つtips集+GDC情報をご紹介
Unreal engine4を使ったVRコンテンツ製作で 120%役に立つtips集+GDC情報をご紹介Unreal engine4を使ったVRコンテンツ製作で 120%役に立つtips集+GDC情報をご紹介
Unreal engine4を使ったVRコンテンツ製作で 120%役に立つtips集+GDC情報をご紹介
 
PythonのGUI_2018 with NSEG
PythonのGUI_2018 with NSEGPythonのGUI_2018 with NSEG
PythonのGUI_2018 with NSEG
 
一年ツイッター
一年ツイッター一年ツイッター
一年ツイッター
 
Pyramid + socket.io 人狼を作ってみた
Pyramid + socket.io 人狼を作ってみたPyramid + socket.io 人狼を作ってみた
Pyramid + socket.io 人狼を作ってみた
 
gitを使って、レポジトリの一部抽出forkしてみました
gitを使って、レポジトリの一部抽出forkしてみましたgitを使って、レポジトリの一部抽出forkしてみました
gitを使って、レポジトリの一部抽出forkしてみました
 
やさしいGitの内部構造 - yapcasia2013
やさしいGitの内部構造 - yapcasia2013やさしいGitの内部構造 - yapcasia2013
やさしいGitの内部構造 - yapcasia2013
 
Seeing is Believing
Seeing is BelievingSeeing is Believing
Seeing is Believing
 
210728 mpy
210728 mpy210728 mpy
210728 mpy
 
「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python
 
Gstreamer Basics
Gstreamer BasicsGstreamer Basics
Gstreamer Basics
 
Gnomeとdogtai
GnomeとdogtaiGnomeとdogtai
Gnomeとdogtai
 
Python用ゲームエンジンPyxelで遊んでみた
Python用ゲームエンジンPyxelで遊んでみたPython用ゲームエンジンPyxelで遊んでみた
Python用ゲームエンジンPyxelで遊んでみた
 
Cyma gdc2011 tabc報告
Cyma gdc2011 tabc報告Cyma gdc2011 tabc報告
Cyma gdc2011 tabc報告
 
TFLite_and_PyTorch_Mobile
TFLite_and_PyTorch_MobileTFLite_and_PyTorch_Mobile
TFLite_and_PyTorch_Mobile
 
211120 他人の書いたPythonスクリプトをステップ実行で理解する
211120 他人の書いたPythonスクリプトをステップ実行で理解する211120 他人の書いたPythonスクリプトをステップ実行で理解する
211120 他人の書いたPythonスクリプトをステップ実行で理解する
 
とっとるびー第29回発表資料(RICOH THETAの全天球画像を部分転送して遠隔地のOculusでみる)
とっとるびー第29回発表資料(RICOH THETAの全天球画像を部分転送して遠隔地のOculusでみる)とっとるびー第29回発表資料(RICOH THETAの全天球画像を部分転送して遠隔地のOculusでみる)
とっとるびー第29回発表資料(RICOH THETAの全天球画像を部分転送して遠隔地のOculusでみる)
 
スクレイピングとPython
スクレイピングとPythonスクレイピングとPython
スクレイピングとPython
 
ゲーム開発者向けPythonセミナー(2018年06月20日)
ゲーム開発者向けPythonセミナー(2018年06月20日)ゲーム開発者向けPythonセミナー(2018年06月20日)
ゲーム開発者向けPythonセミナー(2018年06月20日)
 
Introduction about Tizen on Open Seminor Kagawa 2012
Introduction about Tizen on Open Seminor Kagawa 2012Introduction about Tizen on Open Seminor Kagawa 2012
Introduction about Tizen on Open Seminor Kagawa 2012
 
女子美術大学メディアアート演習ⅡB 2012 Spring 第10回 2/2
女子美術大学メディアアート演習ⅡB 2012 Spring 第10回 2/2女子美術大学メディアアート演習ⅡB 2012 Spring 第10回 2/2
女子美術大学メディアアート演習ⅡB 2012 Spring 第10回 2/2
 

Plus de Yoshihiro Sugi

ドルヲタ活動報告
ドルヲタ活動報告ドルヲタ活動報告
ドルヲタ活動報告Yoshihiro Sugi
 
ドルヲタを支える技術 2
ドルヲタを支える技術 2ドルヲタを支える技術 2
ドルヲタを支える技術 2Yoshihiro Sugi
 
ドルヲタを支える技術
ドルヲタを支える技術ドルヲタを支える技術
ドルヲタを支える技術Yoshihiro Sugi
 
全裸でワンライナー(仮)
全裸でワンライナー(仮)全裸でワンライナー(仮)
全裸でワンライナー(仮)Yoshihiro Sugi
 
ワンライナーのための何か(仮)
ワンライナーのための何か(仮)ワンライナーのための何か(仮)
ワンライナーのための何か(仮)Yoshihiro Sugi
 

Plus de Yoshihiro Sugi (12)

ドルヲタ活動報告
ドルヲタ活動報告ドルヲタ活動報告
ドルヲタ活動報告
 
ドルヲタを支える技術 2
ドルヲタを支える技術 2ドルヲタを支える技術 2
ドルヲタを支える技術 2
 
ドルヲタを支える技術
ドルヲタを支える技術ドルヲタを支える技術
ドルヲタを支える技術
 
Hokkaido.pm #6 LT
Hokkaido.pm #6 LTHokkaido.pm #6 LT
Hokkaido.pm #6 LT
 
Yokohama.pm #8 LT
Yokohama.pm #8 LTYokohama.pm #8 LT
Yokohama.pm #8 LT
 
TerminalでTwitter
TerminalでTwitterTerminalでTwitter
TerminalでTwitter
 
全裸botと私
全裸botと私全裸botと私
全裸botと私
 
僕とjava-ja
僕とjava-ja僕とjava-ja
僕とjava-ja
 
全裸でワンライナー(仮)
全裸でワンライナー(仮)全裸でワンライナー(仮)
全裸でワンライナー(仮)
 
ワンライナーのための何か(仮)
ワンライナーのための何か(仮)ワンライナーのための何か(仮)
ワンライナーのための何か(仮)
 
Genesis200904
Genesis200904Genesis200904
Genesis200904
 
Genesis200902 sugyan
Genesis200902 sugyanGenesis200902 sugyan
Genesis200902 sugyan
 

ttyrecからGIFアニメを作る話