Closed20

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云々の中身をいじればいいのだろうか?

しちみしちみ

使えそうなコマンド

# 指定した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 | 20241013130000-ニュース・気象情報[].mp4                                                                                                                          |
|  49 | 20241013184500-ニュース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ファイルをテーブルに流し込んでいく

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でラズパイ繋いでちまちま編集している

しちみしちみ

多分すべて再生できると思う。ということで終了お疲れ様でした。

このスクラップは4ヶ月前にクローズされました