2025-05-20
およそ3年半ぶりに PowerCMS X のメジャーバージョンアップを実施しました。
派手な新機能はありませんが、今回は運用やウェブアクセシビリティ向上の支援を強化しています。上記のプレスリリースで一部の機能を紹介していますが、紹介しきれなかった機能やアップデートを数回に分けて公開していきます。
※ 各機能について紹介した記事が公開されたら、下記にリンクを追加していきます。
PowerCMS X ver.4 と PowerCMS X クラウド WAF/CDN オプションをご紹介する無料オンラインセミナーを開催いたします。
第一部では新たに追加された機能を中心にご紹介、第二部では、PowerCMS X クラウド WAF/CDN オプションのご紹介、第三部では AI による自動要約機能と自動字幕生成機能を追加し大幅にアップデートした VideoCaptions プラグインをご紹介します。お申し込みは下記のページからお願いします。
カテゴリー:リリース&アップデート情報
投稿者:Masaki
2025-05-16
Version4で新しくなったプラグイン「VideoCaptions」では動画の字幕作成機能が大幅にアップデートされました。
この記事では AI文字起こしを利用した字幕作成のフローについてご紹介します。
用語 | 説明 |
---|---|
字幕 | 動画の題・配役・説明・台詞(せりふ)などを文字で映し出すもの。 |
バリアフリー字幕 | 上記の字幕に加え、それ以外の情報、話者、動画の効果音などの音などの情報を文字で表した字幕。 |
SRT | 動画に字幕をつけるためのファイルフォーマットの1つ(拡張子 .srt)。 |
VTT(WebVTT) | 動画や音声トラックなどの他のメディアと時間軸を合わせて配置された特定のテキスト「キュー」を提供するテキストファイル(拡張子.vtt)。
|
SRV3 | 動画に字幕をつけるためのファイルフォーマットの1つ(拡張子 .srv3)。XMLで記述し字幕にルビや色情報などを持たせることが可能です。 |
ハード字幕 | SRT/VTT/SRV3などと異なり、映像そのものに字幕を合成(焼き付け)したものです。環境を問わずに字幕を表示させることができますが、字幕を消したりすることはできず、合成処理には時間(負荷)がかかります。 |
Groq (グロック) | 言語モデル処理に特化したLPU(Language Processing Unit)を開発しているアメリカ企業。この会社が適用する自動文字起こしなどのAIサービス。 |
Amazon Transcribe | AWS(Amazon Web Services)が提供する音声からの文字起こしサービスの名称 |
Google Cloud Speech-to-Text | Google Cloudの音声からの文字起こしサービスの名称 |
プロンプト | AIに対するユーザーからの指示や質問のこと。AIによる文字起こしサービスに「Groq」を利用する時はAIにヒントや固有名詞などを渡すことで文字起こしの精度を上げることができます。 |
シンプルで普及しているフォーマットです。
1
00:00:00,500 --> 00:00:05,000
吾輩は猫である
2
00:00:05,500 --> 00:00:10,000
名前はまだ無い
cタグ(<c.vttTitle.vttWhite>吾輩は猫である</c>)はスタイルを適用するためのものです。HTMLを含めることができるので、ruby, rtタグを使うことでふりがなを付けることができます。PowerCMS Xの動画プレイヤーはこの VTT形式のファイルを利用します。
WEBVTT
00:00:00.500 --> 00:00:05.000 line:50%
<c.vttTitle.vttWhite>吾輩は猫である</c>
00:00:05.500 --> 00:00:10.000 line:100%
<c.vttBottom.vttWhite>名前はまだ無い</c>
WebVTTは字幕のほかにチャプターを作成することもできます。
WEBVTT
00:00:00.000 --> 00:10:00.000 0
第一章
00:10:00.000 --> 00:20:00.000 0
第二章
字幕とチャプターを両方読み込ませることで、動画プレイヤーの右下の部分で指定した箇所にジャンプすることができるようになります。
<video controls src="video.mp4">
<track default kind="captions" src="captions.vtt" />
<track default kind="chapters" src="chapters.vtt" />
</video>
head内に位置、色、表示などの情報を記述しbody内に字幕の時間とテキスト、定義した表示情報を属性で指定します。WebVTTに rubyタグを入れたものは YouTubeには対応していないのに対して、SRV3形式でルビを指定したものは YouTubeでふりがな付きで表示できます(モバイルアプリは未対応)。
<?xml version="1.0" encoding="utf-8" ?>
<timedtext format="3">
<head>
<pen id="1" sz="400" fc="#FFFFFF" ec="#000000" et="3" bo="0" b="1" />
<pen id="2" sz="200" fc="#FFFFFF" ec="#000000" et="3" bo="0" b="1" />
<wp id="1" ap="7" ah="50" av="100"/>
<wp id="2" ap="4" ah="50" av="50" />
<ws id="1" ju="2"/>
</head>
<body>
<p t="500" d="4500" wp="1" ws="1"><s p="1">吾輩は猫である</s></p>
<p t="5500" d="4500" wp="2" ws="1"><s p="2">名前はまだ無い</s></p>
</body>
</timedtext>
以下の4つのプラグインを有効化する必要があります。
以下のソフトウェアをサーバーにインストールしてください。
以下の環境変数を config.jsonに追加します。
ffmpeg_pathと ffprobe_path以外は初期値が登録済みです。
"mecab_path" : "/usr/local/bin/mecab",
"mecab_dict_index_path" : "/usr/local/libexec/mecab/mecab-dict-index",
"mecab_dic_path" : "/usr/local/lib/mecab/dic/ipadic",
"wkhtmltoimage_path" : "/usr/local/bin/wkhtmltoimage",
"ffmpeg_path": "/usr/local/bin/ffmpeg",
"ffprobe_path": "/usr/local/bin/ffprobe",
以下のサービスに対応しています。
速度、コスト、精度と設定の容易さの面から Groqをオススメします(APIコール数に制限はありますが無料で利用できます)。
以下 Groqでの設定方法を示します。
モデルは whisper-large-v3 と whisper-large-v3-turboから選択できます。ここでは初期値 whisper-large-v3のままとします。
以上で準備は整いました。
カードをクリックすると編集ダイアログが開きます。新規カード作成ボタンをクリックした時も同じ画面となります。
ダイアログオプションボタンをクリックすると、カードの編集画面の表示項目のカスタマイズを行えます。設定はユーザーごとに保存されます。
「追加ファイル」欄にファイルをドラッグ&ドロップすることで、動画や音声の合成や字幕テキストのインポートが可能です。
画像を指定した時間静止画動画にして動画の前もしくは後ろに連結合成します。
ナレーションやBGMなどの音声を合成することができます。合成する音量を調整することが可能です。一定時間または終了時間にあわせてフェードアウトすることもできます。
動画を連結またはワイプ合成することができます。
字幕をインポートできます。編集中の字幕とマージするか上書きするかを選択できます。YouTubeなどからエクスポートした字幕を反映することなどが可能です。
ダイアログで動画編集を行う際、または追加ファイルで動画や静止画、音声を合成する時、ファイル名を選択するドロップダウンメニューが表示されます。保存できるファイルはオリジナルの他に2ファイルです。ファイル名に追加される文字列は環境変数で指定されています。これらの環境変数を空 "" とすると、ファイル名を選択するドロップダウンメニューは表示されず、オリジナルを常に上書きするようになります。
名称・種別 | ファイル名 | 環境変数名 | 初期値 |
---|---|---|---|
オリジナル | filename.mp4 | - | - |
字幕合成 | filename-su.mp4 | video_captions_postfix | -su |
合成動画 | filename-ed.mp4 | video_captions_concat_postfix | -ed |
カテゴリー:プラグイン | 技術情報 | リリース&アップデート情報
投稿者:Junnama Noda
2025-04-24
PowerCMS Xの開発、そしてウェブサイト構築・運用案件にも携わっている安倍です。イマドキのフロントエンドに興味があり、Next.jsを使用したブログ構築も経験したことがあります。今日はPowerCMS X利用者目線で記事を書きたいと思います。
ある案件でテーマを利用せず、開発環境で制作したビューを本番環境にコピーアンドペーストで適用していたのですが、誤りなく本番環境に適用しようにも確認がしづらかったり心理的負荷が大きかったりしました。そこで、Theme_GitHubプラグインを利用して本番環境に適用することでリリース作業を行えるようにしました。
Theme_GitHubプラグインの基本的な設定については、「テーマをGitHubで管理する | PowerCMS X」及びそのページからリンクされているページをご覧いただければと思います。
今回の案件では構築時に独自のテーマが適用された状態でした。もしまだテーマが何も適用されていない、もしくは標準テーマが適用されている状態の場合、ビューの一覧からリストアクション「テーマのエクスポート」を実行し、環境変数theme_paths
で指定したディレクトリに配置して、そのテーマを適用します。
その後、本番環境でビューの編集画面にあるベースネーム・ファイルへのリンクを漏れなく設定していきました。%t/news/index.tmpl
のようにディレクトリ名とファイル名をファイルへのリンクに設定すると、テーマエクスポート時に指定したディレクトリ・ファイル名でビューが出力されるので、ビューを判別しやすくなります。(設定しなかった場合はUUIDが利用されます。)
最後に、theme.json
にリポジトリ情報を記述して本番環境に再度適用します。これでGitHubからPullするための設定ができるようになります。何も更新作業がないタイミングを見計らって開発環境にも同一のテーマを適用しました。
本番環境にテーマを再適用すると不具合が起こらないか(具体的には同一のビューと判断されず、ビューの数が増えてしまうのでは?)と心配でした。実際には何も問題は起こらなかったのですが、実装を調べたところテーマ適用時には同一のビューであることを判断する材料として以下の項目が使われるので、重複しないように気を付けてください。
全ての情報をAND条件で検索しておらずOR条件で検索しているので(ベースネームとクラスはAND条件)、名前を変更してもUUIDが同じであれば同じビューと判断されます。ないと思いますが、誤ってUUIDを重複させることがなければ大丈夫です。
各自がローカルに開発環境を持ち、ローカル開発環境でビューを編集してコミット、リリース日にmainブランチにマージして本番環境に適用、とできれば良いのですが、PowerCMS Xのライセンスの問題、さらにクライアントにデータを入力してもらったり表示を確認してもらったりする必要があるため、なかなかそうはできないだろうというのが現状です。
では開発環境でビューを編集してコミットすれば?と思われますが、複数のチケットの更新作業をしているとビューには複数の作業内容が混ざっている可能性があって、単純にはコミットできないケースも予想されます。(TowerのようなGitクライアントだと編集した行を選択してそこだけコミットできるのですが…)
よって、現状では開発環境のビューを手元でマージしてGitHubにPushしています。(実装作業中はチケット毎にブランチを切って保存しておくのも良いかも。)Next.jsを触った経験も踏まえ、本番環境のブランチにマージするまでの工程で何かイノベーションを起こせないかとずっと考えているのですが、なかなか良いアイデアが浮かびません。
開発環境でビューの一覧からリストアクション「テーマのエクスポート」を実行します。そして、views
の中にある新規追加したテンプレートファイルをリポジトリのviews
内に配置します。そして、theme.json
内の新規追加したビューに関する情報(下記のようなコード)をリポジトリのtheme.json
にマージしてコミットします。
"000d9725-9d3a-479e-8467-b3cbae9c5b56": {
"name": "記事一覧",
"subject": "",
"status": "2",
"class": "Archive",
"basename": "entry_list",
"linked_file": "%t/news/entry_list.tmpl",
"urlmappings": [
{
"name": "記事一覧",
"model": "template",
"mapping": "news\/index.html",
"date_based": "",
"publish_file": "1",
"container": "entry",
"container_scope": "1",
"trigger_scope": "0"
}
]
}
これを本番環境に適用すると、ビュー・URLマップが新しく追加されます。
開発環境のビューの内容をリポジトリのviews
内にある該当ファイルに反映します。これをコミットして本番環境に適用するとビューが更新されます。更新前の状態はリビジョンに残ります。
リポジトリのviews
内にある該当ファイルを削除します。さらにtheme.json
内にある当該ビュー・URLマップの情報を削除してコミットします。
これを本番環境に適用するとビュー・URLマップが消えて欲しいのですが…、現状は消えません。theme.json
を上からなぞって処理するだけだと削除したという情報が得られないからだと考えます。(1つ前のtheme.json
と比較する必要があるということ。)これは製品の検討課題でしょうか。とりあえず手動で削除処理をしています。
powercmsx/support/themes/pull/[ワークスペースID]
に格納されますtheme.json
を上からなぞって処理・保存していくので、全てのビュー・URLマップの更新日時が変わりますTheme_GitHubプラグインを利用した運用を、利用者目線でまとめてみました。環境や運用状況に合わせて適宜調整しながらお試し頂ければと思います。本番環境は誤りの無い確実な操作が求められるので、私はテーマ化して本当に楽になったなと感じます。あとは更新方法を関係者に確実に共有しておくことが大事だと考えています。
カテゴリー:技術情報
投稿者:安倍