# <span style="font-variant:small-caps">Terminal VIDeo player</span>

<img align="left" width="192" src="../tvid.min.svg" alt="tvid logo" />

`tvid` は Rust で実装されたターミナル向け動画プレーヤーです。FFmpeg を利用して映像・音声・字幕をデコードし、端末上に直接描画します。オーバーレイ UI、プレイリストビュー、キーボード / マウス操作に対応しています。

---

*Translations (by ChatGPT):*<br />
[en-us/English](../README.md) | [zh-cn/简体中文](README.zh-cn.md) | [zh-tw/繁體中文](README.zh-tw.md) | **ja-jp/日本語** | [fr-fr/Français](README.fr-fr.md) | [de-de/Deutsch](README.de-de.md) | [es-es/Español](README.es-es.md) | [ko-kr/한국어](README.ko-kr.md) | [pt-br/Português (Brasil)](README.pt-br.md) | [ru-ru/Русский](README.ru-ru.md) | [it-it/Italiano](README.it-it.md) | [tr-tr/Türkçe](README.tr-tr.md) | [vi-vn/Tiếng Việt](README.vi-vn.md)

<br clear="left"/>

---

> このプロジェクトは開発中です。挙動や UI は将来変更される可能性があります。

## 特徴

- **FFmpeg がサポートする多くの形式を再生可能**
- **音声出力と字幕描画**（ASS / テキスト）
- **複数の描画モード**：フルカラー、256 色、グレースケール、ASCII アート、Unicode 点字
- **任意の画像プロトコル**：Sixel と OSC 1337（iTerm2 風）
- **ターミナルオーバーレイ UI**：進捗バー、メッセージ、ヘルプパネルなど
- **プレイリスト機能**：
  - コマンドライン引数で複数ファイルを指定可能
  - メモリ上のプレイリスト（前後移動、ループ再生）
  - オプションのプレイリストサイドバー
- **キーボード / マウス操作** によるシークや選択
- `~/.config/tvid/` 配下の **設定ファイルとデフォルトプレイリスト** を利用
- **ローカライズされた UI**（システムのロケール）と **Unifont** によるグリフ補完

## 必要環境

- Rust 開発環境（nightly は不要）
- システムに FFmpeg ライブラリおよび開発ヘッダがインストールされていること
  - Debian / Ubuntu：`sudo apt install ffmpeg libavcodec-dev libavformat-dev libavutil-dev libswscale-dev libswresample-dev`
  - Arch：`sudo pacman -S ffmpeg`

## ビルドと実行

### Cargo Install を使用

Cargo で `tvid` を直接インストールできます：

```sh
cargo install tvid
```

オプション機能はビルド時に有効化します。既定は `ffmpeg`、`i18n`、`config`、`audio`、`video`、`subtitle`、`unicode`、`unifont` です。

```sh
cargo install tvid --features sixel,osc1337
# 既定機能を無効化して最小構成にする場合
cargo install tvid --no-default-features --features ffmpeg,video
```

### 手動ビルド

1. リポジトリの取得：

   ```sh
   git clone https://github.com/copi143/tvid.git
   cd tvid
   ```

2. ビルド：

   ```sh
   cargo build --release
   ```

   オプション機能はビルド時に有効化します。既定は `ffmpeg`、`i18n`、`config`、`audio`、`video`、`subtitle`、`unicode`、`unifont` です。

   ```sh
   cargo build --release --features sixel,osc1337
   # 既定機能を無効化して最小構成にする場合
   cargo build --release --no-default-features --features ffmpeg,video
   ```

3. プレーヤーの実行：

   ```sh
   cargo run -- <入力1> [入力2] [...]
   # あるいはビルド済みバイナリを使用
   target/release/tvid <入力1> [入力2] [...]
   ```

## 使い方

```sh
tvid <入力> [入力] ...
```

コマンドラインで渡した各ファイルはプレイリストの 1 項目として扱われます。

### 設定ファイルとプレイリスト

初回起動時に、次のディレクトリとファイルが自動的に作成されます：

- 設定ディレクトリ：`~/.config/tvid/`
- 設定ファイル：`tvid.toml`
  - 例：
    - `volume`（`0`〜`200`）：初期音量
    - `looping`（`true` / `false`）：プレイリストをループ再生するかどうか
- プレイリストファイル：`playlist.txt`
  - 各行がファイルパスとして扱われます
  - 空行と `#` で始まる行は無視されます

起動時に `tvid` はまず `playlist.txt` からプレイリストを読み込み、その後コマンドライン引数で指定されたファイルを末尾に追加します。

### キー操作 / マウス操作

再生の基本操作：

- `Space` – 再生 / 一時停止
- `q` – プレーヤーを終了
- 矢印キー – シーク
  - `←` – 5 秒巻き戻し
  - `→` – 5 秒早送り
  - `↑` – 30 秒巻き戻し
  - `↓` – 30 秒早送り

プレイリスト関連：

- `n` – 次の項目を再生
- `l` – プレイリストサイドバーの表示 / 非表示
- プレイリストパネル内：
  - `w` / `↑` – カーソルを上へ
  - `s` / `↓` – カーソルを下へ
  - `Space` / `Enter` – 選択中の項目を再生
  - `q` – プレイリストパネルを閉じる

UI など：

- `f` – ファイルセレクタパネルを開く
- `c` – カラーモードを切り替える
- 進捗バー：
  - 画面下部の進捗バー付近を左クリックすると、その位置にシーク
  - 左ボタンを押しながらドラッグするとスクラブ（ドラッグシーク）

> プロジェクトは開発中のため、今後ショートカットや UI が追加・変更される可能性があります。

### コマンドモード

`/` を押してコマンド入力を開きます。操作は以下の通りです：

- `Enter` – コマンド実行
- `Esc` – キャンセル
- `Tab` – 自動補完（コマンドや引数）
- `↑` / `↓` – コマンド履歴

例：

- `/seek +5`
- `/volume 80`
- `/lang zh-cn`

利用可能な言語コード：`en-us`、`zh-cn`、`zh-tw`、`ja-jp`、`fr-fr`、`de-de`、`es-es`。: `en-us`, `zh-cn`, `zh-tw`, `ja-jp`, `fr-fr`, `de-de`, `es-es`, `ko-kr`, `pt-br`, `ru-ru`, `it-it`, `tr-tr`, `vi-vn`

## トラブルシューティング

- ビルド時のエラー：
  - システムに FFmpeg 本体と開発用ヘッダ（development headers）が正しくインストールされていることを確認してください。
- 起動時に `error while loading shared libraries` が出る：
  - プログラムをビルドした同じマシンで実行していることを確認してください。他のマシンでは FFmpeg のバージョンが異なる場合があります。
  - FFmpeg ランタイムライブラリが正しく見つかるようになっているか確認してください（例：VLC などの FFmpeg を使用する他のアプリケーションが正常に動作するか）。
- 起動時に `av init failed` と表示される：
  - FFmpeg が正しく動作するか確認してください。
- 起動後に `No input files.` と表示される：
  - 以下を確認してください：
    - コマンドラインで少なくとも 1 つの再生可能な動画／音声ファイルを渡している、または
    - `~/.config/tvid/playlist.txt` に有効なパスが書かれており、ファイルにアクセス可能である。

## ライセンス

> ライセンスの詳細については、リポジトリ直下の `README.md` に記載されている License セクション（英語）を参照してください。
