個人用のシェルスクリプト集です。画像・動画の一括変換、整理、通知、環境設定、ZFS 変換などを自動化します。多くのスクリプトは -h または --help で使い方を表示します。
現在の各スクリプトは、実行時に「追加導入が必要なコマンド」の事前チェックを行い、不足している場合はエラーメッセージを表示して終了します。
- 概要
- 動作環境と実行前の準備
- スクリプト一覧(内容・依存関係・使い方)
- 共通の使い方と例
- 注意事項(重要)
- 貢献・ライセンス
このリポジトリには、以下のカテゴリのスクリプトが含まれます。
- 画像変換・整理(ImageMagick / zopflipng)
- 動画エンコード・整理(ffmpeg / ffprobe)
- APNG アニメーション最適化
- 通知(Discord Webhook)
- GNOME 壁紙スライドショー生成と適用(gsettings / apt)
- システム設定(GUI 起動ターゲット切替、/usr/local/bin へのリンク展開)
- ZFS データセット変換(zfs)
- Demucs 前後処理(音源分割・分離後の連結・マルチトラック WebM 生成)
- 動画メタデータ更新(mkvpropedit)
- 対応 OS: Linux(主に Ubuntu 系を想定)。WSL や他ディストリでも動くものがあります。
- シェル: bash もしくは sh(各ファイルの先頭 shebang を参照)。
- 実行権限を付与してください。
chmod +x *.sh主な依存コマンド(スクリプトにより異なる)
- ffmpeg / ffprobe, ffplay, v4l2-ctl, arecord
- ImageMagick の convert / magick / compare
- zopflipng, apngdis, apngasm
- mkvpropedit(mkvtoolnix)
- curl, git, unzip
- parallel(GNU Parallel)
- shred
- rustup, cargo, meson, ninja, cmake, make, gcc 等(HandBrake ビルド)
- gsettings, apt, systemctl(GNOME / Ubuntu 関連)
- zfs(ZFS 関連)
- xdg-user-dir, xdg-open(環境依存・あると便利)
-
事前分割(長尺対策・安定化)
-
内容: 長尺の音源を一定秒数で分割(デフォルト 600 秒)。Demucs 実行を安定化。
-
使い方:
./Demucs_prepare_segments.sh /path/to/audio -b -d 600 -f wav_16bit
-
Demucs 分離の実行
-
例: 分割済みファイル群に対し demucs を実行(モデルは環境に合わせて選択)
demucs -n htdemucs_ft split_*
-
-
分離結果の連結(separated/htdemucs_ft/ 内で実行)
-
内容: split_ベース名_XXX ディレクトリから vocals.flac / minus_vocals.flac をベース名ごとに連結。
-
使い方:
cd separated/htdemucs_ft ../../Demucs_concat_flac_segments.sh
-
マルチトラック WebM の生成(任意)
-
内容: WebM ファイルに対応する vocals.flac / minus_vocals.flac を Opus トラックとして追加したマルチトラック WebM を生成。
-
使い方:
./Demucs_create_multitrack_webm.sh video.webm
- 内容: FFmpeg で指定ディレクトリ内の音声ファイルを一定秒数で分割。Demucs 前処理として長尺音源を分割する用途を想定。
- 使い方:
./Demucs_prepare_segments.sh <入力ディレクトリ> [ファイル名]、または-bで一括処理。-h/--helpでヘルプ表示。 - 依存: ffmpeg。
- 主なオプション:
-b, --batch一括処理-d, --duration <秒>分割時間(既定: 600)-f, --format <形式>出力形式(flac/wav_16bit/copy、既定: wav_16bit)-p, --prefix <接頭辞>接頭辞(既定: split_)-r, --delete-original成功時に元ファイルを削除(既定: オン)--no-delete元ファイルを削除しない-i, --install-ffmpegsudo apt で ffmpeg をインストール
-
内容:
separated/htdemucs_ft/直下で、split_ベース名_XXXディレクトリ群に含まれるvocals.flacとminus_vocals.flacを、ベース名ごとに連結。Demucs 分離後の後処理として使用。 -
使い方:
cd separated/htdemucs_ft ../../Demucs_concat_flac_segments.sh-hまたは--helpでヘルプ表示。 -
依存: ffmpeg, sort (GNU sort の
sort -V)。 -
備考: 連結後、元の分割ディレクトリを削除するか確認プロンプトが表示されます。
- 内容: WebM ファイルに対応する
vocals.flac/minus_vocals.flacを Opus オーディオストリームとして追加したマルチトラック WebM(*_full_multitrack.webm)を生成。 - 使い方:
./Demucs_create_multitrack_webm.sh <WebMファイル1> [<WebMファイル2> ...]。-h/--helpで説明。 - 依存: ffmpeg, ffprobe, wc。
- 備考:
separated/htdemucs_ft/<ファイル名>_vocals.flacおよび_minus_vocals.flacが必要です。
- 内容: カレントディレクトリの PNG を
zopflipng -mで最適化(上書き)。 - 使い方: 引数なしで実行。
-h/--helpでヘルプ。 - 依存: zopflipng。
- 内容: 対話式のキャプチャ支援。動画デバイス/解像度/フレームレート、音声デバイス、コーデック(H.264/AV1/VP9、FLAC/Opus/MP3)を選んで「録画」または「プレビュー」を実行。
- 使い方: 引数なしで実行して選択を進める。
-h/--helpで説明。 - 依存: v4l2-ctl, arecord, ffmpeg, ffplay, awk/grep/sed。
- 内容:
.env(同ディレクトリ)からDISCORD_WEBHOOK_URLを読み込み、引数のメッセージを Discord Webhook へ送信。 - 使い方:
./Discord_Message.sh [オプション] メッセージ...(複数引数は改行連結)。-h/--helpで説明。-m,--mentionオプションを付けると、メッセージの先頭にメンションを自動で追加します。- メッセージ本文中に
@meまたは<@me>がある場合、自動的に設定された自分のDiscordユーザーIDに置換されます。 -d,--dry-runオプションで、実際には送信せず送信内容のプレビューを確認できます。
- 依存: curl。
- 設定:
.envにDISCORD_WEBHOOK_URL="https://discord.com/api/webhooks/..."を記載。- メンション用のIDは
.envのDISCORD_USER_ID、もしくは Git のグローバル設定git config --global discord.useridに保存して利用できます。
- メンション用のIDは
- 内容: 指定拡張子の動画を HEVC(Intel QSV: hevc_qsv)で一括エンコード。既に HEVC のファイルはスキップ。メタデータを保持し、元ファイルは削除。
- 使い方:
./ffmpegbulkEncode.sh <拡張子> [出力フォルダ](例:mov ffmpeg)。-h/--helpで説明。 - 依存: ffmpeg, ffprobe(QSV 利用環境を推奨)。
- 備考: 一時フォルダに
/mnt/ramdisk/ffmpegがあれば利用(なければ/tmp/ffmpeg)。終了時に Koa_Discord_Message.sh で通知。
- 内容: カレント以下の全「ファイル」を
shred -uvzで復元不能に削除(ディレクトリ構造は残る)。実行前にyes確認あり。 - 使い方: 引数なしで実行。
-h/--helpで説明。 - 依存: shred。
- 注意: 取り返しがつきません。テスト用ディレクトリで動作確認してください。
- 内容: Gboard と Google 日本語入力の辞書形式を相互変換。TSVテキストだけでなく、
dictionary.txtを含む ZIP 入力にも対応。 - 使い方:
./Convert-GboardDictionary.sh <辞書ファイルまたはZIP>。-h/--helpで説明。 - 依存: sed、(ZIP入力時)unzip。
- 備考: ZIP入力時は
xdg-user-dirがあればダウンロードフォルダへ、なければ~/Downloadsへ出力。
- 内容: 指定ファイル内の
\tja-JPを\t名詞\tに置換。_convertを付けた新ファイルとして出力。 - 使い方:
./GboardConvert.sh <ファイルパス>。-h/--helpで説明。 - 依存: sed。
- 内容: 指定フォルダの画像から GNOME 壁紙用スライドショー XML を生成し、
gsettingsで適用。gnome-tweaks未導入ならaptでインストールを試行。 - 使い方:
./GNOME_create_slideshow.sh <画像フォルダ>。-h/--helpで説明。 - 依存: find, gsettings,(必要に応じて)apt, gnome-tweaks。
- 注意:
sudoが必要になる場合があります。Ubuntu 系想定です。
- 内容: 指定拡張子の動画のうち HEVC でないものを出力フォルダへ移動(HEVC のものはスキップ)。
- 使い方:
./h264Move.sh <拡張子> [出力フォルダ](デフォルトMove)。-h/--help。 - 依存: ffprobe, bash。
- 備考: 終了時に Koa_Discord_Message.sh で通知。
- 内容: HandBrake の Windows 向け CUI を Linux 上でクロスビルドするための環境構築とビルド(rustup/cargo、MinGW、依存関係導入、リポジトリ clone, build)。
- 使い方: 引数なしで実行。
-h/--helpで説明。 - 依存: apt, git, rustup/cargo, cmake, ninja, meson, gcc 等。ネットワークと時間が必要。
sudo必須。
- 内容: カレントの jpg/jpeg/png/bmp を WebP(quality=70)へ変換し、元ファイルを削除。タイムスタンプ維持。
- 使い方: 引数なしで実行。
-h/--helpで説明。 - 依存: ImageMagick(convert)。
- 備考: 終了時に Koa_Discord_Message.sh で通知。
- 内容: カレントで 180 日以上前更新の jpg を抽出し、
ls180.txtに追記。全ファイル一覧はlsフル.txtに保存(変換は行わないテスト版)。 - 使い方: 引数なし。
-h/--helpで説明。 - 備考: 終了時に Koa_Discord_Message.sh で通知。
- 内容: 180 日以上前更新の jpg/jpeg/png/bmp を WebP(quality=90)へ変換し、元ファイルを削除。1回のディスクスキャンで「全ファイル数」「拡張子対象数」「変換対象数」の統計を取得・表示し、効率的に処理する。タイムスタンプ維持。
- 使い方: 引数なし。
-h/--helpで説明。 - 依存: ImageMagick(magick), GNU Parallel(parallel), awk, find。
- 備考: 一時ファイルを
/tmpに作成して処理。終了時に [Koa_Discord_Message.sh]Koa_Discord_Message.sh) で詳細な統計情報を通知する。
- 内容: 指定フォルダ内のファイル・隠しファイルを 1 つ上の階層(カレント)へ移動後、空になったフォルダを削除。
- 使い方:
./MoveParentFolder.sh <対象フォルダ>。-h/--helpで説明。 - 注意: 上書きの可能性に留意してください(mv のオプション変更で安全化可能)。
- 内容: APNG ファイルを分解し、類似した重複フレーム(連続フレームおよびループ始終端)を削除して軽量化・最適化します。処理途中でフォルダを開き、手動でのフレーム削除も可能です。
- 使い方:
- 最適化版の作成:
./optimize_apng.sh <入力ファイル.png> - 適用(上書き):
./optimize_apng.sh -d(カレントディレクトリの*-optimize.apngを元ファイルに適用)
- 最適化版の作成:
- 依存: apngdis, apngasm, imagemagick (compare), xdg-open
- 内容: 直下サブディレクトリを列挙し、各ディレクトリ内で指定スクリプトを同じ引数で実行。
- 使い方:
./RunSubfolder.sh <実行スクリプト> [引数...]。-h/--help。
- 内容: 対話式で Ubuntu のデフォルト起動ターゲットを GUI(graphical.target)/ CUI(multi-user.target)に切り替え。
- 使い方: 引数なしで実行し、
e(有効)/d(無効)を入力。 - 依存: systemd(systemctl), sudo。
- 内容: このディレクトリにある
.shへのシンボリックリンクを/usr/local/binに展開・削除するインストーラ。リンク名はKoa_*.sh。- インストール時、
.envファイルが存在しない場合に、GitHub CLI (gh) を使って Secret Gist から自動的に設定ファイルを復元・ダウンロードする機能があります。
- インストール時、
- 使い方:
sudo ./SETUP.SH -i(インストール)、sudo ./SETUP.SH -u(アンインストール)、-h/--help。 - 依存: readlink, find, ln, gh(オプション)。
sudoが必要。 - 備考:
- 自分の GitHub アカウントに
.env.homebrew-scriptsという名前で.envの内容を保存した Secret Gist を作成し、その ID を初回インストール時に入力すると、次回以降や別環境へのクローン時には完全に自動で.envが復元され、Discord Webhook と Discord ユーザーID が自動設定されます。(Gist ID は Git グローバル設定discord.envgistに保存されます) - 【注意】 Linux環境において、
ghにログインしているのにもかかわらず Gist の自動作成・復元が認識されない(gh auth statusが失敗する)場合、sudo経由での実行時にキーリング(keyring)にアクセスできないことが原因の可能性があります。その場合は、以下のコマンドを実行してセキュアストレージを無効化(ファイル保存に変更)し、再ログインしてからスクリプトを再実行してください。gh config set secure_auth false gh auth login
- 自分の GitHub アカウントに
- 内容: 指定ディレクトリ以下の
.mkv/.webmファイルにmkvpropedit --add-track-statistics-tagsで統計情報タグを追加・更新。 - 使い方:
./update_mkv-webm_stats.sh <ディレクトリ>。-h/--helpで説明。 - 依存: mkvpropedit(mkvtoolnix)。
- 内容: 既存ディレクトリを ZFS データセットへ変換。元ディレクトリを一時退避→指定のデータセットを作成(圧縮設定含む)→マウントポイントに戻してデータを移動→権限復元。第 2 引数が
/終端なら「親データセット/ディレクトリ名-実行ユーザー」で名前自動生成。 - 使い方:
sudo ./zfs_converter.sh <対象ディレクトリ> <ZFSデータセット名|親データセット/> <圧縮設定>(例は下記)。-h/--help参照。 - 依存: zfs。
sudoが必要。
- 実行権限を付ける
chmod +x script.sh- ヘルプを見る
./script.sh -h
./script.sh --help- 例: 画像を WebP に一括変換(カレント)
./ImageMagickConvertWEBP.sh- 例: 動画を HEVC(QSV) で一括変換
./ffmpegbulkEncode.sh mov ffmpeg- 破壊的操作:
File-All-deletion.shは復元不能な削除を行います。実行前に十分な確認を。 - 元ファイル削除: 画像/動画変換系は変換後に元ファイルを削除します(スクリプト本文参照)。
- 権限:
SETUP.SH,Set-GUI_Ubuntu.sh,HandBrake-Build.sh,zfs_converter.shなどはsudoが必要です。 - 外部通知: 一部スクリプトは Koa_Discord_Message.sh で Discord Webhook 通知を行います。
.envの設定が必要です。 - 動作確認: ディストリや環境差分により挙動が異なる場合があります。まずはテスト用ディレクトリで実行してください。
- 改善やバグ報告、ヘルプ整備の PR を歓迎します。再現手順や環境を添えてください。(やる気があれば)
- ライセンスは未指定です。