{"id":21156315,"url":"https://github.com/vitroid/trainscanner","last_synced_at":"2025-07-09T12:32:26.516Z","repository":{"id":46210712,"uuid":"4699191","full_name":"vitroid/TrainScanner","owner":"vitroid","description":"Convert a video to a slitscanned train image.","archived":false,"fork":false,"pushed_at":"2024-11-12T02:40:58.000Z","size":44216,"stargazers_count":17,"open_issues_count":6,"forks_count":3,"subscribers_count":7,"default_branch":"master","last_synced_at":"2024-11-12T03:28:22.013Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vitroid.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2012-06-18T09:17:56.000Z","updated_at":"2024-11-12T02:41:03.000Z","dependencies_parsed_at":"2023-02-08T19:46:29.768Z","dependency_job_id":null,"html_url":"https://github.com/vitroid/TrainScanner","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vitroid%2FTrainScanner","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vitroid%2FTrainScanner/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vitroid%2FTrainScanner/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vitroid%2FTrainScanner/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vitroid","download_url":"https://codeload.github.com/vitroid/TrainScanner/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225542170,"owners_count":17485840,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-20T11:42:36.786Z","updated_at":"2025-07-09T12:32:26.500Z","avatar_url":"https://github.com/vitroid.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Banner](https://farm6.staticflickr.com/5763/30971813460_37996db7bb_o_d.jpg)\n\nVersion 0.28.1\n\n# TrainScanner の使い方\n\n## インストール\n\nTerminal から以下のコマンドでインストール・起動して下さい。\n\n```shell\npip install trainscanner\ntrainscanner\n```\n\n開発中の版を試してみたい場合はこちら。\n\n```\npip install git+https://github.com/vitroid/TrainScanner.git\n```\n\nIntel Macなど、PyQt6が動かない場合はこちらをどうぞ。\n\n```\npip install git+https://github.com/vitroid/TrainScanner.git@PyQt5compat2\n```\n\n## ドキュメント\n\n[Wiki](https://github.com/vitroid/TrainScanner/wiki)\n\n## 前処理: 手ぶれ補正\n\n手持ち撮影でもきれいにつながるように、`trainscanner`で列車をつなぐ前に、手ぶれをとりのぞくツールです。\n\n```shell\nantishake\n```\n\nムービーが画像ファイルに展開されるので、それなりのディスク容量が必要です。生成した画像ファイルの束は、ディレクトリごと`trainscanner`で読みこめます。\n\n## 後処理: 各種コンバータ\n\nTrainScanner で作成した画像は巨大でしかも長大なので、そのままでは取り扱いにくいため、見易いようにいろんな変換プログラムを準備しました。\n\n```shell\nts_converter\n```\n\n### 拡張プラグイン\n\npynojectorをインストールすると、ts_converterに機能が追加されます。\n\n```\npip install https://github.com/vitroid/pynojector.git\n```\n\n## コマンドラインからの利用\n\n### `helicify`: 長い画像をらせんにするツール\n\n長い画像を、定型用紙に入るように「円筒に巻く」プログラムです。\n\n```\nhelicify longimage.png\n```\n\n```\nusage: helix.py [-h] [--output OUTPUT] [--aspect ASPECT] [--head-right]\n                [--width WIDTH]\n                image_path\n\nらせん画像を作る\n\npositional arguments:\n  image_path            入力ファイルのパス\n\noptions:\n  -h, --help            show this help message and exit\n  --output OUTPUT, -o OUTPUT\n                        出力ファイルのパス\n  --aspect ASPECT, -a ASPECT\n                        アスペクト比-- 0.1,10\n  --head-right, -R      列車は右向きに進む\n  --width WIDTH, -W WIDTH\n                        画像の幅 (ピクセル, 変更しないなら0)-- 0,10000\n\n```\n\n### `rectify`: 長い画像を何段かに切りわけるツール\n\n長い画像を、定型用紙に入るように「円筒に巻く」プログラムです。こちらは、画像がななめにならない代わり、円筒をのりづけする時にずらす必要があります。\n\n```\nrectify longimage.png\n```\n\n```\nusage: rect.py [-h] [--output OUTPUT] [--aspect ASPECT] [--overlap OVERLAP]\n               [--head-right] [--thumbnail] [--width WIDTH]\n               image_path\n\nぶつ切り山積み\n\npositional arguments:\n  image_path            入力ファイルのパス\n\noptions:\n  -h, --help            show this help message and exit\n  --output OUTPUT, -o OUTPUT\n                        出力ファイルのパス\n  --aspect ASPECT, -a ASPECT\n                        アスペクト比-- 0.1,10\n  --overlap OVERLAP, -l OVERLAP\n                        端の重複部分の幅 (パーセント)-- 0,100\n  --head-right, -R      列車は右向きに進む\n  --thumbnail, -t       Add a thumbnail image (Hans Ruijter's style)\n  --width WIDTH, -W WIDTH\n                        画像の幅 (ピクセル, 変更しないなら0)-- 0,10000\n\n```\n\n### `movify`: スクロール動画を生成するツール\n\nスクロール動画を生成します。\n\n```shell\nmovify longimage.png\n```\n\n```\nusage: movie.py [-h] [--output OUTPUT] [--duration DURATION] [--height HEIGHT]\n                [--width WIDTH] [--head-right] [--fps FPS] [--crf CRF] [--png]\n                [--alternating] [--accel] [--encoder ENCODER] [--thumbnail]\n                [--imageseq]\n                image_path\n\n列車の長い写真からムービーを作る\n\npositional arguments:\n  image_path            入力ファイルのパス\n\noptions:\n  -h, --help            show this help message and exit\n  --output OUTPUT, -o OUTPUT\n                        出力ファイルのパス\n  --duration DURATION, -d DURATION\n                        ムービーの尺 (秒)-- 10,1000\n  --height HEIGHT, -H HEIGHT\n                        ムービーの高さ (pixels)-- 100,4096\n  --width WIDTH, -W WIDTH\n                        ムービーの幅 (pixels)-- 100,4096\n  --head-right, -R      列車は右向きに進む\n  --fps FPS, -r FPS     フレームレート (fps)-- 1,120\n  --crf CRF, -c CRF     CRF (Constant Rate Factor) -- 16,30\n  --png, -p             高画質な中間ファイル\n  --alternating, -a     行ったり来たり\n  --accel, -A           加速\n  --encoder ENCODER, -e ENCODER\n                        mp4エンコーダ\n  --thumbnail, -t       Add a thumbnail (Yamako style)\n  --imageseq, -i        PNG画像のセットを生成する\n\n```\n\n\u003c!-- ### `shakereduction.py`: 手振れ補正 (試験中)\n\nTrainScanner とおなじしくみを使って，ビデオの手振れを除くツールです．列車の場所ではなく，背景の一区画を`--focus`オプションで選ぶと，その部分が動かなくなるように，各コマを縦横にずらしたしたムービーを作成します．\n\n```\n./shakereduction.py -f L R T B -S skipframes filename.mov\n```\n\n今のところコマンドラインでの利用のみです．手振れだけでなく，たとえば柱に固定して撮影したけど，列車の振動でけっこう柱が揺れた場合(この場合，けっこう大きな加速度が加わるので，手振れよりも実は修正が大変です)にも使えます．\n\nTrainScanner は基本的に三脚での撮影を前提としています．`shakereduction.py`を使っても，水平が傾いたりする場合までは対応できません． --\u003e\n\n### _2020-7-15 最近確認していません。動くかどうか保証できません_\n\n`TrainScanner.app`は、`pass1.py`と`stitch.py`という 2 つのプログラムを呼びだすためのラッパーで、これらのプログラムは単独でも動作します。列車の移動量の検出がうまくいかなかった場合など、手直ししたい場合には、`tsconf`ファイルと`tspos`ファイルを手で修正して、より良い結果を得ることもできます。\n\nそれぞれのコマンドには多数のオプションがあります。`-h`オプションを付けて、使い方を見て下さい。ほとんどのオプションは`trainscanner_gui.py` (アプリケーション名は`TrainScanner.app`, `TrainScanner.exe`)上で指定できますので、グラフィック表示ができる環境であれば、GUI を使うことをお勧めします。ただし、`tsconf`ファイルと`tspos`ファイルを手で修正した場合は`stitch.py`を使いたくなるかもしれません。\n\n### `trainscanner_pass1`: 照合プログラム\n\nビデオを読みこみ、列車の移動を検出し、移動量を`.tspos`という名前のファイルに出力します。\n\n```\ntrainscanner_pass1 video.mov\n```\n\n### `trainscanner_stitch`: 結合プログラム\n\npass1.py の出力に従い、映像を連結して 1 枚の大きな写真を作ります。通常は、以下のように、pass1.py が出力した`.tsconf`ファイルを読みこんで使用します。\n\n```\ntrainscanner_stitch @video.mov.12345.tsconf\n```\n\n`@`マークは、コマンドラインオプションをファイルからインクルードすることを意味します。この後ろに、さらにオプションを追加することで、スリット位置やフレーム間のぼかし幅を調節できます。例えば、あとからスリット位置と幅をそれぞれ 220 と 1.5 に変えたい場合は、\n\n```\ntrainscanner_stitch @video.mov.12345.tsconf -s 220 -w 1.5\n```\n\nのようにします。GUI を使う場合には、設定を変える度に pass1.py も実行せざるをえませんが、stitch.py を直接使えば、よりすばやく結果を得られます。\n\n### `trainscanner`: 統合ユーザーインターフェイス\n\n`trainscanner_pass1`と`trainscanner_stitch`を統合し、オプションを対話的に設定できる UI を備えた TrainScanner の本体です。Windows の exe ファイルや macOS の App はこれをパッケージ化したものです。\n\n\u003c!-- ## Raspberry PI での使用\n\nカメラの解像度を低めにすれば、RPi の処理能力でもかなりの速度で処理できるはずです。ただし、メモリ不足が深刻でしょうね。TrainScanner の処理のなかで一番メモリを必要とするのは、`stitch.py`の行っている、一枚の大きな写真を作るプロセスです。原理的に、大きな画像全体を非圧縮のまま一旦メモリに入れない限り、その大きさの写真が作れないからです。この問題を回避するために、小さな写真の断片でおおきな写真を表現する画像フォーマット[tiledimage](https://github.com/vitroid/tiledimage)を製作しました。 --\u003e\n\n## Revision History\n\n# 変更履歴\n\n## [0.16.1] - 2025-05-12\n\n### 追加\n\n- movify および movify2 のエントリを追加\n\n## [0.16.0] - 2025-05-12\n\n### 追加\n\n- GUI に新しいラジオボタンを追加\n- 横スクロール動画の生成機能を強化\n- 画像処理のオプションに右端を先頭にする機能を追加\n- 進捗バーの更新を改善\n- ffmpeg の存在確認に基づいてボタンの有効/無効を制御するロジックを調整\n\n## [0.15.0] - 2025-05-09\n\n### 変更\n\n- converter のパスを ts_conv から trainscanner.converter に変更\n- 動画生成機能の高さ調整ロジックを改善\n\n## [0.14.3] - 2025-05-08\n\n### 変更\n\n- Python の依存関係を 3.11 に変更\n- ホームページの URL を追加\n\n## [0.14.2] - 2025-05-08\n\n### 変更\n\n- Python の依存関係を 3.10 に変更\n- Linux 環境でのビデオモジュールのインポートを修正\n\n## [0.14.1] - 2025-05-08\n\n### 追加\n\n- scikit-video パッケージを追加\n\n### 修正\n\n- qrangeslider.py でのイベント処理において、座標を整数に変換する修正\n\n## [0.13.2] - 2023-01-09\n\n### 修正\n\n- tsconf ファイルを開くときに発生するエラーを修正\n- Apple M1 対応の改善\n\n## [0.13] - 2023-01-04\n\n### 変更\n\n- PyQt6 への移行\n\n## [0.12.0] - 2020-07-15\n\n### 修正\n\n- パスに空白が含まれる場合のバグを修正\n\n### 変更\n\n- コマンドラインオプションの更新\n\n## [0.10] - 2017-04-13\n\n### 追加\n\n- Hansify コマンドを追加\n\n## [0.7.3] - 2016-12-29\n\n### 追加\n\n- QRangeSlider の実装\n\n### 修正\n\n- 後半の thumbnail が無視される問題を解決\n\n## [0.5.1] - 2016-11-27\n\n### 変更\n\n- スライダーの高さを変更\n\n## [0.5.0] - 2016-11-25\n\n### 追加\n\n- 矩形フォーマットの導入\n\n### 変更\n\n- Python3 へのアップグレード\n- Windows 対応の改善\n\n## [0.4.0] - 2016-11-20\n\n### 追加\n\n- tsconf ファイルから設定を継承する機能\n\n### 変更\n\n- ジェネレーターの簡略化\n\n## [0.3.0] - 2016-11-13\n\n### 追加\n\n- アルファ版リリース\n\n### 変更\n\n- チュートリアルの更新\n\n## [0.2.0] - 2016-10-16\n\n### 追加\n\n- モーション検出エリア（フォーカスエリア）の指定機能\n- スクロールバー付き GUI プロトタイプ\n- 上下のクロップ機能\n\n## [0.1.0] - 2016-08-31\n\n### 追加\n\n- Python2+OpenCV2 による完全な書き直し\n\n## Memo/Reference\n\n- [Python3 with OpenCV3](https://hackerslog.net/posts/softwares/opencv/opencv-install-with-python-on-mac/); downloading HEAD of openCV3 takes VERY long time.\n- [Windows/Python3/OpenCV3/PyQt4/Anaconda](http://qiita.com/sugurunatsuno/items/ce3c0d486bdc93688192)\n- [failed to build exe on Windows?](http://stackoverflow.com/questions/37815371/pyinstaller-failed-to-execute-script-pyi-rth-pkgres-and-missing-packages)\n- Flickr account for TrainScanner development: [TrainScanner](https://www.flickr.com/photos/149573560@N03)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvitroid%2Ftrainscanner","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvitroid%2Ftrainscanner","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvitroid%2Ftrainscanner/lists"}