2019年10月

1 ヶ月時点の SSD 書き込み量

新パソコンを使い始めて 1 ヶ月。各 SSD の現時点での総書込量を記録しておく。

cdm_c_presentC ドライブは 1644 GB。

300 TBW のディスクなので、15 年使える計算。

cdm_d_nanatunatuD ドライブは 1795 GB。

400 TBW のディスクなので、18 年使える計算。

cdm_e_bikiniE ドライブは 1752 GB。

400 TBW のディスクなので、19 年使える計算。

いずれもパソコン買い換えサイクルよりも長かったので一安心。

ついでに、USB 外付け HDD も CrystalDiskInfo しておく。

cdm_f_maruF ドライブは RAID ユニットで、ディスク交換したため使用時間が 14 時間に戻っている。元々は 36,222 時間だったので、ユニット全体の使用時間はプラス 36,000 時間程度。

cdm_u_kimonoU ドライブはポータブル HDD。9846 時間使用。


My Book Duo の HDD を交換

異常発生

hdd_death24 年ほど前に購入した USB 3.0 外付け HDD ユニット「My Book Duo」(型番:WDBLWE0080JCH-JESN、4TB+4TB = 8TB)に不穏な赤ランプが点灯。電源ランプが赤く点滅するととともに、HDD 1 のランプも赤い。

led付属のマニュアルを確認するとやはり、残念ながら 1 つ目の HDD がお亡くなりになっているとのこと。

degrade専用ユーティリティ(WD Drive Utilities)を起動して確認すると、明確に故障と表示された。

crystaldiskinfoRAID 1 で運用しているため、片方の HDD が死んでもユニット全体としては問題なく使用できるからか、CrystalDiskInfo では正常と表示される。

また、ユニットの電源をいったんオフにしたところ、赤ランプの表示は出なくなってしまったが、専用ユーティリティで簡易チェックすると不合格となった。

HDD 調達

wdredMy Book Duo で使用されている HDD は WD Red シリーズなので、順当に行くなら交換用の新 HDD も WD Red で揃えるのが良さそう。

ところが Western Digital の公式サイトを確認すると、WD Red に 4TB のラインナップが無い(WD Red Pro にはあるが)。しかも「NAS 向け」の位置づけになっているのでターゲットがちょっと違う。

秋葉原にはまだ WD Red の 4TB は売っていて(恐らく少し古いモデル?)、価格は税込で約 15,000 円。

wdblue正統な後継が無いことや、そのうち HDD ユニット自体を(もっと容量の多いものに)買い換える可能性も考慮し、かつ、価格面も加味して、デスクトップ向けモデルの WD Blue を購入。ドスパラにて、4TB で税込 7,810 円。キャッシュレス支払い(クレジットカード)で即時割り引き 5% となり、7,420 円まで下がった。



HDD 交換

マニュアルに従って HDD を交換。

上部カバーを開いた後、手で回せるネジで留められている内側の網を外す。

open2マニュアルで「タブ」と表記されているペラペラの持ち手を使って HDD を引き上げる。

新しい HDD にタブを取り付けてからユニットに差し込む。

RAID 再構築

新品の HDD1 と、生き残っていてデータもある HDD2 の内容が不整合になっているので、PC に接続するとその旨の警告が表示される(この状態でも PC からは正常な HDD として利用可能)。

fukugen専用ユーティリティで RAID の状況を確認すると、HDD1 が新品であることをきちんと認識してくれている。

fukugen2復元ボタンをクリックすると、生き残っている HDD2 から新品の HDD1 へのデータコピーが始まる。

RAID の再構築にはかなり時間がかかり、6 時間半経過時点で進捗は 74%。完了までに 9 時間近くかかる計算。

fukugen6翌日起床した際には、無事に再構築が完了し、RAID 1 本来の状態での稼働となっていた。

cdm_f_maruCrystalDiskInfo では HDD 1 の情報が表示されるようで、交換後は電源投入回数・使用時間が新品のデータになっている(交換前は電源投入 256 回、使用時間 36,222 時間)。











WPF で動画に文字や図形を合成して再生する方法

C# 動画プログラミングの 1 つです。

WPF の MediaElement や MediaPlayer で動画を再生する方法を紹介したページはいくつか見たのですが、通常再生のみが紹介されており、加工しながらの再生について言及されているページが見当たらなかったので、ここにまとめてみます。

目次


やりたいこと

overlay2動画再生時に、再生している動画の映像に、テキスト等を重ねます。

例として、映像の左上に灰色の長方形を描き、フレームレートや動画再生位置(秒数)といった文字を重ねてみます。

サンプルコード

GitHub にアップしてありますので、そちらからダウンロードしてください。

動作環境については GitHub リポジトリ内のヘルプファイルを参照して下さい。

実装の基本方針

WPF には、(動画に限らず)表示の更新を行うタイミング(つまりフレームごと)で発生するイベントがあり、それが CompositionTarget.Rendering イベントです。

このイベント内で再生中の動画をキャプチャした上で、テキスト等を書き込んでいく、というのが基本的な考え方です。

プログラムの大まかな動作としては、ドラッグ&ドロップされた動画を再生(もちろん音声も)しつつ、上記の方法で映像にテキスト等を重ねています。

プログラムの解説

MainWindow.xaml.cs の解説です。

ファイルをドロップされた際に発生するイベント Window_Drop() において、動画の再生 Play() と、重ね合わせの準備 PrepareOverlay() を行っています。

Play() は単純に、ドロップされたファイルを MediaPlayer で再生しているだけです。

今回の 1 つのポイントは PrepareOverlay() で、ここでフレーム描画イベントハンドラー CompositionTarget.Rendering の設定を行っています。

ここで設定されたイベントハンドラーは WPF での描画が必要なタイミングで常に呼びだされるため、仮に動画が再生されていなくても定期的に呼びだされます。呼びだされる頻度は環境によって異なるとのことで、私の環境では通常 60 fps 程度で呼びだされていますが、100 fps 程度に上がることもあります。あくまでも「WPF 描画のフレームレート」であって、動画のフレームレートではないことに留意してください。

イベントハンドラーとして設定された CompositionTargetRendering() の後半部分で合成を行っています。

DrawingVisual の DrawingContext に対して、動画、図形(背景の灰色四角形)、テキスト(フレームレートや再生位置)を書き込み、最後にそれらを表示用のビットマップ(mBmp)に書き込みます。

ImagemBmp は PrepareOverlay() で Image コントロールのソースに指定されているため、mBmp の内容がユーザーの目に見える形で表示されることになります。

WPF で動画を扱うメリット

WPF で動画を扱うメリットは、なんといっても手軽なことです。

加工しない再生だけなら MediaElement コントロール 1 つで簡単に動画を再生できますし、加工しても今回のサンプルコードのようにわずかなコード量で実現できます。

標準の C# 開発環境のみで実現できるため、追加のサードパーティーライブラリを用意したり、それをユーザーにインストールしてもらう(または一緒に配布する)という手間もありません。

GPULoadGPU ハードウェア支援が使える場合は、自動的に活用してくれているようです。

また、詳しくは未検証ですが、インストールされているコーデックライブラリ(K-Lite 等)も WPF 側で自動的に利用してくれているようで、扱える動画の形式も無限に広がっていきます。

WPF で動画を扱うデメリット

WPF で動画を扱うデメリットは、(動画の)フレームを厳密に扱えないのではないかということです(扱える方法をご存じの方は教えてください)。

まず、根本的な課題として、動画のフレームレートが取得できません。動画の縦横サイズ等はプロパティーで取得できるのですが、フレームレートを取得するプロパティーはありません。

また、WPF で動きのあるものを処理する際はアニメーションという仕組み(Animatable クラスないしは IAnimatable インターフェース)に則っており、動画(MediaElement / MediaPlayer)も例外ではありませんが、動きの管理が時間単位で行われています。

何らかの方法で動画のフレームレートを取得できたとしても、厳密な意味でのフレーム送りはできず、1 フレームは○○ミリ秒だから○○ミリ秒進める、というような形でのフレーム送りになるのではないかと思います(この辺りは未検証ですが)。30 fps だと 1 フレーム当たり 33.3333.... ミリ秒ですが、小数点の丸めによって微妙に進まない(または 2 フレーム進んでしまう)瞬間が発生したり、そもそも可変フレームレートだとどうしようもないのではないかと思います。

スクリーンショットの動画

このページ冒頭のスクリーンショットに映っている動画は、ダブルレンさんの「お願い☆EternalSummer!」という曲です。素敵な曲なので、是非聴いてみて下さい!


歌いたい時はニコカラバージョンでどうぞ。








ニコカラ動画のオンボとオフボを簡単に結合するツール おすそ分け

ニコカラ動画(カラオケ字幕動画)のオンボーカル動画とオフボーカル動画を結合し、1 つの mp4 動画ファイルに「字幕映像+オンボーカル音源+オフボーカル音源」をまとめるためには、こちらの記事にあるように Yamb で様々な入力をしていく必要がありますが、ファイルドロップだけで手軽に結合するツールを自分用に作りましたので、おすそ分けします。

※縮小表示されている画像は、クリックすると元のサイズで表示されます。

目次

ツールの概要

オンボとオフボを手軽に結合してマルチトラック化するツールです。

元の動画をドラッグ&ドロップするだけで、トラック名の設定やトラックの言語設定も自動で行います。

Yamb で作成するより手間を削減できます。一方で、複雑な結合はできませんので、その場合はこれまで通り Yamb をお使い下さい。

インストール

ニコカラ動画のオンボとオフボを簡単に結合するツールは、ダウンロード先からダウンロードして zip を解凍します。

ニコカラ動画のオンボとオフボを簡単に結合するツールの動作には MP4Box が必要です。MP4Box はこちらのサイトから GPAC の最新インストーラー(2019 年 10 月現在、32 ビット Windows 用は gpac-0.8.0-rev1-gc1990d5c-master-win32.exe、64 ビット Windows 用は gpac-0.8.0-rev1-gc1990d5c-master-x64.exe)をダウンロードします。exe を実行し、指示に従って GPAC をインストールすると、インストールしたフォルダーに MP4Box.exe ができるので、ニコカラ動画のオンボとオフボを簡単に結合するツール(MergeNicoKaraTracks.exe)と同じフォルダーに MP4Box.exe をコピーします。

簡単な使い方

Mnkt1ツールを起動すると、ウィンドウ上部に案内が表示されるので、案内に従って作業を進めていきます。

Mnkt2エクスプローラーからオンボ動画(映像+オンボ音声)または元の PV 動画(オンボ音声のもの)をドラッグ&ドロップします。オンボーカル行(トラックが On の行)にドロップした動画が入ります。

(補足)
PV 動画とオンボニコカラ動画の 2 つがある場合、可能であれば PV 動画を使う方が良いです。オンボニコカラ動画の音声部分は PV 動画の再エンコのため、音質が下がっていることが多いです。
Mnkt3次に、オフボ動画(映像+オフボ音声)もドラッグ&ドロップします。オフボーカル行(トラックが Off の行)にドロップした動画が入ります。

「出力開始」ボタンが水色に光りますので、クリックすると、マルチトラック結合動画が出力されます。

デフォルトでは、「オフボ動画の映像+オンボ音源+オフボ音源」が結合され、オフボ動画と同じフォルダーに結合動画が出力されます。デフォルトで映像をオフボのものにしているのは、オンボとして(字幕のない)元の PV を指定することを想定しているためです。

動画内のトラック名(On Vocal / Off Vocal)や言語設定(オンボ音源は Japanese)は自動的に設定されています。

以上、2 つのファイルのドロップだけで手軽に結合が完了しました。

高度な使い方

このツールでは、オンボ 2 つ+オフボ 2 つの合計 4 トラックまで結合できます。

Mnkt42 つめのオンボや 2 つめのオフボを指定したい場合は、「On-2」「Off-2」行の参照ボタンをクリックして動画を指定します。ドラッグ&ドロップの場合は、「On-2」→「Off-2」の順に動画が追加されていきます。

Langオンボやオフボが 2 つあると動画再生時のトラック選択で見分けがつきづらいので、「トラック名追加」欄に追加情報を入力して見分けやすくすると良いでしょう。例えば、「トラック名追加」欄に「初音ミク版」と入れると、生成されるトラック名が「On Vocal (初音ミク版)」のようになります。

(補足)
最新版の MP4Box を使っていれば基本的に問題ありませんが、環境によっては、トラック名に日本語を使うと問題が発生するかもしれません。その場合は、入力する文字を英数字にして下さい。
デフォルトのトラック名を「On Vocal」のように英字にしているのはそのリスクを避けるためです。

ダウンロード

本ツールのダウンロードは、こちらのリンク先の中から、「MergeNicoKaraTracksXXX.zip」を探してダウンロードして下さい。

補足

本ツールは開発者自身が使用するために開発したものをおすそ分けという形で公開はしておりますが、今後バージョンアップの予定はありません。

また、機能アップなどのリクエストは受け付けておりません。

完全に as-is(あるがまま)となります。

1 つの mp4 動画に複数の音声トラックを結合する方法

便利なマルチトラック動画(複数の音声トラックを持つ動画)の作り方についてまとめました。

縮小表示されている画像は、クリックすると元のサイズで表示されます。

目次

マルチトラックのメリット

ニコカラ(カラオケ字幕動画)を例にすると、同じ曲でも「オンボーカル(オンボ):元の音声付き楽曲」「オフボーカル(オフボ):カラオケ音源」の 2 つの動画があります。

オンボとオフボを別々の動画にしておくと、それぞれの動画に「映像+音声」がありますが、映像(字幕)はどちらも同じなのでディスク容量の無駄になります。1 つの動画に「映像+オンボ音声+オフボ音声」を同居させるマルチトラック動画にすれば、映像 1 つ分のディスク容量が節約できます。

例えば、映像のビットレートが 2 Mbps の 5 分間の動画の場合、75 MB の容量を節約できます。

また、マルチトラック動画にすると、再生中にオンボとオフボを切り替えられるのも大きなメリットです。

必要なツール

マルチトラック動画の作成に必要なツールは、Yamb と MP4Box の 2 つです。私たちは Yamb を使い、Yamb が MP4Box を使います。

Yamb はこちらのサイトから最新の zip 版(2023 年 5 月現在は Yamb-2.1.0.0_beta2.zip)またはインストーラー版をダウンロードします。PC の好きなフォルダーに zip を解凍しておきます。

MP4Box はこちらのサイトから GPAC の最新インストーラー(2023 年 5 月現在、64 ビット Windows 用は gpac-2.2.1-rev0-gb34e3851-release-2.2-x64.exe)をダウンロードします。exe を実行し、指示に従って GPAC をインストールすると、インストールしたフォルダーに MP4Box.exe が入ります。

GPAC のインストール先をデフォルトの Program Files 配下にするとうまくインストールできないようです。別の場所(例:C:\App)にインストールすると良いでしょう。

なお、Yamb のインストーラー版には MP4Box.exe が同梱されていますが、古いので使わないでください(例えば HEVC の処理ができません)。必ず GPAC の MP4Box.exe を使うようにします。

Yamb の設定

YambYamb が MP4Box を使えるように設定します。

Yamb を起動し、左側のアイコンから「Settings」をクリック、右側の「Advanced Settings~」をダブルクリックします。

Yamb2Advanced Settings 画面になるので、左側から「MP4Box」をクリックし、Location のフォルダーアイコンをクリックして、前章でインストールした GPAC に含まれている MP4Box.exe の場所を指定します。

指定を終えたら「Next」をクリックして設定完了です。

結合作業

マルチトラック動画を作るために、映像や音声を結合します。

Yamb3Yamb を起動し、左側のアイコンから「Editing」をクリック、右側の「Click to join~」をダブルクリックします。

「Concatenation of Files」の画面になるので、エクスプローラーからオンボ動画(映像+オンボ音声)または元の PV 動画(オンボ音声のもの)をドラッグ&ドロップします。

(補足)
PV 動画とオンボニコカラ動画の 2 つがある場合、可能であれば PV 動画を使う方が良いです。オンボニコカラ動画の音声部分は PV 動画の再エンコのため、音質が下がっていることが多いです。
その後、オフボ動画(映像+オフボ音声)もドラッグ&ドロップします。

Yamb4aドロップした動画のトラックが一覧表示されます。通常は上から順に、PV(オンボ)の映像、PV(オンボ)の音声、オフボの映像、オフボの音声、となります。

一番上、PV(オンボ)の映像は不要なので、チェックを外します。

Yamb5上から 2 番目、PV(オンボ)の音声トラックをクリックして選択してから、右側の「Properties」ボタンをクリックすると、音声トラックの情報を設定する Properties ウィンドウが開きます。

「Language」は必須ではありませんが、「Japanese」を選択すると良いでしょう。また、「Track Name」に「On Vocal」と入力します(日本語ではなく英語で入力するほうがトラブルが少ないです)。

Ok ボタンをクリックすると Concatenation of Files ウィンドウに戻ります。

Yamb6同じように、一番下、オフボの音声トラックをクリックしてから Properties ウィンドウを開きます。

オフボの場合は言語は関係ありませんから、「Language」はデフォルトのまま「Unspecified」で良いでしょう。「Track Name」に「Off Vocal」と入力して Ok します。

Concatenation of Files ウィンドウに戻ったら、「Output」に出力動画ファイル名を入力します(デフォルトではドロップした動画のファイル名になっていますので、変更しないと上書きされてしまいます)。

ファイル名は、オンボとオフボの両方が含まれることが分かるように付けると良いでしょう。

例)
楽曲名_歌手名(On-Off).mp4
千本桜_初音ミク(On-Off).mp4

Yamb7これまでの作業内容をまとめると右の図のようになります。

すべての入力を終えたら、「Next」ボタンをクリックします。マルチトラック動画が生成されます。

再生

【Windows Media Player での再生】

マルチトラック動画は、通常の動画と同じように Windows Media Player で再生できます。

音声を切り替えたい場合は、ウィンドウ右上にある「ライブラリに切り替え」ボタン(LibChange)をクリックします。

WMPMenu画面が切り替わり、メニューバーが表示されるので(メニューバーが非表示になっている場合は、ウィンドウタイトルバーの少し下を右クリックするとメニューが表示されます)、メニューから[再生→オーディオおよび言語トラック→再生したい音声トラック]をクリックすると音声が切り替わります。

【MPC-HC / MPC-BE での再生】

Windows Media Player で音声を切り替えるのは手順が多く面倒なので、MPC-HC または MPC-BE で動画を再生するほうが簡単です。

これらのプレーヤーの場合、動画再生中に「A」キーを押すことで音声を切り替えられます。

MPCMenuメニューから切り替える場合は、[再生→音声トラック→再生したい音声トラック]です。メニューに「On Vocal」など Yamb で設定したトラック名が表示されるので分かりやすいです。

おまけ


更新履歴

  • 2019/10/04 初版。
  • 2023/05/14 GPAC について追記。



月別アーカイブ
記事検索
最新コメント
  • ライブドアブログ