2020-12-22

動画ファイルのキーフレーム間隔を調べる方法

Stackoveflowのこの記事で、動画ファイル中のキーフレームの時刻を表示するサンプルが示されていた。 これを参考に、キーフレーム間隔を調べる方法をメモする。

入力ファイルをinput.mp4とすると、FFprobeとawkを使って以下のコマンドにより、キーフレーム間隔を調べることができる。

ffprobe -loglevel error -select_streams v:0 -show_entries packet=pts_time,flags -of csv=print_section=0 input.mp4 | awk -F',' '/K/ {print $1-prev; prev=$1}' | sort | uniq -c
出力は、間隔でソートし、それぞれの出現回数をuniqのオプション-cで表示する。

2020-12-15

Git-grepで特定のファイル名のファイルを除いて検索する方法

Git-grepを使うとレポジトリに登録されているファイルの中でgrepを行うことができる。 このとき、特定のファイルを除いて検索することができる。

例えば、拡張子が.iniのファイルを除いてScreenshotを探す場合、

$ git grep Screenshot UI ':!*.ini'
と、:!に続いて除外するファイル名を書く。

2020-12-10

CentOS8でグラフィカルログインを有効にする

手順

gdmをインストールして、getty@tty1を無効に設定すれば良い。
$ sudo dnf install gdm
$ systemctl set-default graphical.target

メモ

gdmをインストールするだけでは、gdmが有効になっているにも関わらず、gdmが起動しなかった。

2020-11-28

SSH経由で遠隔のホストからPulseAudioの音を出す方法

TigerVNC viewerはオプション-viaを使用することで簡単にSSH経由で遠隔のVNCサーバーへ接続することができる。 残念なことに、VNCのプロトコルには音声を転送するプロトコルが定義されていないので、たいていのVNCサーバー・クライアントでは音声を送ることが出来ない。

このページでは、サーバー上で、vncserverを使用して起動したVNCのセッション内で音声を再生するアプリケーションを起動し、遠隔のクライアントでその音声を聴く方法を説明する。

クライアント側の設定

pactl load-module module-native-protocol-tcp 'auth-ip-acl=127.0.0.1'
もしauth-ip-aclに複数のホスト・ネットワークを設定したい場合、;で区切って記載する。

サーバー側の設定

環境変数PULSE_SERVERを以下のように設定する。
export PULSE_SERVER=tcp:127.0.0.1:4715
ポート番号4715の部分は、後述のトンネリングの設定とあわせておけば何でも良い。 この設定をした上で、PulseAudioを使用するアプリケーションを起動する。

SSHトンネリングの設定

クライアント側から、以下のようにトンネルを掘る。
ssh -NfR 4715:127.0.0.1:4713 server.example.net

制限事項

サーバー側で環境変数が設定されたアプリケーションの音声しか送ることが出来ないため、既に起動しているアプリケーションの音声は送ることが出来ない。 従って、例えばx11vncと併用する使用方法には適していない。 既に起動している (ローカルの) デスクトップの音声を送る場合、以下のページが参考になる。

2020-11-24

Vimから:makeでビルドする際に別のディレクトリに移動する方法

Vimには、ビルドするコマンド:makeが備わっており、統合開発環境 (IDE) のように使用することができる。 Vimから抜けずにビルドできるだけでなく、GCCのエラーメッセージが出た行へ自動でジャンプしてくれる。

最近はビルドをビルド専用のディレクトリで行うことが推奨されているが、Vimでの設定方法を説明する。

手順

Autoconf, automakeを使用する場合を例に説明する。
  1. ビルドディレクトリを作成する。
    mkdir build
  2. Makefileを作成する。
    cd build
    ../configure
  3. 下のディレクトリに移動する。
    cd ..
  4. Vimでソースファイルを開く。(Vimだけを開いても良い)
    vim src/main.c
  5. Vim内で、makeprgを設定する。
    :let &makeprg='cd build && make'
  6. Vim内でビルドを開始する。
    :make
    このとき、-jなどのオプションを付けることもできる。

デバッグ

エラー・ワーニングが出た場合は、最初のエラーの行にジャンプする。 メッセージ間を移動する場合、:cn:cpを使用する。

2020-11-03

SSHを通して遠隔にあるLinuxマシンのデスクトップ音声を聴く方法

はじめに

SSHでログインできるLinuxマシンのデスクトップ音声を聴く方法を説明する。 X11VNCを使うとデスクトップを操作することが可能だ。しかしながら、VNCには音声を転送する機能が付いていない。このようなとき、音声を圧縮してSSH経由で送ることで、やや遅延があるが、音声を一緒に聴くことができるようになる。

環境

接続先は、Pulse Audioが動いており、オーディオデバイスが接続されていることが必要である。 以下の手順は、遠隔ホストとしてScientific Linux 7を使用した。

手順

  1. まず、出力デバイスのモニターを確認する。最後に.monitorと名前が着いているものが出力デバイスのモニター (出力中の音を入力できる) である。
    $ LANG=C pactl list sources | grep Name
  2. 予め、無音の音声を再生しておく。
    $ ffplay -loglevel error -vn -nodisp -f s16le /dev/zero &
  3. SSHで接続した先でffmpegによりモニターをmp3に変換し、ローカルへパイプして、ffplayで再生する。
    $ input=alsa_output.usb-Burr-Brown_from_TI_USB_Audio_CODEC-00.analog-stereo.monitor # 上記で取得したモニターの名前
    $ ssh user@example.com ffmpeg -fflags nobuffer -flags low_delay -loglevel error -f pulse -ac 2 -i ${input} -c:a aac -f flv - | ffplay -fflags nobuffer -flags low_delay -nodisp -loglevel error -f flv -
ここで重要なのは、ffmpegとffplayそれぞれに-fflags nobuffer -flags low_delayを付けることだ。これらのオプションがなくても機能するが、段々と音声のバッファリングが増え、徐々に遅れが目立ち始める。

2020-09-26

WZR-600DHPのスイッチングハブにVLANを設定

Buffalo製の無線LAN付ルーター WZR-600DHP に OpenWrt をインストールし、スイッチングハブにVLANを設定した。

機材など

WZR-600DHP

中古だと2000円くらいで売られているWZR-600DHPを使用した。 そのままではVLANは使用できないので、サードパーティのファームウェアをインストールする。

Open Wrt

使用したファームウェアは OpenWrt Chaos Calmer 15.05 / LuCI で、数年前にtftpでインストールしたと思う。

注意

ファームウェアを書き換えた機器は技適が有効かどうか微妙なので、伝播を発信する状態で使用するべきではない。

OpenWrt上でVLANの設定

ウェブ上で設定できるので、特に説明の必要は無いかもしれない。
  1. メニューのNetwork -> Switchからスイッチングハブの設定を開く。
  2. VLANを有効にする。
  3. VLANの設定を割り当てる。

    一般的に、各ポートのtagged/untaggedの割当には以下のような制約があるらしい。
    • 各ポートには、複数のtaggedを割り当てられる。
    • 各ポート毎に、untaggedは1個しか割り当てられず、その場合taggedは割り当てられない。
    • Taggedポートにタグ付きのパケットが届いた場合は、そのVLANが割り当てられていれば、タグで指定されたVLANへのパケットとして処理する。
    • Untaggedポートにタグ無しのパケットが届いた場合、割り当てられたVLANへのパケットとして処理する。
    • それ以外の場合は、パケットを破棄する。例えばtaggedポートにタグ無しのパケットが届いた場合など。
  4. あとは Save & Apply で設定を保存・有効にするだけ。
Linuxマシンは8021qモジュールでVLANを使用できる。以下に設定方法についての記事をいくつか載せる。
  1. 802.1q VLAN タグのセットアップ
  2. Ubuntuを複数VLAN/SSID吹けるAPにしてみる

2020-08-30

Kdenlive 20をScientific Linux 7上でビルド

EL7でKdenlive 20をビルドするメモ。

FFmpegをビルド・インストール

mkdir b
cd b
../configure --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --arch=x86_64 --enable-libmp3lame --enable-pic --enable-libfreetype --enable-shared --enable-libxcb --enable-libmfx --enable-vaapi --disable-nvenc --enable-libpulse --enable-libx264 --enable-libx265
make -j8 && sudo make install

SCLのdevtoolset-9をインストール

Meltをビルド・インストール

git checkout v6.22.1
scl enable devtoolset-9 bash
PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH ./configure --prefix=/usr/local/mlt-6.22.1
make -j8 && sudo make install 
注意: sclでbashが起動し、その中でconfigureやmakeを実行する。

ビルド

scl enable devtoolset-9 bash
PKG_CONFIG_PATH=/usr/local/mlt-6.22.1/lib/pkgconfig:/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH LANG=C cmake3 -DCMAKE_INSTALL_PREFIX=/usr/local/kdenlive-20.08.0 ..
make && sudo make install

起動スクリプト

以下のシェルスクリプトを用意する。
#! /bin/bash

export PATH="/usr/local/kdenlive-20.08.0/bin:/usr/local/mlt-6.22.1/bin:$PATH"
export LD_LIBRARY_PATH=/usr/local/kdenlive-20.08.0/lib64:/usr/local/mlt-6.22.1/lib:/usr/local/lib:/opt/rh/devtoolset-9/root/usr/lib64:/opt/rh/devtoolset-9/root/usr/lib:/opt/rh/devtoolset-9/root/usr/lib64/dyninst:/opt/rh/devtoolset-9/root/usr/lib/dyninst:/opt/rh/devtoolset-9/root/usr/lib64:/opt/rh/devtoolset-9/root/usr/lib:

exec /usr/local/kdenlive-20.08.0/bin/kdenlive "$@"
LD_LIBRARY_PATHにはKdenliveのパス、mltのライブラリパス、ffmpegのライブラリパス、devtoolで設定されたパスを記載し、最後に:を付ける。

QMLのエラー

以下のようなエラーが出たので、ソースコード中のQMLを修正する。
qrc:/qml/kdenliveclipmonitor.qml:1:1: module "QtQuick.Controls" version 2.4 is not installed
2.4が新しすぎるのだろうと予想して、インストールされているQt5がどのバージョンまでをサポートしているのか確認する。 どうもqmlファイルがいくつかインストールされているようなので、その中のimportコードを確認する。
grep -h -r 'import QtQuick.Controls '  /usr/lib64/qt5/qml/QtQuick/Controls.2/ | sort -u
import QtQuick.Controls 2.2
import QtQuick.Controls 2.2 as Controls
2.2が使われているようなので、2.42.2に置き換える。 たくさんあるのでsedを使った。
sed -i 's/^import QtQuick.Controls 2.4$/import QtQuick.Controls 2.2/' $(git grep -l 'import QtQuick.Controls 2.4')
他にもimportを変更してゆく。
sed -i 's/^import QtQuick 2.11$/import QtQuick 2.9/' $(git grep -l 'import QtQuick.2.11')
sed -i 's/^import QtQuick.Layouts 1.11$/import QtQuick.Layouts 1.3/' $(git grep -l 'import QtQuick.Layouts ')
sed -i 's/^import QtQml.Models 2.11$/import QtQml.Models 2.1/' $(git grep -l 'import QtQml.Models ')
qrc:/qml/kdenliveclipmonitor.qml:514:21: Cannot assign to non-existent property "icon"
src/monitor/view/kdenliveclipmonitor.qml中のicon.name (2箇所) を削除した。

その他

以下のメッセージでFrei0rが見つからない旨が表示された場合、frei0r-pluginsをインストールしてmltをビルドし直す。
Missing package: Frei0r effects (frei0r-plugins) provides many effects and transitions. Install recommended

追記

なぜかeffectsやcompositionsがなにも出てこなかった。 実は、ビルドすると、prefix.shというファイルが生成され、環境変数を設定することになっている。 後日、CentOS 8でKdenliveをビルドしたのだが、このファイルの中身を含んだ起動スクリプトを作成することで、Kdenliveが無事に起動した。

2020-08-29

DVDイメージファイルをMacOS High Sierraでディスクに書き込む方法

MacOS High SierraでDVDイメージファイルをDVDへ焼く方法を説明する.
  1. Finderを開き、イメージファイルのメニューを開く (2指クリックまたは右クリック).
  2. ディスクイメージ"image_file.iso"をディスクに書き込む...をクリックする.
  3. ダイアログが出るので, ディスクを作成をクリックして書き込みを開始する.

2020-08-22

iPhoneにUSBマイクを接続

iPhoneでミーティングに参加する時、より綺麗に声が届くようにするため、Lightning to USB 3 Camera Adapterを購入してみた。

使用した機器は以下の通り。

Lightning to USB 3 Camera Adapter で、充電器から電力を供給しつつ、iPhoneとUSB機器とをつなぐ。
Shure X2Uでマイクからの音声をUSBホストへ送る。

実際に使ってみると、ZoomではUSB接続マイクからの音が届いたが、Cisco WebExでは同じ構成でもiPhone内蔵のマイクのままになった。

2020-04-14

cmake: makeがインストールされていないときのエラー

CentOS 8にて、CMakeを実行すると、以下のエラーが出て、(最後のエラーだけを見ていて) なかなか解決出来なかったので、メモしておく。
CMake Error: CMake was unable to find a build program corresponding to "Unix Makefiles".  CMAKE_MAKE_PROGRAM is not set.  You probably need to select a different build tool.
CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage

原因はmakeがインストールされていないことだったので、以下のコマンドで解決した。

sudo dnf install make

2020-04-09

cmake - makeでコマンドを表示するようにする

CMakeで生成したMakefileは、デフォルトではコマンドを表示せず、進捗をパーセンテージで出す。問題なくビルドが完了する場合は良いが、どこかで失敗したときにデバッグで困る。

<p/>
CMakeが生成したMakefileには以下の記述があるため、コマンドが表示されないようになっている。
<pre>
$(VERBOSE).SILENT:
</pre>
従って、VERBOSEに何か適当な文字を設定すれば、コマンドが表示されるようになる。
<pre>
$ make VERBOSE=1
</pre>

2020-04-04

Git-clone ストレージ容量の削減

Git-cloneをつかうと、すべての履歴がコピーされるため、時間がかかるし、ストレージ容量をかなり消費する。 クローン元に応じて2種類の方法により消費するストレージを削減することができる。

ハードリンク - 同じファイルシステムからクローンする場合

同じファイルシステムからクローンする場合、.git/objects下のデータをハードリンクで作成することで、時間・容量を減らせる。
git clone --local repository [directory]
objectsのファイルは、一度作成されると中身が書き換えられることはないので、特に使用する上で制約はないはずだ。 Git-fetchで新しいコミットを取り込んだ場合は、新しいファイルが作成されるようだ。 また、元のrepositoryでgit-gcを使った場合など、ハードリンクが切れて、消費する容量は大きくなる可能性がある。

浅いクローンをつくる - 外部のURLからクローンする場合

他のファイルシステムや外部のURL (git://...など) からクローンする場合、--depthオプションで浅いクローンを作ることで時間・容量を節約できる。
git clone --depth 1 repository [directory]
もしローカルのレポジトリからクローンする場合、file://を前につけないと、--depthオプションが無視されてそのままクローンが開始されてしまう。

浅いクローンでは、変更履歴が取得されないので、履歴を遡るような用途には使用できない。 もし後で履歴が必要になった場合、git fetchで取得することができる。

もともと、何かのプロジェクトのソースを探していたらgit clone --depthで取得する方法が書かれていてこの方法を見つけたのだが、 git clone --depthについては以下のサイトにわかりやすく書かれている。

RHEL7にFedora 30のchroot環境をつくる

  1. まずディレクトリをつくる
    sudo mkdir -p /opt/chroot/fedora30/var/lib/rpm
    sudo rpm --root /opt/chroot/fedora30/var/lib/rpm --initdb
    
  2. パッケージをインストールする
    wget ftp://ftp.jaist.ac.jp/pub/Linux/Fedora/releases/30/Everything/x86_64/os/Packages/f/fedora-release-30-1.noarch.rpm
    wget ftp://ftp.jaist.ac.jp/pub/Linux/Fedora/releases/30/Everything/x86_64/os/Packages/f/fedora-release-common-30-1.noarch.rpm
    wget ftp://ftp.jaist.ac.jp/pub/Linux/Fedora/releases/30/Everything/x86_64/os/Packages/f/fedora-repos-30-1.noarch.rpm
    wget ftp://ftp.jaist.ac.jp/pub/Linux/Fedora/releases/30/Everything/x86_64/os/Packages/f/fedora-gpg-keys-30-1.noarch.rpm
    sudo rpm --root /opt/chroot/fedora30 --nodeps -ivh fedora-release-30-1.noarch.rpm fedora-release-common-30-1.noarch.rpm fedora-repos-30-1.noarch.rpm fedora-gpg-keys-30-1.noarch.rpm
    
  3. 必要となる設定ファイルをつくる
    sudo mkdir -p /opt/chroot/fedora30/{dev,etc}
    sudo cp -a /dev/{null,stderr,stdout,stdin,zero,random,urandom} /opt/chroot/fedora30/dev/
    sudo cp /etc/{resolv.conf,localtime} /opt/chroot/fedora30/etc/
    
  4. yumでbashとdnfをインストールする
    sudo yum --nogpgcheck --installroot=/opt/chroot/fedora30/ install bash dnf
    
  5. chrootして、他のパッケージをインストールする
    sudo chroot /opt/chroot/fedora30/
    dnf install packages...
    

2020-03-29

timeoutコマンドで設定したタイムリミットをキャンセルするには

timeoutコマンドを使用すると、任意のコマンドの実行時間を制限することができる。 例えば、
timeout 30 sleep 1h
は、sleep 1hというコマンドを実行し、30秒経つとTERMシグナルを送る。

一度設定したタイムリミットを延ばしたくなった場合、以下のようにするとよい。

kill -s SIGKILL PID
または、
kill -s SIGSTOP PID
なお、PIDtimeoutプロセスの方のPIDである。 後者の場合、SIGCONTを送れば、ストップしていた時間は延長されずにタイムリミットが経てばTERMシグナルが送られる。

2020-03-28

tcpdumpを一般ユーザーで実行する設定

Tcpdumpをsudoなしで一般ユーザーから実行するための設定方法を説明する。
  1. まず/usr/sbin/tcpdumpが実行できるユーザーを限定する。
    sudo groupadd pcapgroup
    sudo usermod -a -G pcapgroup user
    sudo chgrp pcapgroup /usr/sbin/tcpdump
    sudo chmod 750 /usr/sbin/tcpdump
    
    もしwheelでよければ、1行目のgroupaddは要らない。
  2. ケーパビリティを/usr/sbin/tcpdumpに設定する。
    sudo setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump
    
上記の設定後に、tcpdumpがpromiscuous modeに設定することも含めて、ユーザー権限でできるようになる。

参考

2020-03-23

RolandのミキサーM-200iのREACポートのオーディオをLinuxマシンで録音

Rolandという浜松にある音響機器メーカーが出しているM-200iというオーディオミキサーがある。 このミキサーには、REACポートというディジタル音声を40チャネル出力するポートが備わっている。 ステージボックスとの接続や他のミキサーとの接続に使用するポートで、Ethernetパケットに音声情報を載せて送るようになっている。

Windows用には、このポートを通して録音するソフトが出ている。 Mac OS X用には、サードパーティからREAC driverというGPL3のツールが出ている。 どちらもLinuxでは使用できないので、REAC driverのソースを参考に、Linuxで動くものを作成し始めた。

REAC driverのようなカーネル空間で動くオーディオドライバにすると扱いやすいのだろうが、そこまでするのは大変なので、ユーザー空間で動かすプログラムをつくることにした。 Linuxのsocketをつかってプログラムを書いてみたが、パケットロスを回避するのが難しく断念、最終的に、tcpdumpでファイルに保存しておき、後処理をすることにした。

  1. まず、M-200iのREACポートとLinuxマシンとをLANケーブルで接続する。 (1 Gbpsでリンクすることを期待していたのだが、dmesgを見るとなぜか100 Mbpsでリンクしていた。)
    e1000e: enp0s31f6 NIC Link is Up 100 Mbps Full Duplex, Flow Control: None
    e1000e 0000:00:1f.6 enp0s31f6: 10/100 speed: disabling TSO
    
    今回はストレートケーブルを使って、スイッチングハブなどを介さずに接続した。
  2. 以下のようにtcpdumpでキャプチャし、ファイルに保存する。このとき、オプション-Bでカーネル上のバッファサイズを大きく取っておく。今回使用した環境 (Intel Core i7-7700 + H270) では、256MiBに設定したらようやくパケットロスしなくなった。
    $ tcpdump -i enp0s31f6 -B 262144 -w a.pcap
    
    このときtcpdumpはパケットロスしたと報告するのだが、次のステップでパケットを解析すると、音声情報が載ったパケットのロスは無かった.
  3. そのあと、自作のプログラムで、チャネルを選択して24-bit WAVE形式に変換する。プログラム自体はそのうちGitHubで公開するかもしれない。
    $ reacrecorder --save-channels 21,22,39,40 --save-wav-24 --load-pcap-file a.pcap
    

REAC driverにはM-200iとのネゴシエーションなどいろいろな処理が書かれているのだが、今回の用途には必要なかった。 REAC masterとなるM-200iから常に音声データがブロードキャストされている。 そのパケットをキャプチャしてWAVEに変換すれば良いだけだった。

2020-01-02

カイロ比較

寒い季節に入り、外出時にカイロを持ちたくなる。色々な種類のカイロを比較し、コストの点でどれが良いか考えてみる。

使い捨てカイロ

鉄を袋の中で徐々に参加させることで発熱する。

まとめ買いすれば、1個あたり20円くらい。

電気カイロ

リチウムイオン電池に充電しておき、内蔵のヒーターにより発熱する。 ラインナップが豊富だが、 今回は7800mAhで3000円のものを比較に取り上げる。

蓄えられるエネルギーは、

7800mAh × 3.6V = 28Wh
ジュールになおすと、
28Wh × 3600s/h = 101kJ
になる。 というわけで、充電1回あたりの電気代は0.03円になる。

リチウムイオン電池は、高温で使用するとあまり寿命が持たないという点も考慮するべきで、例えば1シーズン4ヶ月毎日使用し、2年間こわれないとすると、240回使用できることになる。 本体価格3000円の場合は、1回あたりのコストは

3000円 / 240 = 12.5円
になる。

スイッチがついており使用したいときだけ発熱できる。

オイル充填式カイロ

ベンジン (ナフサ、ガソリンとも呼ばれる) を白金触媒により酸化させることで発熱する。酸化反応を開始するために最初だけ火で加熱させるが、使用中に炎が出ているわけではない。 白金カイロminiを例に比較する。持続時間12時間で他のカイロと比較しやすいので。

燃料は500ml入が640円くらいで販売されているので、1回あたり12.5ml使用する場合の1回あたりのコストは、

640円/500ml × 12.5ml = 16円
となる。 火口は1シーズン毎に取り替えが推奨されている。742円で販売されており、4ヶ月毎日 (120日) 使用すると仮定し、
742円 / 120 = 6.2円
が1回あたり火口のコストになる。 本体は何年でも使用できるようなので、1回あたりコストには含めない。合計で、22円/回になる。

ガソリンの比重が0.737g/ml、発熱量が47kJ/gなので、熱量は

12.5ml × 0.737g/ml × 47kJ/g = 433kJ
である。

なお、白金カイロstandard (miniの2倍) は使い捨てカイロの13倍の熱量とのことなので、使い捨てカイロの熱量は60-70kJであろうと考える。

燃料を使用するので、健康上・安全上の注意が必要である。燃料を飲まない、吸わない、火気の無い場所で保管・給油する。
いちど発熱が始まると、燃料を使い切るまで発熱し続ける。電気カイロのようにon/offを繰り返すような使い方 (通勤・通学の行きと帰りだけ使用するなど) には不便かもしれない。

比較

コスト、熱量など、表にまとめる。

熱量の点ではオイル充填式カイロが最も高い。この比較では白金カイロminiだが、standardは2倍になる。また、コスト1円あたりの熱量で比べても、オイル充填式カイロの方が良い。

使い捨てカイロ 電気カイロ オイル充填式カイロ
時間12h12h12h
1回あたりコスト20円13円22円
本体価格n/a3000円2400円
質量40g250g70g
1回あたり熱量60-70kJ100kJ433kJ
熱量/コスト3.3kJ/円8.0kJ/円19kJ/円

使用シナリオ

使用するシナリオを想定し、どのカイロが良いか考えてみる。

通勤・通学

朝・夕方に1時間づつなど、断続的な使用であれば、電気カイロが良いだろう。使用するときだけonにすれば良い。 初期費用は使い捨てカイロより高いが、上記の例では150回使用すれば使い捨てカイロと同じコストになる。

レジャーなど

もし継続的にカイロを使用する必要が無いのであれば、使い捨てカイロが良いだろう。

外の仕事

外で働くなど長時間にわたってカイロを使用したいのであれば、オイル充填式カイロが良いと思う。 いちど発熱が始まると燃料を使い切るまで発熱し続ける。途中で止めるわけにはいかない。
広告