rokkonet

PC・Androidソフトウェア・アプリの開発・使い方に関するメモ

指定するディレクトリの動画ファイルをランダムに再生するシェルスクリプト

2025 Dec. 30.
2025 Sep. 15.

play-video-randomly.sh

#!/bin/bash
# 2025 Dec. 30.
# 2025 Sep. 15.
# 2017 Apr. 15.
# 2017 Apr. 08.
# 2017 Feb. 25.

# Play an audio-video file randomly in the directory recursively specified in the argument.

# Usage : command DIR

commandpath="$0"

if [ $# -ne 1 ]; then
  echo "${commandpath##*/} DIR" >&2
  exit 1
fi

which vlc 1> /dev/null 2> /dev/null
Result=$?
if [ $Result -ne 0 ]; then
  echo "Install VLC media player." >&2
  exit 1
fi

which gawk 1> /dev/null 2> /dev/null
Result=$?
if [ $Result -ne 0 ]; then
  echo "Install gawk." >&2
  exit 1
fi
dir="$1"
if [ ! -d "${dir}" ]; then
  echo "${dir} is not directory." >&2 
  echo "${commandpath##*/} DIR" >&2
  exit 1
fi

if [ '/' != ${dir: -1} ]; then
  dir="${dir}/" 
fi

countFiles=`find "${dir}" -type f -name '*.mp4' -o -name '*.flv' -o -name '*.ts' -o -name '*.mpg' -o -name '*.mpeg' | wc -l`
numFile="$(( $RANDOM % $countFiles ))"
MediaFile=`find "${dir}" \( -type f -name '*.mp4' -o -name '*.flv' -o -name '*.ts' -o -name '*.mpg' -o -name '*.mpeg' \) -print0 | gawk -v target="$numFile" 'BEGIN { RS="\0" } NR==target { print; exit }'`
echo "$MediaFile"
vlc --no-fullscreen "$MediaFile" 

exit 0

うちの不要録画ファイルとそのファイル情報を収めたファイルを検索し、不要録画ファイルとその情報を削除する

2025 Dec. 27.
2025 Nov. 15.
2025 Aug. 15.
2025 Apr. 26.

(1)録画ファイル情報を収めたファイルから不要録画の情報を抽出する


  $ find /VIDEO/ROOT/DIR/ -type f -name "*record*info*.txt" -print0 | xargs -0 grep 'KEYWORD' | grep -v 'EXCLUDEWORD' | head -n 1
   KEYWORD:検索したい文字列
   EXCLUDEWORD:録画情報に含まれていないで欲しい文字列

(2)上記(1)で得た情報から不要録画ファイルのファイルパスを取得し、そのファイルパスを表示しつつ不要録画ファイルを削除する


  $ find /VIDEO/ROOT/DIR/ -type f -name "FILE2DELETE" -print -delete
   FILE2DELETE:不要録画ファイル名

(3)録画情報を収めたファイルから削除ファイルの情報を削除する

次のリンクページのシェルスクリプトを用いて録画情報を削除する。

リンク: うちのTV録画ファイル情報を納めたテキストファイルから検索文字列を含む行を削除するシェルスクリプト - rokkonet

Android StudioをXubuntu 24.04にインストールする

2025 Dec. 14.

参考ページ
LinuxにAndroid Studioをインストールする方法完全ガイド | ちょげぶろぐ
Android Emulator のハードウェア アクセラレーションを設定する  |  Android Studio  |  Android Developers

$ sudo apt update
$ sudo apt install snapd
$ sudo snap install android-studio --classic


Android Studioを起動する。

$ android-studio


"Welcom To Android Studio"と表示されたAndroid Studio起動時画面の左下のギア・アイコンをクリックする。

Aboutをクリックし、Android Studioのバージョンを確認する。

"Android Studio Narwhal 3 Feature Drop | 2025.1.3"とあれば"Narwhal 3 Feature Drop | 2025.1.3"がバージョン文字列。

Android Studioを終了する。

Android Emulator のハードウェア アクセラレーションを設定する  |  Android Studio  |  Android Developers を参照し、次の作業を行ってKVMをインストールする。

$ sudo apt-get install cpu-checker
$ egrep -c '(vmx|svm)' /proc/cpuinfo
出力が 1 以上の場合、仮想化がサポートされている。
出力が 0 の場合は、CPU がハードウェア仮想化をサポートしていない。

$ sudo kvm-ok
次の出力であれば次に進む
INFO: /dev/kvm exists
KVM acceleration can be used

$ sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager virtinst
$ sudo usermod -aG libvirt,kvm $USER


SoundWireのネットワークゾーン設定

2025 Dec. 13.
2024 Feb. 25.
2024 Jan. 02.

SoundWireのWindowsへのインストール時にネットワークからのアクセス設定が表示される。
ここでプライベートネットワークのみを許可するとandroidスマホから音声が出ない。
パブリックネットワークとプライベートネットワークの両方からのアクセスを許可する必要がある。

ネットワーク設定変更

出典 - YouTube

Windowsの設定 -> ファイアウォールによるアプリケーションの許可
"SoundWire Server Application"を削除する。
"C:\Program Files (x86)\SoundWire Server\SoundWireServer.exe"を登録する。
登録中の詳細設定で、パブリックネットワークとプライベートネットワークの両方を許可する。

EPGStationの録画データをテキストファイルに保存する

2025 Nov. 24.
2025 Nov. 07.

CSVファイルではないテキストファイルへの書き出し

# mysql -p -u USERNAME DATABASENAME -B -e "SELECT video_file.id, video_file.parentDirectoryName, video_file.filePath, video_file.type, video_file.name, video_file.size, video_file.recordedId, recorded.startAt, recorded.endAt, recorded.name, recorded.description, recorded.extended FROM video_file LEFT OUTER JOIN recorded ON video_file.recordedId = recorded.id;" > YOUR/DIR/epgstation-recorded-information.txt

USERNAME : わざわざ設定しなければ epgstation となっていることが多い
DATABASENAME : わざわざ設定しなければ epgstation となっていることが多い

CSVファイルへの書き出し

ユーザにfile権限を付与する

ユーザーリストを出力してユーザー名を確認

参照先: MySQL : ユーザー一覧を取得 - rokkonet

rootユーザーとしてmysqlサーバーに接続

# mysql -p -u root

ユーザーリストに合わせたユーザー名でfile権限を付与

mysql> grant file on . to 'USERNAME'@'%' ;
とか
mysql> grant file on . to 'USERNAME'@'%localhost' ;
とか

rootユーザーでのmysql接続終了

mysql> exit

epgstationユーザーでmysql接続

# mysql -p -u USERNAME DATABASENAME

secure-file-priv設定確認
> SHOW VARIABLES LIKE 'secure_file_priv'; 
 secure-file-priv が設定された状態であれば 
     SELECT @@secure_file_priv; を実行し 
     出力表示されたディレクトリにCSVファイルを保存するようにする。 


CSVファイルを出力する
# mysql -p -u USERNAME DATABASENAME

> SELECT video_file.id, video_file.parentDirectoryName, video_file.filePath, video_file.type, video_file.name, video_file.size, video_file.recordedId, recorded.startAt, recorded.endAt, recorded.name, recorded.description, recorded.extended FROM video_file LEFT OUTER JOIN recorded ON video_file.recordedId = recorded.id INTO OUTFILE '/HOST/SHARED/DIR/epgstation-recorded-information.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\n';

> exit


Docker版MySQLであればMySQLコンテナから出てホストに戻り、MySQLコンテナとの共有ディレクトリをカレントディレクトリにする
(MySQLコンテナ) # exit
(Host) $ cd DOCKER/MYSQL/SHARED/DIR


不要な文字(スラッシュとLF文字の連続。CR文字)を削除する

$ perl -0777 -i.bak -pe 's/\\\n//g; s/\r//g' epgstation-recorded-information.csv
 "-i.bak"により、元ファイルがバックアップファイルとして残る。

改行コードまわりの表現(16進数、^M、略語 )

2025 Nov. 30.
2025 Nov. 23.

0x0a : "\n" "LF" "^J"
0x0d : "\r" "CR" "^M"
0x5c : \(スラッシュ) 長い行の途中改行時に挿入されて行末に現れることがある。

'\n'が必ず LF を表すわけではない。
言語内部では LF として扱うことが多いが、ファイル入出力や OS 依存の変換で CRLF や CR にマッピングされる場合がある。