docker-mirakurun-epgstationのDBにアクセスし録画ファイルの紐づけを修正する
迂闊に録画ファイル名のフォーマットを変えてしまったので、EPGStationから一部の録画が再生できなくなった。それを修正したい。
現在出ている(録画済みタブから録画番組を選択し、再生しようとした際)エラーは以下の通り。
{
"code": 500,
"message": "Internal Server Error",
"errors": "ENOENT: no such file or directory, stat '/app/recorded/20240623-234500-ブルーアーカイブ The Animation[終]#12[字].mp4'"
}
ちなみに現在の録画ファイル名のフォーマットと比較するとこれ。
日時の視認性を上げようとした結果、今回のような事態に陥った。
以前 - 20240623-234500-ブルーアーカイブ The Animation[終]#12[字].mp4
現在 - 2024-06-23_23-45-00-ブルーアーカイブ The Animation[終]#12[字].mp4
まずdocker内で動いているmysqlのコンテナに接続する。
docker exec -it docker-mirakurun-epgstation-mysql-1 bash
root権限でコンテナに入れるはず。以下の表示に変わる。
root@d98e8610a824:/#
次にmysql本体?へ接続。passwordを要求されるので、
/docker-mirakurun-epgstation/epgstation/config/config.yml
のmysqlの欄のpasswordを入力。
デフォルトではepgstation
root@d98e8610a824:/# mysql -uroot -p
Enter password:
するとこのような表示があり、MariaDBとやらを操作可能になる。
show DATABASES;
を実行すると、文字通りDBのリストが表示される。(コロンをつけるのを忘れない)
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 59
Server version: 10.5.26-MariaDB-ubu2004 mariadb.org binary distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> show DATABASES;
+--------------------+
| Database |
+--------------------+
| epgstation |
| information_schema |
| mysql |
| performance_schema |
+--------------------+
4 rows in set (0.012 sec)
ここまで参考になったページ
EPGStationのDBをUSEする。
(このときのMarkDownのコードブロックの言語は何を指定すればいいのか?)
MariaDB [(none)]> use epgstation;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
存在するテーブルを確認
MariaDB [epgstation]> show TABLES;
+----------------------------+
| Tables_in_epgstation |
+----------------------------+
| channel |
| drop_log_file |
| migrations |
| program |
| recorded |
| recorded_history |
| recorded_tag |
| recorded_tags_recorded_tag |
| reserve |
| rule |
| thumbnail |
| video_file |
+----------------------------+
12 rows in set (0.001 sec)
recorded云々の中身をいじればいいのだろうか?
メモ
2024/10/13のニュース7以降は再生可能
使えそうなコマンド
# 指定したtable(ここではrecorded)カラム一覧表示
show columns from recorded;
# 指定したカラム(ここではname)の値をすべて表示
select name from recorded
これでDBに記録されているファイル名が見える
MariaDB [epgstation]> select id,filePath from video_file
+-----+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| id | filePath |
+-----+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| 1 | 20240615-130000-こころの時代 ひとりで生きる みんなで生きる 作家・若竹千佐子[字][再].m2ts |
| 2 | 20240615-130000-こころの時代 ひとりで生きる みんなで生きる 作家・若竹千佐子[字][再].mp4 |
| 5 | 20240615-170000-ドラえもん 【ふたりっきりで月旅行】【ウルトラリング】[デ][字].mp4 |
.
. (省略)
.
| 41 | 20241006-205500-ニュース・気象情報(関東甲信越)[字][手].mp4 |
| 43 | 20241007-230000-tiny desk concerts JAPAN 総合版(2)KIRINJI[字].mp4 |
# ここで構築し直した
| 47 | 2024年10月13日13時00分00秒-ニュース・気象情報[字].mp4 |
| 49 | 2024年10月13日18時45分00秒-ニュース645(関東・山梨)[字].mp4 |
# ここでフォーマットを変更した
| 51 | 2024-10-13_19-15-00_NHK総合1・東京-NHKニュース7[二][字].mp4 |
| 53 | 2024-10-14_15-00-00_NHK総合1・東京-ニュース・気象情報[字].mp4 |
| 56 | 2024-10-14_15-50-00_NHK総合1・東京-100カメ 東京メトロ 巨大地下鉄ネットワークを観察![解][字][再].mp4 |
ここからはChatGPTを信じる
UPDATE video_file
SET filePath = CONCAT(
SUBSTRING(filePath, 1, 4), '-', -- 年(前4文字)
SUBSTRING(filePath, 5, 2), '-', -- 月(5~6文字目)
SUBSTRING(filePath, 7, 2), '_', -- 日(7~8文字目)
SUBSTRING(filePath, 10, 2), '-', -- 時(10~11文字目)
SUBSTRING(filePath, 12, 2), '-', -- 分(12~13文字目)
SUBSTRING(filePath, 14, 2), '_', -- 秒(14~15文字目)
SUBSTRING(filePath, 17) -- 残りの文字列(17文字目以降)
)
WHERE filePath LIKE '20240__________%.mp4'; -- 対象をフィルタリング
成功!無事20240xxxxxxx.mp4が置き換えられた。
WHERE filePath LIKE '20241__________%.mp4'; -- 対象をフィルタリング
WHERE filePath LIKE '2024___________%.m2ts'; -- 対象をフィルタリング
も同様に行う。
ミスった終わった
SQL文を2度実行しない
Dockerコンテナ内のファイルをホストにコピー
sudo docker cp d98e8610a824:/video_file_backup.sql /
ようやく修正完了(sqlファイルの)
SQLファイルをテーブルに流し込んでいく
mysql -u root -p epgstation < fixed.sql
見かけ上はいい感じになったけどまだ再生できない
変わんないねえ確かにこのファイル名であるはずなのに
{
"code": 500,
"message": "Internal Server Error",
"errors": "ENOENT: no such file or directory, stat '/app/recorded/2024-06-15_17-00-00_ドラえもん 【ふたりっきりで月旅行】【ウルトラリング】[デ][字].mp4'"
}
判明!時刻とタイトルの間をアンダーバーではなくハイフンにしていた
誤:'2024-06-15_13-00-00-こころの時代 ひとりで生きる みんなで生きる 作家・若竹千佐子[字][再].mp4'
正:'2024-06-15_13-00-00_こころの時代 ひとりで生きる みんなで生きる 作家・若竹千佐子[字][再].mp4'
動いた!!!!!!!!!!やったーーーー!!!!!!!
自動化してまた失敗したくないのでVNCでラズパイ繋いでちまちま編集している
多分すべて再生できると思う。ということで終了お疲れ様でした。