<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>STREAM DECK | imakat.com</title>
	<atom:link href="https://imakat.com/tag/stream-deck/feed/" rel="self" type="application/rss+xml" />
	<link>https://imakat.com</link>
	<description>工夫と改善で人生をちょっと豊かに</description>
	<lastBuildDate>Fri, 12 Sep 2025 21:32:05 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://i0.wp.com/imakat.com/wp-content/uploads/2023/07/cropped-80d64ecd340db4e2ca3224859b04caed.png?fit=32%2C32&#038;ssl=1</url>
	<title>STREAM DECK | imakat.com</title>
	<link>https://imakat.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">160909258</site>	<item>
		<title>Macで「音声認識字幕ちゃん」を使いやすくする。</title>
		<link>https://imakat.com/2023/11/17/18463/</link>
		
		<dc:creator><![CDATA[imakat]]></dc:creator>
		<pubDate>Fri, 17 Nov 2023 09:00:00 +0000</pubDate>
				<category><![CDATA[デジタル]]></category>
		<category><![CDATA[ものづくり]]></category>
		<category><![CDATA[STREAM DECK]]></category>
		<category><![CDATA[Chrome]]></category>
		<category><![CDATA[OBS]]></category>
		<category><![CDATA[音声認識字幕ちゃん]]></category>
		<category><![CDATA[Window Resizer]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Mac mini]]></category>
		<guid isPermaLink="false">https://imakat.com/?p=18463</guid>

					<description><![CDATA[「音声認識字幕ちゃん」のサイズ調整 最近、ちまたでもスマホの翻訳アプリ、翻訳機器などを目にすることが多くなってきました。しかも同時翻訳までできてしまうのには驚きです。ただ、いざ使おうと思うと、最初はお試しで無料ですが、有 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<hr class="wp-block-separator has-text-color has-key-color-color has-alpha-channel-opacity has-key-color-background-color has-background is-style-wide"/>



<h5 class="wp-block-heading">「音声認識字幕ちゃん」のサイズ調整</h5>


<div class="sc-dynamic-embed">
  <style>
  /* リンクの見た目を整える */
  .sc-dynamic-embed .sc-link-container { 
      display: flex; 
      gap: 12px; 
      margin-bottom: 10px; 
      flex-wrap: wrap; 
      align-items: center; 
  }
  .sc-dynamic-embed .sc-link { margin-bottom: 0; }
  .sc-dynamic-embed .sc-link a {
    font-size: 15px;
    font-weight: normal;
    text-decoration: underline;
    color: #0073aa;
  }
  .sc-dynamic-embed .sc-link a:hover { text-decoration: none; color: #000; }
  
  /* ★変更：ダウンロードボタンの基本サイズを小さくし、文字の折り返しを防止 */
  .sc-dynamic-embed .dl-btn a {
    font-size: 12px !important;
    color: #d9534f;
    font-weight: bold;
    text-decoration: none;
    background: #fdf0ef;
    padding: 4px 6px;
    border-radius: 4px;
    border: 1px solid #d9534f;
    white-space: nowrap; 
  }
  .sc-dynamic-embed .dl-btn a:hover { background: #d9534f; color: #fff; }

  /* ★追加：スマホ画面（幅500px以下）の時は、さらに全体を縮小して1行に収める */
  @media (max-width: 500px) {
    .sc-dynamic-embed .sc-link-container { gap: 6px; }
    .sc-dynamic-embed .sc-link a { font-size: 13px; }
    .sc-dynamic-embed .dl-btn a { font-size: 11px !important; padding: 3px 5px; }
  }

  /* 行梱包時の基本スタイル */
  .sc-dynamic-embed .imk-line {
      display: inline-block;
      width: 100%;
      border-radius: 2px;
      transition: background-color 0.1s;
  }

  /* 古い枠内字幕ボックスを強制消去 */
  .sc-dynamic-embed #subtitleOverlay,
  .sc-dynamic-embed #scSubtitleOverlay,
  .sc-dynamic-embed .overlay-cue,
  .sc-dynamic-embed .band {
      display: none !important;
      opacity: 0 !important;
      visibility: hidden !important;
      pointer-events: none !important;
  }
  </style>

  <div class="sc-link-container">
    <p class="sc-link">
      <a href="https://imakat.com/ds62/?drid=26" target="_blank"
         onclick="return scStopAndGo(event, this);">
        👉低画質・枠外字幕はこちら
      </a>
    </p>
    <p class="sc-link dl-btn">
      <a href="#" id="imk-dynamic-dl-btn" target="_blank" rel="noopener" download style="display: none;">
        📥 動画をダウンロード
      </a>
    </p>
  </div>

  <style>
            :root{ --dr5emd-max: 1920px; }
            .video-wrap{position:relative;width:100%;margin:0 auto}
            figure.wp-block-video.aligncenter{
              width:100%;
              max-width:min(var(--dr5emd-max, 1920px), 98vw);
              margin:0 auto;
            }
            #subtitleOverlay{
              position:absolute; left:0; right:0; bottom:6%;
              padding:0 2%; text-align:center; pointer-events:none; z-index:2;
            }
            #subtitleOverlay .band{
              display:inline-block; background:rgba(0,0,0,0.35);
              padding:6px 10px; border-radius:8px; max-width:96%;
              margin:0 auto; box-shadow:0 1px 2px rgba(0,0,0,0.15);
            }
            #subtitleOverlay .overlay-cue{
              color:#fff; font-weight:600;
              font-size:clamp(16px, 3.6vw, 32px);
              line-height:1.32; white-space:pre-wrap; margin:2px 0;
              -webkit-text-stroke:.6px rgba(0,0,0,.7);
              text-shadow:-1px -1px 0 rgba(0,0,0,.6), 1px -1px 0 rgba(0,0,0,.6),
                          -1px  1px 0 rgba(0,0,0,.6), 1px  1px 0 rgba(0,0,0,.6);
            }
            @media (max-width:430px){
              #subtitleOverlay .overlay-cue{ font-size:clamp(16px, 4.2vw, 22px); }
            }
            .dr5emd-sublist details > p{
              height:200px; overflow:auto; background-color:#EDF7FF;
              padding:2px 6px; margin:0; box-shadow:3px 3px 4px black;
              position: relative;
            }
            .dr5emd-sublist details > summary{
              padding:2px 6px; width:100%;
              background-color:#ddd; border:none;
              box-shadow:3px 3px 4px black; cursor:pointer; list-style:none;
            }
            /* ▼ 自動スクロール時のハイライト（文字の太さを標準へ変更） */
            .active-hl {
                background-color: #ffff00 !important;
                color: #ff0000 !important;
                font-weight: normal; /* 標準の太さ */
                border-bottom: 2px solid red;
                display: inline-block;
                border-radius: 2px;
            }
            </style><div class="dr5emd-container"><figure class="wp-block-video aligncenter"><div class="video-wrap"><video id="myVideo" controls controlsList="nodownload" poster="https://imakat.com/rd.php?id=SZyJ0Iso.png" playsinline preload="metadata" style="width:100%;height:auto;">  <source src="https://imakat.com/rd.php?id=ffhDUfn3.mp4" type="video/mp4">  <track src="https://imakat.com/rd.php?id=uMEIIFOK.vtt" label="日本語" srclang="ja" kind="subtitles"></video><div id="subtitleOverlay" aria-hidden="true"></div></div><script>
document.addEventListener("DOMContentLoaded", function(){
  var video=document.getElementById("myVideo");
  var trackEl=video?video.querySelector("track[kind='subtitles'], track[kind='captions']"):null;
  var overlay=document.getElementById("subtitleOverlay"); if(!video||!overlay) return;
  video.addEventListener("contextmenu", function(e){ e.preventDefault(); return false; }, false);
  function setNative(mode){
    try{
      if(video.textTracks && video.textTracks.length){
        for(var i=0;i<video.textTracks.length;i++){ video.textTracks[i].mode = mode; }
      }
      if(trackEl && trackEl.track) trackEl.track.mode = mode;
    }catch(e){}
  }
  var isOverlay=true,lastSig="";
  function sig(active){if(!active||active.length===0)return"";var a=[];for(var i=0;i<active.length;i++){var c=active[i];a.push([c.startTime,c.endTime,c.text].join("|"));}return a.join("||");}
  function cueLine(c){var d=document.createElement("div");d.className="overlay-cue";d.setAttribute("translate","yes");if(typeof c.getCueAsHTML==="function")d.appendChild(c.getCueAsHTML());else d.textContent=c.text;return d;}
  function render(){
    if(!isOverlay || !trackEl || !trackEl.track) return;
    var ac=trackEl.track.activeCues,s=sig(ac); if(s===lastSig) return; lastSig=s;
    overlay.innerHTML=""; if(!ac || ac.length===0) return;
    var b=document.createElement("div"); b.className="band"; b.setAttribute("translate","yes");
    Array.from(ac).sort(function(a,b){return a.startTime-b.startTime;}).forEach(function(c){b.appendChild(cueLine(c));});
    overlay.appendChild(b);
  }
  function useOverlay(){isOverlay=true;overlay.style.display="";setNative("hidden");lastSig="";render();}
  function useNative(){isOverlay=false;overlay.style.display="none";setNative("showing");lastSig="";}
  useOverlay();
  if(trackEl){
    if(trackEl.track){ try{ trackEl.track.addEventListener("cuechange",render); }catch(e){} }
    trackEl.addEventListener("load", function(){ try{ if(trackEl.track) trackEl.track.addEventListener("cuechange",render); }catch(e){} render(); });
  }
  video.addEventListener("loadedmetadata",render);
  function handleWebkitMode(){ var m = video.webkitPresentationMode || "inline"; (m==="picture-in-picture"||m==="fullscreen") ? useNative() : useOverlay(); }
  if("webkitPresentationMode" in video){ video.addEventListener("webkitpresentationmodechanged",handleWebkitMode); handleWebkitMode(); }
  if("webkitCurrentPlaybackTargetIsWireless" in video){
    video.addEventListener("webkitcurrentplaybacktargetiswirelesschanged", function(){ video.webkitCurrentPlaybackTargetIsWireless ? useNative() : useOverlay(); });
  }
  if("pictureInPictureEnabled" in document){
    video.addEventListener("enterpictureinpicture",useNative);
    video.addEventListener("leavepictureinpicture",useOverlay);
  }
  document.addEventListener("fullscreenchange", function(){
    var fs=document.fullscreenElement;
    if(!fs) return useOverlay();
    (fs===video || (fs && fs.contains && fs.contains(video))) ? useNative() : useOverlay();
  });
});
</script>
                <figcaption></figcaption></figure><div class="dr5emd-sublist"><details><summary>字幕一覧(クリック)</summary> <p>
(<a href="#" class="imk-cue" data-seek="0:01">00:00:01</a>)  今回は「音声認識字幕ちゃん」のですね。<br>
(<a href="#" class="imk-cue" data-seek="0:10">00:00:10</a>)  サイズを調整する、というテーマでやっていきます。<br>
(<a href="#" class="imk-cue" data-seek="0:15">00:00:15</a>)  「音声認識字幕ちゃん」はですね。<br>
(<a href="#" class="imk-cue" data-seek="0:18">00:00:18</a>)  Google Chromeでしか起動できないのです！<br>
(<a href="#" class="imk-cue" data-seek="0:23">00:00:23</a>)  で、このhttps以下ここにある、<br>
(<a href="#" class="imk-cue" data-seek="0:30">00:00:30</a>)  これを入れて立ち上げるのですが、そうすると下のように、<br>
(<a href="#" class="imk-cue" data-seek="0:38">00:00:38</a>)  ホームページが出てくるのですが、<br>
(<a href="#" class="imk-cue" data-seek="0:41">00:00:41</a>)  この中で、Google Script API-KEYがありますが、<br>
(<a href="#" class="imk-cue" data-seek="0:46">00:00:46</a>)  ここに、API KEYを入れるんですね。<br>
(<a href="#" class="imk-cue" data-seek="0:52">00:00:52</a>)  それはちょっとまた別の場面で、ここのURLからですね、<br>
(<a href="#" class="imk-cue" data-seek="0:58">00:00:58</a>)  設定方法を見て、取得して入力してください。<br>
(<a href="#" class="imk-cue" data-seek="1:05">00:01:05</a>)  それは今回は説明しません。<br>
(<a href="#" class="imk-cue" data-seek="1:13">00:01:13</a>)  それで、まず、<br>
(<a href="#" class="imk-cue" data-seek="1:15">00:01:15</a>)  Google Chromeを、表示するのですけれども、<br>
(<a href="#" class="imk-cue" data-seek="1:20">00:01:20</a>)  Google Chromeから、<br>
(<a href="#" class="imk-cue" data-seek="1:22">00:01:22</a>)  「音声認識字幕ちゃん」を表示するのですけれども、<br>
(<a href="#" class="imk-cue" data-seek="1:27">00:01:27</a>)  それが、OBSの画面上のどの位置に配置するか、<br>
(<a href="#" class="imk-cue" data-seek="1:33">00:01:33</a>)  どの大きさで配置するか、というのは、<br>
(<a href="#" class="imk-cue" data-seek="1:36">00:01:36</a>)  人によって様々だと思いますので、<br>
(<a href="#" class="imk-cue" data-seek="1:42">00:01:42</a>)  それに合わせるために、<br>
(<a href="#" class="imk-cue" data-seek="1:45">00:01:45</a>)  ウィンドウサイズを、<br>
(<a href="#" class="imk-cue" data-seek="1:47">00:01:47</a>)  色々変えれるようにしておく必要があるんですね。<br>
(<a href="#" class="imk-cue" data-seek="1:51">00:01:51</a>)  それでこのプラグインを入れます。<br>
(<a href="#" class="imk-cue" data-seek="1:55">00:01:55</a>)  Window Resizerというものです。<br>
(<a href="#" class="imk-cue" data-seek="2:01">00:02:01</a>)  Chromeウェブストアから拡張機能を選んで、<br>
(<a href="#" class="imk-cue" data-seek="2:07">00:02:07</a>)  その中で検索のところに、<br>
(<a href="#" class="imk-cue" data-seek="2:11">00:02:11</a>)  Window Resizerと入れて、このアプリケションを探して、<br>
(<a href="#" class="imk-cue" data-seek="2:19">00:02:19</a>)  それでダウンロードしてください。<br>
(<a href="#" class="imk-cue" data-seek="2:26">00:02:26</a>)  で、次にWindow Resizerの設定をします。<br>
(<a href="#" class="imk-cue" data-seek="2:31">00:02:31</a>)  すでに既定値として、ご覧のように320以下ですね、<br>
(<a href="#" class="imk-cue" data-seek="2:38">00:02:38</a>)  この1920までが既定値としてあるのですけれども、<br>
(<a href="#" class="imk-cue" data-seek="2:43">00:02:43</a>)  サイズのですね、<br>
(<a href="#" class="imk-cue" data-seek="2:44">00:02:44</a>)  ところがやっぱり私としては、<br>
(<a href="#" class="imk-cue" data-seek="2:48">00:02:48</a>)  OBSの画面の右下のところに、翻訳が出るなら出したいので、<br>
(<a href="#" class="imk-cue" data-seek="2:54">00:02:54</a>)  もうちょっと小さいサイズのものを作りたいです。<br>
(<a href="#" class="imk-cue" data-seek="2:58">00:02:58</a>)  そこで819 x 614というものを作りたいと思うので、<br>
(<a href="#" class="imk-cue" data-seek="3:04">00:03:04</a>)  自分で作ります。<br>
(<a href="#" class="imk-cue" data-seek="3:07">00:03:07</a>)  このpresetsのところの、+のところを押して、<br>
(<a href="#" class="imk-cue" data-seek="3:12">00:03:12</a>)  そうすると別の画面に移行して設定ができます。<br>
(<a href="#" class="imk-cue" data-seek="3:16">00:03:16</a>)  で、それの設定が済みますと、<br>
(<a href="#" class="imk-cue" data-seek="3:19">00:03:19</a>)  このpresetsの一番上段のところに、<br>
(<a href="#" class="imk-cue" data-seek="3:23">00:03:23</a>)  今設定した新しいものが出てきます。<br>
(<a href="#" class="imk-cue" data-seek="3:34">00:03:34</a>)  Window Resizer設定のもう一つです。<br>
(<a href="#" class="imk-cue" data-seek="3:39">00:03:39</a>)  それは、hotkeysでpresetを設定します。<br>
(<a href="#" class="imk-cue" data-seek="3:46">00:03:46</a>)  presetの上から、<br>
(<a href="#" class="imk-cue" data-seek="3:49">00:03:49</a>)  presetが1,2,3,4,5...と順番が付いてますけども、<br>
(<a href="#" class="imk-cue" data-seek="3:54">00:03:54</a>)  これが先程のこの順番と対応してます。<br>
(<a href="#" class="imk-cue" data-seek="4:00">00:04:00</a>)  従って、<br>
(<a href="#" class="imk-cue" data-seek="4:01">00:04:01</a>)  今私が作った819 x 614は、<br>
(<a href="#" class="imk-cue" data-seek="4:07">00:04:07</a>)  この下の、Resize to preset 1 に対応しています。<br>
(<a href="#" class="imk-cue" data-seek="4:13">00:04:13</a>)  従って私はここに、登録しました。次に。<br>
(<a href="#" class="imk-cue" data-seek="4:25">00:04:25</a>)  もう一つ準備することがあります。<br>
(<a href="#" class="imk-cue" data-seek="4:29">00:04:29</a>)  Google Chromeで、<br>
(<a href="#" class="imk-cue" data-seek="4:31">00:04:31</a>)  「音声認識字幕ちゃん」を起動させるための、<br>
(<a href="#" class="imk-cue" data-seek="4:35">00:04:35</a>)  Appleスクリプトが必要になることです。<br>
(<a href="#" class="imk-cue" data-seek="4:40">00:04:40</a>)  それは既定ブラウザをChromeにしていない場合も多いためです。<br>
(<a href="#" class="imk-cue" data-seek="4:51">00:04:51</a>)  スクリプトは簡単です。<br>
(<a href="#" class="imk-cue" data-seek="4:54">00:04:54</a>)  tell application "Google Chrome"<br>
(<a href="#" class="imk-cue" data-seek="5:00">00:05:00</a>)  activate open location <br>
(<a href="#" class="imk-cue" data-seek="5:05">00:05:05</a>)  「音声認識字幕ちゃん」のURLを入れます。<br>
(<a href="#" class="imk-cue" data-seek="5:11">00:05:11</a>)  そして、end tell です。<br>
(<a href="#" class="imk-cue" data-seek="5:19">00:05:19</a>)  その設定したものを、Stream Deckへ登録します。<br>
(<a href="#" class="imk-cue" data-seek="5:26">00:05:26</a>)  Stream Deckで、マルチアクションという形で登録します。<br>
(<a href="#" class="imk-cue" data-seek="5:30">00:05:30</a>)  一つ目は、Chromeで、<br>
(<a href="#" class="imk-cue" data-seek="5:33">00:05:33</a>)  「音声認識字幕ちゃん」を開くAppleスクリプトです。<br>
(<a href="#" class="imk-cue" data-seek="5:40">00:05:40</a>)  二つ目は開いたChromeのサイズ合わせをします。<br>
(<a href="#" class="imk-cue" data-seek="5:48">00:05:48</a>)  先ほど設定したホットキーです。<br>
(<a href="#" class="imk-cue" data-seek="5:56">00:05:56</a>)  以上で設定は終わりです。<br>
(<a href="#" class="imk-cue" data-seek="6:00">00:06:00</a>)  で、Stream Deckからそのマルチアクションを起動します。<br>
(<a href="#" class="imk-cue" data-seek="6:05">00:06:05</a>)  そうすると下のようにですね、Chromeが立ち上がります。<br>
(<a href="#" class="imk-cue" data-seek="6:12">00:06:12</a>)  最初に立ち上げた時は、<br>
(<a href="#" class="imk-cue" data-seek="6:14">00:06:14</a>)  マイクの使用がまだ許可されてないと思いますので、<br>
(<a href="#" class="imk-cue" data-seek="6:18">00:06:18</a>)  それを許可します。<br>
(<a href="#" class="imk-cue" data-seek="6:21">00:06:21</a>)  そうすると以下のように表示されます。<br>
(<a href="#" class="imk-cue" data-seek="6:24">00:06:24</a>)  おはようございます<br>
(<a href="#" class="imk-cue" data-seek="6:26">00:06:26</a>)  Good morning、早上好。<br>
(<a href="#" class="imk-cue" data-seek="6:30">00:06:30</a>)  既にですね。第一翻訳語として英語、第二翻訳語として中国語を設定してあります。<br>
(<a href="#" class="imk-cue" data-seek="6:38">00:06:38</a>)  なのでこういうふうに出てきます。以上で準備が終わりまして、<br>
(<a href="#" class="imk-cue" data-seek="6:49">00:06:49</a>)  次のステップはこれをOBSへ取り込む、<br>
(<a href="#" class="imk-cue" data-seek="6:54">00:06:54</a>)  そういう流れになります。<br>
</p> </details>
<style>
details { font: 16px "Open Sans", Calibri, sans-serif; width: 100%; }
details > summary { padding: 2px 6px; width: 100%; background-color: #ddd; border: none; box-shadow: 3px 3px 4px black; cursor: pointer; list-style: none; }
details > p { font: 14px "Open Sans", Calibri, sans-serif; height:150px; overflow: scroll; background-color: #EDF7FF; padding: 2px 6px; margin: 0; box-shadow: 3px 3px 4px black; }
</style>
</div><script>
(function(){
  var root=document.querySelector(".dr5emd-sublist");
  var video=document.getElementById("myVideo");
  if(!root || !video) return;
  function parseTs(ts){
    if(!ts) return null;
    var p=ts.trim().split(":").map(function(x){return parseInt(x,10)||0;});
    if(p.length===2) return p[0]*60 + p[1];
    if(p.length===3) return p[0]*3600 + p[1]*60 + p[2];
    return null;
  }
  root.addEventListener("click", function(e){
    var a=e.target.closest && e.target.closest("a.imk-cue[data-seek]");
    if(!a || !root.contains(a)) return;
    e.preventDefault();
    var sec = parseTs(a.getAttribute("data-seek"));
    if(sec==null) return;
    try{ video.currentTime = sec; if(video.paused) video.play(); }catch(_){}
  });
  video.addEventListener("timeupdate", function(){
    var listContainer = root.querySelector("details > p");
    if(!listContainer) return;
    var cues = listContainer.querySelectorAll("a.imk-cue");
    if(cues.length === 0) return;
    var cur = video.currentTime;
    var active = null;
    for(var i=0; i<cues.length; i++){
        var t = parseTs(cues[i].getAttribute("data-seek"));
        if(t !== null && cur >= t - 0.5){
            active = cues[i];
        } else if(t > cur){
            break;
        }
    }
    if(active){
        if(active.classList.contains("active-hl")) return;
        var old = listContainer.querySelectorAll(".active-hl");
        for(var k=0; k<old.length; k++) old[k].classList.remove("active-hl");
        active.classList.add("active-hl");
        if(listContainer.offsetParent !== null){
            var containerRect = listContainer.getBoundingClientRect();
            var activeRect = active.getBoundingClientRect();
            var targetScroll = listContainer.scrollTop + (activeRect.top - containerRect.top) - (listContainer.clientHeight / 2) + (active.clientHeight / 2);
            listContainer.scrollTo({ top: targetScroll, behavior: "smooth" });
        }
    }
  });
})();
</script>
                </div>

  <script>
  (function(){
    var me = document.currentScript;
    var wrapper = me ? me.closest('.sc-dynamic-embed') : null;

    /* -----------------------------------------------
       1. ダウンロードボタンの自動セットアップ機能
       ----------------------------------------------- */
    function setupDownloadButton() {
      var target = wrapper ? wrapper : document;
      var video = target.querySelector('video');
      var dlBtn = target.querySelector('#imk-dynamic-dl-btn');

      if (video && dlBtn && dlBtn.style.display === 'none') {
        var src = video.currentSrc || video.src;
        if (!src) {
          var source = video.querySelector('source');
          if (source) src = source.src;
        }
        if (src) {
          dlBtn.href = src;
          dlBtn.style.display = 'inline-block';
        }
      }
    }

    /* -----------------------------------------------
       2. 字幕制御＆ハイライト機能（iPhone全画面 完全対応版）
       ----------------------------------------------- */
    function initSubtitles() {
      var target = wrapper ? wrapper : document;
      var video = target.querySelector('video');
      var listContainer = target.querySelector('details > p');
      
      if (!video || !listContainer) return false; 

      if (video.dataset.subInit === 'true') return true; 
      video.dataset.subInit = 'true';

      var oldOverlay = target.querySelector('#subtitleOverlay') || target.querySelector('#scSubtitleOverlay');
      if (oldOverlay) {
          oldOverlay.style.setProperty('display', 'none', 'important');
          oldOverlay.innerHTML = ''; 
      }

      function isSpecialMode() {
        var isFs = !!(document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement);
        var isPiP = !!(document.pictureInPictureElement && document.pictureInPictureElement === video) || (video.webkitPresentationMode === "picture-in-picture");
        var isIOSFs = !!video.webkitDisplayingFullscreen; 
        return isFs || isPiP || isIOSFs;
      }

      try {
        if(video.textTracks && video.textTracks.length > 0){
          for(var i=0; i<video.textTracks.length; i++){
             if(video.textTracks[i].kind === 'subtitles' || video.textTracks[i].kind === 'captions'){
                 video.textTracks[i].mode = "hidden";
             }
          }
        }
      } catch(e){}

      video.addEventListener("webkitbeginfullscreen", function() {
          try {
              if(video.textTracks && video.textTracks.length > 0) {
                  for(var i=0; i<video.textTracks.length; i++){
                      if(video.textTracks[i].kind === 'subtitles' || video.textTracks[i].kind === 'captions') video.textTracks[i].mode = "showing";
                  }
              }
          } catch(e){}
      });
      video.addEventListener("webkitendfullscreen", function() {
          try {
              if(video.textTracks && video.textTracks.length > 0) {
                  for(var i=0; i<video.textTracks.length; i++){
                      if(video.textTracks[i].kind === 'subtitles' || video.textTracks[i].kind === 'captions') video.textTracks[i].mode = "hidden";
                  }
              }
          } catch(e){}
      });

      var detailsEl = target.querySelector("details");
      if (detailsEl) {
          detailsEl.open = true; 
          var summaryEl = detailsEl.querySelector("summary");
          if (summaryEl) summaryEl.textContent = "字幕(シーン)はここをクリック";
      }

      if (!listContainer.dataset.formatted) {
          var html = listContainer.innerHTML;
          var lines = html.split(/<br\s*\/?>/i);
          var newHtml = "";
          for(var j=0; j<lines.length; j++) {
              if(lines[j].trim() === "") continue;
              newHtml += "<span class='imk-line'>" + lines[j] + "</span><br>";
          }
          listContainer.innerHTML = newHtml;
          listContainer.dataset.formatted = "true";
      }

      function parseTs(ts){
        if(!ts) return null;
        var p = ts.trim().split(":").map(function(x){return parseInt(x,10)||0;});
        if(p.length===2) return p[0]*60 + p[1];
        if(p.length===3) return p[0]*3600 + p[1]*60 + p[2];
        return null;
      }

      var rootSublist = target.querySelector(".dr5-sublist") || listContainer.parentElement;
      if (rootSublist) {
        rootSublist.addEventListener("click", function(e){
          var a = e.target.closest && e.target.closest("a.imk-cue[data-seek]");
          if(!a) return;
          e.preventDefault();
          var sec = parseTs(a.getAttribute("data-seek"));
          if(sec==null) return;
          try{ video.currentTime = sec; if(video.paused) video.play(); }catch(_){}
        });
      }

      video.addEventListener("timeupdate", function(){
        var desiredMode = isSpecialMode() ? "showing" : "hidden";
        try {
            if(video.textTracks && video.textTracks.length > 0){
                for(var i=0; i<video.textTracks.length; i++){
                    if((video.textTracks[i].kind === 'subtitles' || video.textTracks[i].kind === 'captions') && video.textTracks[i].mode !== desiredMode) {
                        video.textTracks[i].mode = desiredMode;
                    }
                }
            }
        } catch(e){}

        var cues = listContainer.querySelectorAll("a.imk-cue");
        if(cues.length === 0) return;
        var cur = video.currentTime;
        var activeA = null;

        for(var i=0; i<cues.length; i++){
            var t = parseTs(cues[i].getAttribute("data-seek"));
            if(t !== null && cur >= t - 0.5){ activeA = cues[i]; } 
            else if(t > cur){ break; }
        }

        if(activeA){
            var activeLine = activeA.closest(".imk-line");
            if(!activeLine) activeLine = activeA;

            if(activeLine.classList.contains("active-hl")) return;

            var allLines = listContainer.querySelectorAll(".imk-line");
            for(var k=0; k<allLines.length; k++) {
                allLines[k].classList.remove("active-hl");
                allLines[k].removeAttribute("style"); 
            }
            var allLinks = listContainer.querySelectorAll("a");
            for(var m=0; m<allLinks.length; m++) {
                allLinks[m].classList.remove("active-hl");
                allLinks[m].removeAttribute("style"); 
            }

            activeLine.classList.add("active-hl");
            activeLine.style.setProperty("background-color", "#ffff00", "important");
            activeLine.style.setProperty("color", "red", "important");
            activeLine.style.setProperty("font-weight", "normal", "important");
            
            var newLinks = activeLine.querySelectorAll("a");
            for(var n=0; n<newLinks.length; n++) {
                newLinks[n].style.setProperty("color", "red", "important");
                newLinks[n].style.setProperty("text-decoration", "none", "important");
            }

            if(listContainer.offsetParent !== null){
                var containerRect = listContainer.getBoundingClientRect();
                var activeRect = activeLine.getBoundingClientRect();
                var targetScroll = listContainer.scrollTop + (activeRect.top - containerRect.top) - (listContainer.clientHeight / 2) + (activeLine.clientHeight / 2);
                listContainer.scrollTo({ top: targetScroll, behavior: "smooth" });
            }
        }
      });

      return true;
    }

    /* -----------------------------------------------
       監視タイマー（URL抜き出し＆ボタン表示を継続的に実行）
       ----------------------------------------------- */
    var checks = 0;
    var checkTimer = setInterval(function(){
      setupDownloadButton();
      var success = initSubtitles();
      checks++;
      if (success || checks > 20) { 
        clearInterval(checkTimer);
      }
    }, 500); 

    /* -----------------------------------------------
       3. 画面遷移時の停止機能
       ----------------------------------------------- */
    if (!window.scStopAndGo) {
      window.scStopAndGo = function(event, link){
        try{
          var mediaEls = document.querySelectorAll('video, audio');
          mediaEls.forEach(function(m){
            try{
              if (!m.paused) m.pause();
              if (document.pictureInPictureElement === m && document.exitPictureInPicture) {
                document.exitPictureInPicture().catch(function(){});
              }
            }catch(e){}
          });
        }finally{
          event.preventDefault();
          setTimeout(function(){
            if (link.target === '_blank') {
              window.open(link.href, '_blank');
            } else {
              window.location.href = link.href;
            }
          }, 50);
        }
        return false;
      };
    }
  })();
  </script>
</div>



<hr class="wp-block-separator has-text-color has-key-color-color has-alpha-channel-opacity has-key-color-background-color has-background is-style-dots"/>



<p>最近、ちまたでもスマホの翻訳アプリ、翻訳機器などを目にすることが多くなってきました。しかも同時翻訳までできてしまうのには驚きです。ただ、いざ使おうと思うと、最初はお試しで無料ですが、有料に誘われます。しかもこの翻訳系のサービスは、サブスクが殆どで、毎月料金が発生する形になります。しかもその提供会社はたいていは海外の会社でUSドルベースが多く、円支払いでは毎月3000~5000円などと高額になり、趣味の域を超えます。</p>



<p>今回紹介する「音声認識字幕ちゃん」は、大学の教員をされている西村良太さんが個人で開発され一般に公開されている、<strong>「Webベースの、文字起こし＋同時翻訳アプリ」です。大変使いやすくしかも無料</strong>です。西村さんには感謝申し上げます。</p>



<p>このサイトで提供されている起動用アプリですが、Windows用のbatファイルは直接に動作するので使いやすいですが、Macはそのままクリックしても動かずシェルスクリプトでアプリ化して動かすようにしました。</p>



<figure class="wp-block-image size-large"><a href="https://imakat.com/rd.php?id=6Tp6Gvsb.png" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=6Tp6Gvsb.png" alt=""/></a><figcaption class="wp-element-caption">MacのAutomatorを起動→アプリケーションを選択→シェルスクリプトを実行を選択→「音声認識字幕ちゃん」からダウンロードしたmac用起動ファイルjimakuChan_nonStop.commandをテキストエディタで開く→最初の#!/bin/shの部分を除いて、Automatorへペースト→xxxxxx.appを作成。</figcaption></figure>



<p>Macは一手間増える感じもありますが、異なる設定条件の複数の字幕ちゃんを起動できるのは素晴らしいことです。</p>



<p>但し、OBSに組み込んで使う時などは、都度、翻訳なしにしたり、言語を切り替えたりすることもありそうで、そうした自由度は、<strong>Webベースの中で、設定を変更できる方が、都合がいい</strong>と思い、今回は、Webをそのまま使うような流れを考えてみました。</p>



<p>但し、日本語の認識、及び、翻訳のレベルは、それほど高いとは言えず、語学を勉強された方からすれば、不満でしょう。標準語でゆっくり話す必要があります。またネットワークの状況で認識の感度が振れます。補助的な用途としてであれば、使い物になるでしょう。</p>



<h3 class="wp-block-heading">ポイント解説</h3>



<p>ビデオを補足します。</p>



<h4 class="wp-block-heading">１　「音声認識字幕ちゃん」はGoogle Chromeで起動する。</h4>



<p>同時翻訳を行う場合は、Google Script API-KEYが必要です。その取得については、</p>




<a rel="noopener" target="_blank" href="http://www.sayonari.com/trans_asr/index_asr.html" title="&#38899;&#22768;&#35469;&#35672;&#23383;&#24149;&#12385;&#12419;&#12435;&#12539;&#12481;&#12515;&#12483;&#12488;&#32763;&#35379;&#12385;&#12419;&#12435;&#65288;&#35199;&#26449;&#33391;&#22826;&#65289;" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://s.wordpress.com/mshots/v1/http%3A%2F%2Fwww.sayonari.com%2Ftrans_asr%2Findex_asr.html?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">&#38899;&#22768;&#35469;&#35672;&#23383;&#24149;&#12385;&#12419;&#12435;&#12539;&#12481;&#12515;&#12483;&#12488;&#32763;&#35379;&#12385;&#12419;&#12435;&#65288;&#35199;&#26449;&#33391;&#22826;&#65289;</div><div class="blogcard-snippet external-blogcard-snippet">認識ちゃん・翻訳ちゃん（西村良太）</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=http://www.sayonari.com/trans_asr/index_asr.html" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">www.sayonari.com</div></div></div></div></a>



<p>の説明に従ってください。</p>



<figure class="wp-block-image size-large"><a href="https://imakat.com/rd.php?id=wta9OmaN.png" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=wta9OmaN.png" alt=""/></a></figure>



<p></p>



<h4 class="wp-block-heading">２　Google Chromeの起動時のウインドウサイズを固定できるようにする。</h4>



<p>「音声認識字幕ちゃん」の緑色の字幕欄を、OBSでウインドウキャプチャーして、読み込むことを想定していますが、もともとブラウザは、自由にフニャフニャとウインドウサイズを動かすように出来ているため、それを固定させるのが起動用アプリのわけですが、設定変更の自由度が欲しいのとMacの場合の手間の多さから、ブラウザの中の緑色の字幕欄のサイズを固定させて、ブラウザの中で、フォントを変更するようにしたいわけです。</p>



<p>そのために,ウィンドウサイズを自由に追加登録して、それをホットキーで選択できるプラグイン、Window Resizerを使います。</p>



<figure class="wp-block-image size-large"><a href="https://imakat.com/rd.php?id=ym4aFu3U.png" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=ym4aFu3U.png" alt=""/></a></figure>



<p></p>



<h4 class="wp-block-heading">３　「音声認識字幕ちゃん」を起動させるためのAppleスクリプトを作る。</h4>



<p>私の場合は、既定ブラウザはSafariにしています。確かに、Safariでは、「音声認識字幕ちゃん」の文字起こし翻訳が起動しません。「音声認識字幕ちゃん」のURLはChromeと紐付けする必要があります。</p>



<p>Appleスクリプトは簡単です。</p>



<figure class="wp-block-image size-large"><a href="https://imakat.com/rd.php?id=kmoY8RQO.png" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=kmoY8RQO.png" alt=""/></a></figure>



<p></p>



<p></p>



<h4 class="wp-block-heading">4　Stream Deckへマルチアクションとして登録する。</h4>



<p>二つのアクションを登録します。一つ目は、Chromeで「音声認識字幕ちゃん」を開く、Appleスクリプトです。二つ目は、そのChromeのサイズを合わせるアクションです。私はStream Deckを使いますが、他にもホットキー、ショートカットを登録できるアプリがありますので、活用ください。</p>



<figure class="wp-block-image size-large"><a href="https://imakat.com/rd.php?id=BUi2Uokj.png" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=BUi2Uokj.png" alt=""/></a></figure>



<h4 class="wp-block-heading">５　Stream Deckからマルチアクションを起動する。</h4>



<p>Webベースで起動すると、後から簡単に変更ができるので便利です。翻訳言語の変更削除、フォントの変更などがラクです。</p>



<figure class="wp-block-image size-large"><a href="https://imakat.com/rd.php?id=eTAfWvX7.png" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=eTAfWvX7.png" alt=""/></a></figure>



<p></p>



<figure class="wp-block-image size-large"><a href="https://imakat.com/rd.php?id=oiKYNIrO.png" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=oiKYNIrO.png" alt=""/></a></figure>



<h4 class="wp-block-heading">６　まとめ</h4>



<p>器材記録</p>



<p>音声認識字幕ちゃん<br>Google Chrome<br>Window Resizer ( Chromeプラグイン)<br>Mac スクリプトエディタ<br>Stream Deck<br><br>Adobe Character Animator(スターター)<br>Final Cut Pro<br>Vrew(無料)<br>フリーボード<br>Mac mini M2<br>BGM: オリジナル音楽</p>



<p>以上です。</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">18463</post-id>	</item>
		<item>
		<title>MacWindowsのバックアップ方法と周辺機器の共用</title>
		<link>https://imakat.com/2023/10/23/18300/</link>
		
		<dc:creator><![CDATA[imakat]]></dc:creator>
		<pubDate>Mon, 23 Oct 2023 05:22:13 +0000</pubDate>
				<category><![CDATA[デジタル]]></category>
		<category><![CDATA[ものづくり]]></category>
		<category><![CDATA[Mac mini]]></category>
		<category><![CDATA[STREAM DECK]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[UM590]]></category>
		<category><![CDATA[KVM]]></category>
		<category><![CDATA[KVM付きモニター]]></category>
		<category><![CDATA[UR24C]]></category>
		<category><![CDATA[Windows]]></category>
		<guid isPermaLink="false">https://imakat.com/?p=18300</guid>

					<description><![CDATA[＜その１＞　Mac,Windowsのバックアップ方法 ポイント解説 ビデオを補足します。 １　Time Machineは複数箇所へバックアップが行える。 Macのバックアップの定番であるTime Machineアプリは、 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<hr class="wp-block-separator has-text-color has-key-color-color has-alpha-channel-opacity has-key-color-background-color has-background is-style-wide"/>



<h5 class="wp-block-heading">＜その１＞　Mac,Windowsのバックアップ方法</h5>



<div style="position:relative;">
<iframe src="https://player.vimeo.com/video/876599793?texttrack=ja&amp;title=0&amp;&#10;byline=0&amp;&#10;muted=0&amp;&#10;pip=1&amp;&#10;portrait=0&amp;&#10;autopause=0&amp;" style="position:absolute;top:0;
left:0;
width:100%;
height:100%;
" frameborder="0" allow="autoplay;
fullscreen" allowfullscreen="">
</iframe>
</div>
<script src="https://player.vimeo.com/api/player.js">
</script>



<hr class="wp-block-separator has-text-color has-key-color-color has-alpha-channel-opacity has-key-color-background-color has-background is-style-dots"/>



<h3 class="wp-block-heading">ポイント解説</h3>



<p>ビデオを補足します。</p>



<h4 class="wp-block-heading">１　Time Machineは複数箇所へバックアップが行える。</h4>



<p>Macのバックアップの定番であるTime Machineアプリは、おそらく殆どのMacユーザーが利用していると思います。</p>



<p>しかし、複数箇所へ行えるのは知らない人も多いのではと思います。バックアップ先の登録を複数行えるようになっています。私は、一つは、ほぼほぼ直結したHDDへ、それからもう一つは、有線LANで繋げた別の部屋にあるNASへ、登録しています。登録さえすればあとは何もすることはありません。Time Machineが自動的に、1時間ごとに交互に、バックアップを行うようになっています。</p>



<p>Windowsの複数箇所の設定は、スケジュールと保存先をセットにしたものを複数登録できる形になっています。MacのTime Machineの設定はシンプルで設定項目が殆どないのと比べて、Windowsは設定が複雑で設定項目が多いのがちょっと面倒です。私はNAS1箇所のみへバックアップしています。</p>



<h4 class="wp-block-heading">２　Mac miniと接続するのはThunderbolt4ケーブル1本のみ</h4>



<p>以前はMac miniのコネクタ類を全部埋め尽くすように差し込んでいましたが、Mac miniを機種交換するような場合、面倒な周辺機器の接続を考えることなくサクッと交換出来るように、改善しました。接続するのはThunderbolt4ケーブル1本のみにしました。SSDの高速処理を維持するとThunderboltハブが必要になりますが仕方ありません。また機器の共用のために、KVM機能を導入しました。</p>



<figure class="wp-block-image size-large"><a href="https://imakat.com/rd.php?id=RmzHRiz7.JPG" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=RmzHRiz7.JPG" alt=""/></a></figure>



<p></p>



<h5 class="wp-block-heading">＜その２＞　Mac,Windows,iPadの周辺機器の共用について</h5>



<div style="position:relative;">
<iframe src="https://player.vimeo.com/video/876947843?texttrack=ja&amp;title=0&amp;&#10;byline=0&amp;&#10;muted=0&amp;&#10;pip=1&amp;&#10;portrait=0&amp;&#10;autopause=0&amp;" style="position:absolute;top:0;
left:0;
width:100%;
height:100%;
" frameborder="0" allow="autoplay;
fullscreen" allowfullscreen="">
</iframe>
</div>
<script src="https://player.vimeo.com/api/player.js">
</script>



<hr class="wp-block-separator has-text-color has-key-color-color has-alpha-channel-opacity has-key-color-background-color has-background is-style-dots"/>



<h3 class="wp-block-heading">ポイント解説</h3>



<p>ビデオを補足します。</p>



<h4 class="wp-block-heading">１　切り替えを簡単にするのがミソ</h4>



<p>KVMはKeyboard,Video,Mouseの略で、そうした周辺機器を1台だけ用意して共用する、そのための接続機器です。私は、DELL U2723QXという、モニター、KVM機器、ハブが一体になっているものを使っています。キーボードもマウスも映像が見えなければ何も出来ません。その意味では、KVM(Keyboard,Video,Mouse)は１セットにして共用するのは納得ですが、後述しますが、ネットワークや機器をまたがってファイル更新する場合などは別の注意が必要です。</p>



<p>共用している周辺機器が12台にもなっているわけですが、こうした扱いを可能にしている貢献者は、KVM機能、ハブ、STREAM DECK、この３つです。</p>



<figure class="wp-block-image size-large"><a href="https://imakat.com/rd.php?id=NlbrvBqg.png" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=NlbrvBqg.png" alt=""/></a></figure>



<p>KVMを操作するアプリをMac,Windows各々にインストールしているので、WinMacの切り替えを、そこから操作できますが、ちょっと面倒です。STREAM DECKを使えば、もっと直感的に、ボタンを押すだけで切り替わります。（なお、command+F1でWinMac間を移動出来ます。）</p>



<figure class="wp-block-image size-large"><a href="https://imakat.com/rd.php?id=aTmY78vA.png" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=aTmY78vA.png" alt=""/></a></figure>



<h4 class="wp-block-heading">2　有線LAN(Ethernet)はパソコン毎に接続しておく方がいいと思う。</h4>



<p>モニターに有線LANが繋がるのは一見すると便利なようですが、例えばMacとNAS間でファイル更新を行なっている最中に、モニターの電源を落とした時、寸断されてしまいます。Macの電源を落とした時に、ファイル更新が寸断されるのは当然のことと認識できますが、モニターを切ったらファイル更新が寸断されるとは、ふつうは予想できないです。何か疲れますよね、この動き。</p>



<p><strong>実はこれは、一般ユーザーの中にある既視感でして、一般ユーザーは、「テレビの電源を切っても、ビデオの録画は寸断されない。」そう学習してしまったパブロフの犬なのです。そしてそれが、一般ユーザーにとって、「ストレスのない素直な動き」として身についています。</strong></p>



<p>ですから、有線LAN(Ethernet)をパソコン毎に接続するのが、自然なお作法、と申せましょう。</p>



<figure class="wp-block-image size-large"><a href="https://imakat.com/rd.php?id=ijZV0zzy.png" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=ijZV0zzy.png" alt=""/></a></figure>



<h4 class="wp-block-heading">3　裏方で頑張るオーディオインターフェース</h4>



<p>私は音楽制作をやるので、オーディオインターフェースは馴染みですが、そうでもない限り、マイク、スピーカー、ヘッドホンは、モニターに付いているハブから引っ張ってくればいい。そのまま、共用して使えるはずだ。ふつうはそのように考えるでしょう。</p>



<p>しかしこれが案外厄介。ストレス源になるのです。音圧調整、音量の調節がとても面倒なのです。Mac,Windows,iPadそれぞれ側での音量が出てきますので、いちいち、アプリの音量レバーを調整することになります。そこで、オーディオインターフェースが助っ人になります。これを机の下に置きます。そして、<strong>左手で、手探りで</strong>、スピーカー、ヘッドホンそれぞれの<strong>音量を調整します。即、調整します</strong>。だから、左手に置くなら、右端にスピーカーの音量調節のノブがある、その左隣にヘッドホンの音量調節のノブがある、そのような配置のオーディオインターフェースを購入することが大事です。</p>



<div class="wp-block-cocoon-blocks-column-2 column-wrap column-2 column-2-2-1-1 layout-box">
<div class="wp-block-cocoon-blocks-column-left column-left">
<figure class="wp-block-video aligncenter">
<video controls="" muted=""   poster="https://imakat.synology.me/wp-content/pmedia/スクリーンショット_2023-10-25_8.28.26.png" src="https://imakat.synology.me/wp-content/mmedia/2023-05-06_07.53.47-mp4-512x288_10fps_AAC中.mp4" playsinline=""></video>
</figure>
</div>



<div class="wp-block-cocoon-blocks-column-right column-right"></div>
</div>



<p>上面にノブがあるタイプは、机の上に置くので、机の上が狭くなりますので、要注意です。なお、マイクについては最初に設定したらあまり変えることはないと思います。</p>



<figure class="wp-block-image size-large"><a href="https://imakat.com/rd.php?id=izFRKOYk.png" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=izFRKOYk.png" alt=""/></a></figure>



<p>私は、パソコン類を共用する時の、ストレス軽減のための最も重要な機器は、オーディオインターフェースだと思います。</p>



<p>以上です。</p>
]]></content:encoded>
					
		
		<enclosure url="https://imakat.synology.me/wp-content/mmedia/2023-05-06_07.53.47-mp4-512x288_10fps_AAC中.mp4" length="4742300" type="video/mp4" />

		<post-id xmlns="com-wordpress:feed-additions:1">18300</post-id>	</item>
		<item>
		<title>【Final Cut Pro】起動時の余分な入力を省略する方法〜STREAM DECKの利用〜</title>
		<link>https://imakat.com/2023/06/17/17149/</link>
		
		<dc:creator><![CDATA[imakat]]></dc:creator>
		<pubDate>Sat, 17 Jun 2023 08:48:03 +0000</pubDate>
				<category><![CDATA[デジタル]]></category>
		<category><![CDATA[ものづくり]]></category>
		<category><![CDATA[cubase]]></category>
		<category><![CDATA[STREAM DECK]]></category>
		<category><![CDATA[Macmini]]></category>
		<category><![CDATA[FinalCutPro]]></category>
		<category><![CDATA[GPU]]></category>
		<category><![CDATA[遅延]]></category>
		<category><![CDATA[Appleシリコン]]></category>
		<guid isPermaLink="false">https://imakat.com/?p=17149</guid>

					<description><![CDATA[上のビデオをご覧ください。 ５年近く使ってきたIntel Mac miniから、新しいM2 Mac miniへ移行しました。数多く語られている「AppleシリコンMacへの移行時のトラブル」ですが、私としてもブログへ備忘 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<hr class="wp-block-separator has-text-color has-key-color-color has-alpha-channel-opacity has-key-color-background-color has-background is-style-wide"/>


<div class="sc-vimeo-embed">
  <p style="font-size: 14px;" class="sc-link">
    <a href="https://imakat.com/vm5?movid=836820927" target="_blank" onclick="stopVimeoBeforeNavigate(event, this)">
      動画を別ページで表示(ここをクリック)
    </a>
  </p>

  <div class="iframe-wrapper">
    <iframe
      src="https://player.vimeo.com/video/836820927?title=0&byline=0&portrait=0&controls=1&speed=1&texttrack=ja&dnt=1&loop=0"
      frameborder="0"
      allow="autoplay; fullscreen; picture-in-picture"
      allowfullscreen></iframe>
  </div>

  <div class="dr-vimeo-sublist">
    <details>
  <summary>字幕情報を表示します。</summary>
  <p>
<!-- 以下から書き出し -->
〜「Final Cut Proの起動時のGPU確認入力を省略する方法」〜<br>
1. Final Cut Proを起動した時、毎回、警告が出るようになりました。<br>
2. 「新しいGPUに切り替わりますが、いいですか？」と毎回聞かれるようになりました。<br>
3. これを自動的にOKになるようにしたいと思います。<br>
4. 症状を再現します。Final Cut Proを起動します。<br>
5. 選択したGPUは使用できません。選択したGPUは電源が入っていないか、使用できなくなりました。デフォルトのGPUが使用されます。<br>
6. 私としては、その通りOKで何ら問題ありません。<br>
7. Final Cut Proを起動する時、毎回、OKを押さなければなりません。<br>
8. 以前私は、Intel Mac miniを使っていました。その時、動画編集のために、外付けのeGPUを使っていました。最近、新たに、M2 Mac miniへ移行しました。<br>
9. その時に、Time Machineを使って、そのまま移行しました。<br>
10. eGPUがあるものとして引き継がれました。そのためこの現象が生じています。これをリセットする方法がなかなか見当たらず、仕方なく。。。<br>
11. それでは、対処をしていきます。<br>
12. STREAM DECKを使ってみます。<br>
13. 「マルチアクション」を使います。<br>
14. 「開く」を挿入します。<br>
15. 開くアプリケーションにFinal Cut Proを選択します。<br>
16. Final Cut Proが起動したあと、OKにするのは、Enterキーを入力します。<br>
17. 「ホットキー」を挿入します。<br>
18. ホットキーの項目をクリックすると、キーストロークを監視中になります。→enterを押します。<br>
19. 実行してみます。<br>
20. 反応が早すぎるので、OKの手前で止まってしまいます。<br>
21. ゆっくり動作するように遅延させるようにします。<br>
22. 「遅延」を、「開く」と「ホットキー」の間に挟み込みます。<br>
23. 再度、実行を試してみます。<br>
24. 正常に動作しました。<br>
25. 一応、完成しましたが、アイコンを作っておきます。<br>
26. Final Cut Proのアイコンを挿入します。<br>
27. タイトルを、Final Cutとして上段に表示するようにします。<br>
28. こんな感じに出来上がりました。<br>
29E. 「STREAM DECKを利用して、Final Cut Proをスムーズに起動させよう！」でした。<br>
<!-- 以上まで書き出し -->
</p>
</details>

<style>
details {
  font: 16px "Open Sans", Calibri, sans-serif;
  width: 100%;
}

details > summary {
  padding: 2px 6px;
 width: 100%; 
 border-radius: 5px 5px 5px 5px;
  background-color: #ddd;
  border: none;
  box-shadow: 3px 3px 4px black;
  cursor: pointer;
  list-style: none;
}

details > p {
  font: 14px "Open Sans", Calibri, sans-serif;
  height:200px;
  overflow: scroll;
 border-radius: 5px 5px 5px 5px;
  background-color: #EDF7FF;
  padding: 2px 6px;
  margin: 0;
  box-shadow: 3px 3px 4px black;
}
</style>
  </div>

  <script src="https://player.vimeo.com/api/player.js"></script>

  <script>
  (function(){
    var me = document.currentScript;
    var wrapper = me ? me.closest('.sc-vimeo-embed') : null;

    var target = wrapper ? wrapper : document;
    var iframe = target.querySelector('iframe');
    if (!iframe || !window.Vimeo || !Vimeo.Player) return;

    var player = new Vimeo.Player(iframe);

    /* --- 1. 確実に一時停止してから別ページを開く処理 --- */
    window.stopVimeoBeforeNavigate = function(event, link) {
      event.preventDefault(); 
      player.pause().then(function() {
        setTimeout(function() {
           window.open(link.href, link.target);
        }, 50);
      }).catch(function() {
        window.open(link.href, link.target);
      });
    };

    /* --- 2. 字幕のON/OFF制御（Vimeo API仕様） --- */
    var currentMode = "hidden";
    
    function useNormalMode() {
        currentMode = "hidden";
        player.disableTextTrack().catch(function(e){});
    }
    
    function useSpecialMode() {
        currentMode = "showing";
        // 日本語の subtitles が無ければ captions を探す安全設計
        player.enableTextTrack('ja', 'subtitles').catch(function() {
            player.enableTextTrack('ja', 'captions').catch(function() {});
        });
    }

    // ロード直後は枠内字幕を非表示にする
    player.ready().then(function() {
        useNormalMode();
    });

    // Vimeoプレーヤーの全画面・PiPイベントを監視して字幕を切り替え
    player.on('fullscreenchange', function(data) {
        if (data.fullscreen) useSpecialMode();
        else useNormalMode();
    });
    player.on('enterpictureinpicture', function() {
        useSpecialMode();
    });
    player.on('leavepictureinpicture', function() {
        useNormalMode();
    });

    /* --- 3. 字幕リストの初期化（自動梱包とデフォルト展開） --- */
    var checks = 0;
    var initTimer = setInterval(function(){
        var listContainer = target.querySelector('details > p');
        if (listContainer) {
            initSubtitles(listContainer);
            clearInterval(initTimer);
        }
        checks++;
        if (checks > 20) clearInterval(initTimer); // 10秒経ったら監視終了
    }, 500);

    function initSubtitles(listContainer) {
        // デフォルトで開く
        var detailsEl = target.querySelector("details");
        if (detailsEl) {
            detailsEl.open = true; 
            var summaryEl = detailsEl.querySelector("summary");
            if (summaryEl) summaryEl.textContent = "字幕(シーン)はここをクリック";
        }

        // 行ごとに見えない箱(span)で梱包
        if (!listContainer.dataset.formatted) {
            var html = listContainer.innerHTML;
            var lines = html.split(/<br\s*\/?>/i);
            var newHtml = "";
            for(var j=0; j<lines.length; j++) {
                if(lines[j].trim() === "") continue;
                newHtml += "<span class='imk-line'>" + lines[j] + "</span><br>";
            }
            listContainer.innerHTML = newHtml;
            listContainer.dataset.formatted = "true";
        }
    }

    /* --- 4. クリックシーク機能 --- */
    function parseTs(ts) {
      if (!ts) return null;
      var t = ts.trim();
      var parts = t.split(':').map(function(v){ return parseInt(v, 10); });
      if (parts.length === 2 && parts.every(Number.isFinite)) {
        return parts[0] * 60 + parts[1];
      } else if (parts.length === 3 && parts.every(Number.isFinite)) {
        return parts[0] * 3600 + parts[1] * 60 + parts[2];
      }
      return null;
    }

    target.addEventListener('click', function(e) {
      var a = e.target.closest('a.imk-cue');
      if (!a) return;
      e.preventDefault();
      var sec = null;
      if (a.dataset.seconds) {
        sec = Number(a.dataset.seconds);
      } else if (a.dataset.seek) {
        sec = parseTs(a.dataset.seek);
      }
      if (sec !== null && Number.isFinite(sec)) {
        player.setCurrentTime(sec).then(function(){ player.play(); }).catch(function(){});
      }
    });

    /* --- 5. 同期ハイライトと自動スクロール --- */
    player.on('timeupdate', function(data) {
      // Vimeoプレーヤーが勝手に字幕を出していたら隠す（最強ガード）
      player.getTextTracks().then(function(tracks) {
          var activeTrack = tracks.find(function(t){ return t.mode === 'showing'; });
          if (currentMode === "hidden" && activeTrack) {
              useNormalMode();
          }
      }).catch(function(){});

      var currentTime = data.seconds;
      var listContainer = target.querySelector('details > p');
      if (!listContainer) return;

      var cues = listContainer.querySelectorAll('a.imk-cue');
      if (cues.length === 0) return;

      var activeA = null;
      for (var i = 0; i < cues.length; i++) {
        var sec = null;
        if (cues[i].dataset.seconds) {
            sec = Number(cues[i].dataset.seconds);
        } else if (cues[i].dataset.seek) {
            sec = parseTs(cues[i].getAttribute('data-seek'));
        }
        if (sec !== null && currentTime >= sec - 0.5) {
          activeA = cues[i];
        } else if (sec > currentTime) {
          break;
        }
      }

      if (activeA) {
          var activeLine = activeA.closest(".imk-line");
          if (!activeLine) activeLine = activeA;

          if (activeLine.classList.contains("active-hl")) return;

          // 全行の色を徹底的にリセット
          var allLines = listContainer.querySelectorAll(".imk-line");
          for(var k=0; k<allLines.length; k++) {
              allLines[k].classList.remove("active-hl");
              allLines[k].removeAttribute("style");
          }
          var allLinks = listContainer.querySelectorAll("a");
          for(var m=0; m<allLinks.length; m++) {
              allLinks[m].classList.remove("active-hl");
              allLinks[m].removeAttribute("style");
          }

          // 新しい行に赤文字・黄色背景を直接塗る
          activeLine.classList.add("active-hl");
          activeLine.style.setProperty("background-color", "#ffff00", "important");
          activeLine.style.setProperty("color", "red", "important");
          activeLine.style.setProperty("font-weight", "normal", "important");
          
          var newLinks = activeLine.querySelectorAll("a");
          for(var n=0; n<newLinks.length; n++) {
              newLinks[n].style.setProperty("color", "red", "important");
              newLinks[n].style.setProperty("text-decoration", "none", "important");
          }

          // スクロール処理
          if (listContainer.offsetParent !== null) {
              var containerRect = listContainer.getBoundingClientRect();
              var activeRect = activeLine.getBoundingClientRect();
              var targetScroll = listContainer.scrollTop + (activeRect.top - containerRect.top) - (listContainer.clientHeight / 2) + (activeLine.clientHeight / 2);
              listContainer.scrollTo({
                  top: targetScroll,
                  behavior: "smooth"
              });
          }
      }
    });
  })();
  </script>

  <style>
  .sc-vimeo-embed .iframe-wrapper {
    position: relative;
    padding-bottom: 56.25%;
    height: 0;
    overflow: visible;
  }
  .sc-vimeo-embed .iframe-wrapper iframe {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
  }

  /* 行梱包時の基本スタイル（干渉防止のためクラス内で指定） */
  .sc-vimeo-embed .imk-line {
      display: inline-block;
      width: 100%;
      border-radius: 2px;
      transition: background-color 0.1s;
  }

  /* ▼ 字幕一覧（details）の見た目調整 */
  .sc-vimeo-embed details > p {
    font-size: 14px !important;
    line-height: 1.6;
    height: 200px !important; 
    overflow: auto;
    background-color: #EDF7FF;
    padding: 2px 6px;
    margin: 0;
    box-shadow: 3px 3px 4px black;
    position: relative; 
  }
  .sc-vimeo-embed details > summary {
    font-size: 14px !important;
    padding: 2px 6px;
    width: 100%;
    background-color: #ddd;
    border: none;
    box-shadow: 3px 3px 4px black;
    cursor: pointer;
    list-style: none;
  }
  </style>
</div>



<p></p>



<hr class="wp-block-separator has-text-color has-key-color-color has-alpha-channel-opacity has-key-color-background-color has-background is-style-dots"/>



<p>上のビデオをご覧ください。</p>



<p>５年近く使ってきたIntel Mac miniから、新しいM2 Mac miniへ移行しました。数多く語られている「AppleシリコンMacへの移行時のトラブル」ですが、私としてもブログへ備忘録として残すようにします。今日はそのうちの一つを紹介します。まあ、トラブルのレベルとしては軽微です。</p>



<p>Intel Mac miniは動画のレンダリングが非力で、外付けeGPUを使っていました。M2 Mac miniは、そのGPUを内蔵したため、eGPUは不要となりました。それは、とても嬉しいことなのですけれどね<a rel="noopener" target="_blank" href="https://imakat.synology.me/wp-content/pmedia/スクリーンショット_2023-06-20_5.27.37.png">（図解）<span class="fa fa-external-link external-icon anchor-icon"></span></a>。</p>



<p></p>



<hr class="wp-block-separator has-text-color has-key-color-color has-alpha-channel-opacity has-key-color-background-color has-background is-style-wide"/>



<h3 class="wp-block-heading">ポイント解説</h3>



<h4 class="wp-block-heading">1 　STREAM DECKの「遅延」アクションは素晴らしい。</h4>



<p>今回、STREAM DECKを使いました。</p>



<p>掲載したビデオでは、「遅延」は、デフォルトの1000ミリ秒のままでした。しかし、この動画の撮影後、Macを再起動して、Final Cut Proを起動したところ、うまくいったりいかなかったりと不安定になりました。そこで6000ミリ秒に設定しました。その後、安定していて失敗はありません。</p>



<p>STREAM DECKは、子供の積み木やレゴの感覚で動作を組み立てる、そういった親しみやすさがありますが、<strong>この「遅延」という着想は</strong>、更に、素晴らしいです。まさに「さじ加減」「アナログ感覚」「チューニング感覚」を取り込んでいる点は、<strong>人間的でホッとします。</strong></p>



<figure class="wp-block-image size-large"><a href="https://imakat.com/rd.php?id=LQm9LysO.png" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=LQm9LysO.png" alt=""/></a></figure>



<p>これでうまく反応しない場合は、以下のように、再度、同じ設定を追加すると、大抵はうまくいくでしょう。それか、もう一度ボタンを押すと反応するでしょう。</p>



<figure class="wp-block-image size-large"><a href="https://imakat.com/rd.php?id=GiYopTnD.png" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=GiYopTnD.png" alt=""/></a></figure>



<p>アプリ中のルーチンなキー操作を行わせるのに、STREAM DECKを使いましたが、他の方法としては、Appleスクリプトを使うのが、機器が不要な、普通の手段かも知れません。あるいはLogicoolでMXキーボードを既にお持ちの方は、Smart Actions機能なるものが新たに提供され、キーボードに、こうした連続アクションを登録できるようですので便利そうですが、ただ、視認性という点では、STREAM DECKが優れているでしょう。</p>



<h4 class="wp-block-heading">２　AppleシリコンMac(例えばM2 Mac mini)への移行問題は、音楽制作(DTM)が最もやっかい。　</h4>



<p>今回、Intel Mac miniからM2 Mac miniへ移行したわけですが、動画制作については最高の評価ばかり語られていて、反面、音楽制作については、いい話は全く無く、特に、音源アプリ群の継承については難題だったわけです。とは言うものの、困難と騒がれたM1 Macが出た時から、既に数年経過してきて、メーカーの対応の進展、ユーザーの工夫なども進んできたので、移行を、決心した次第です。</p>



<p>しかし今後は、新しいものに飛びつくような事は、避けていきます。</p>



<div class="wp-block-cocoon-blocks-iconlist-box iconlist-box blank-box list-check block-box has-border-color has-key-color-border-color"><div class="iconlist-title">音楽制作をM2 Macへ移行する際の、私としての方針</div>
<ol class="wp-block-list has-yellow-background-color has-background">
<li>この際、過去の音楽データは、完成品、MIDIデータおよびオーディオ素材だけと割り切ること。</li>



<li>全部を復旧させるのは諦めて、再利用したいMIDIデータおよびオーディオデータのみを、新しい音源環境上で、工夫して利用すること。</li>



<li>(高齢者なので)使用頻度の低い音源メーカーは捨てて、頻度の高い二〜三社のメーカーに絞り込むこと。</li>
</ol>
</div>



<p>特に３番目についてですが、私も高齢者の部類に入ってきて感じるところですが、細かいことまで覚えられない、昔のことが思い出せない、そうした衰えがあります。また、最近の傾向として、音源プラグインの提供メーカーも単体販売からサブスクが増加しています。サブスクは、自分が使わない音源のコストも負担することになり、私のように、制作の頻度が低い人にとっては、割高過ぎます。いやサブスクを否定するわけではなく、サブスクを利用するようなメーカーは最小限に絞りたい。今回のような機器やOSの変更の機会があるごとに、物も情報も、断捨離・統合を行なって、少なく小さくすることが大切だと思います。もちろん、ITや音楽制作は、認知症予防に役に立ちますので、マイペースで続けていきます。</p>



<p>Cubaseなどの音楽制作アプリをM2 Mac miniで動かす上での課題と対策については、引き続き、ブログへ掲載するようにしたいと思います。</p>



<p>以上　</p>



<p></p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">17149</post-id>	</item>
		<item>
		<title>【STREAM DECK】目的別に作業をしながら〜ブラウザを切り替えて安全に使う</title>
		<link>https://imakat.com/2022/05/01/14886/</link>
		
		<dc:creator><![CDATA[imakat]]></dc:creator>
		<pubDate>Sun, 01 May 2022 01:51:16 +0000</pubDate>
				<category><![CDATA[デジタル]]></category>
		<category><![CDATA[SynologyNAS]]></category>
		<category><![CDATA[STREAM DECK]]></category>
		<category><![CDATA[Googleアカウント]]></category>
		<category><![CDATA[高齢者アクセシビリティ]]></category>
		<category><![CDATA[AppleScript]]></category>
		<category><![CDATA[テプラ]]></category>
		<guid isPermaLink="false">https://imakat.com/?p=14886</guid>

					<description><![CDATA[2022.12.24追記：Macの新OS,Venturaに更新しました。Elgato Stream Deck.appを再インストールしたら、一部、動作しない、ボタンのアイコンが変えられた、という状況になり手作業で修復して [&#8230;]]]></description>
										<content:encoded><![CDATA[
<hr class="wp-block-separator has-text-color has-key-color-color has-css-opacity has-key-color-background-color has-background is-style-wide"/>



<p>2022.12.24追記：Macの新OS,Venturaに更新しました。Elgato Stream Deck.appを再インストールしたら、一部、動作しない、ボタンのアイコンが変えられた、という状況になり手作業で修復しています。これに伴う項目の追加 <a rel="noreferrer noopener" href="#422" target="_blank">&lt;４&gt;-２）-２</a>。</p>



<hr class="wp-block-separator has-text-color has-key-color-color has-alpha-channel-opacity has-key-color-background-color has-background is-style-wide"/>



<p></p>



<p>＜STREAM DECKで目的別に作業を集約する＞<br><span class="fz-12px"><a href="https://imakat.com/page-220501/" target="_blank">別ページで表示</a></span></p>



<img decoding="async" src="https://docs.google.com/drawings/d/e/2PACX-1vSxTB34N8noebSc-TCNfzSEDyDcAU9uwHo-vZS_-y9LSt1Z-xScoTptqaqH-fvOx2k2QDoLTyCqxIq8/pub?w=1440&amp;h=1080">



<hr class="wp-block-separator has-text-color has-key-color-color has-css-opacity has-key-color-background-color has-background is-style-wide"/>



<p>高齢になってくると、次第に細かいことを覚えられなくなってきます。思い出せなくなってきます。</p>



<p>それから高齢になってくると、アクセルとブレーキを踏み間違えるような、重大な判断ミスを起こすリスクが高くなります。</p>



<p>よく言う知恵は「書いて貼っておけ！」。</p>



<p>最近、テプラをよく使うようになりました。</p>



<p>そこへ重なってくるのがIT化の波ですね。</p>



<p>今回は、YouTubeなどで紹介多数、映像や音楽クリエイターの中では大人気の「STREAM DECK」という製品なのですが、これは、まさに<strong>「テプラ」と「IT」の合体です。</strong>「<strong>高齢者のアクセシビリティの向上</strong>」という観点からも役に立つと思えるので、取り上げてみます。</p>



<h3 class="wp-block-heading">ポイント解説</h3>



<h4 class="wp-block-heading">＜1＞ ざっくり、STREAM DECKはどのように便利か</h4>



<p>パソコンで作業をするとき、何らかの操作を選択するのですが、普通は二つの方法があります。一つはアプリの上段か下段にあるメニューバーから「コピー」や「ペースト」を選ぶ、あと一つはキーボードのショートカット「⌘+C」、「⌘+V」を押す、です。ショートカットは慣れると何も意識せず手が動くようになるとはいえ、やはり「<strong>ボタンを押すだけ</strong>」の方が早いと思います。</p>



<p>あまり機会はないと思いますが、例えば、決まった箇所のセルを選択する→数字を入れる→結果のセルへ行く→結果をコピーする→別の箇所へペーストする。この作業を1000回やるとしたら、４つの動作をボタンに設定できたら便利です。</p>



<p>それではCOMさんの紹介ビデオをご覧ください。</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="STREAM DECKが便利すぎて全パソコンユーザーにオススメ【elgato | PC周辺機器】" width="1256" height="707" src="https://www.youtube.com/embed/LxUCKS618Xo?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p>COMさんのビデオは、この製品の機能の魅力に焦点を当てた紹介になっています。他の方には、Zoomを使う、配信する、動画制作、音楽制作、といったある種の作業のカタマリをこの盤面に載せる方法を紹介するビデオになっているものも多いです。</p>



<p>私の紹介も「なるほど」と思ってもらえれば嬉しいです。</p>



<h4 class="wp-block-heading">＜２＞ヤドカリ型業務の置き場所として</h4>



<p>今回私は、業務の塊の一つとして自治会業務を持ってきましたが、PTA、サークル活動、組合、NPOなど何でも同じことです。それで、そうした組織活動において三役・部長など役職になる場合は、任期末に後任に役職の仕事を引き渡すことになります。殆どの組織は小さく、事務員も事務所もありませんので、紙ファイルをドンと手渡しです。この紙ファイルをドンと手渡しされる→作業をする→紙ファイルをドンと次の人へ手渡しする、この基本の流れは変わりませんが。しかし、エコ社会実現に向け、「紙ファイル」の部分は、「データそのものは電子化され、必要に応じて印刷したりパソコンに表示したりする」という形に変化が進んでいます。</p>



<p>仕事の多い役職には、組織からノートパソコンを貸与するのが分かりやすいです。しかし仕事が多いと言っても、パソコン１台となると、そのほんの一部を使っている感じ。エコじゃない。。。壊れたらどうする。</p>



<p>そこで出てくるのが、自分のパソコンを使う、「ヤドカリ型」です。</p>



<h4 class="wp-block-heading">＜３＞STREAM DECKを使おうと思った一番の動機〜<span class="bold-red">個人情報を漏らさないようにすること</span></h4>



<p>「ヤドカリ型業務」の発想に、もう一つ着眼を加えます。</p>



<p>以前からMacを使って、細々と、音楽制作、ブログ作成、IT関連、その他の作業を行っていました。そこへここ数年、自治会の仕事がどどっと入ってきました。自治会の仕事もパソコンやインターネットを使うことが多くなっています。</p>



<p>必要な持ち物は、</p>



<p><span class="marker">「<strong>Googleアカウントと、EXCEL、WORD</strong>」</span></p>



<p>これだけなので、殆どのパソコンで動くことになります。</p>



<p>Googleアカウントとパスワードを後任者へ伝えるだけで移行できるのは、革新です。</p>



<p>しかし、<br>個人のパソコンで自治会の作業をすることになると、</p>



<p>個人のGoogleアカウントと自治会のGoogle<strong><span class="marker">アカウントが複数存在</span></strong>することになります。</p>



<p>その場合に<strong><span class="marker">ウッカリミス</span></strong>が起きやすいです。</p>



<p><strong>自治会のGoogleアカウントで開いたChromeでAmazonのサイトを開き、個人のIDとパスワードを入れて個人の物を注文する、ご丁寧に<span class="fz-16px"><span class="fz-20px"><span class="fz-22px">そのIDとパスワードを保存してしまうというミス</span></span></span>。</strong></p>



<p>そのことに気付かないまま、後任者に引き継ぎしてしまうと、後任者は、なりすまして、買い物ができてしまう(まあ、そんな悪い人は少ないと思いますが）。</p>



<p><br>アクセルとブレーキを踏み間違えるようなミス。</p>



<p>ただ、その間違いを犯すのは自分自身、自分自身で防衛する方策はないのか。</p>



<p>そこで思いついたのが、この機器を使うことによって、</p>



<p><strong><span class="marker">目的別にプロファイルを作ること。<br>個人IDとパスワードを入力するWebサイトは、個人のアカウント(Googleアカウント、iCloudなど）でしか開かないようにすること。</span></strong></p>



<p>です。</p>



<p>そうそう。<strong><span class="marker">それと大事なこと。たとえヤドカリ型の使用にしても、自治会など公的な作業のデータは全て、別のフォルダかデバイスに格納するようにしましょう。</span></strong></p>



<p></p>



<h4 class="wp-block-heading"><strong>＜４＞</strong>AppleScriptをSTREAM DECKへ書き込んで、Googleアカウントの切替を行う</h4>



<p>以下ですが、Automatorでappを作り、STREAM DECKでappを「開く」で起動できれば、それで成功ですが、私の場合、Macの「セキュリティーとプライバシー」でのエラーが解消しないので、以下の方法を取りました。</p>



<h5 class="wp-block-heading">＜４＞-１）AppleScriptを使ってChromeのユーザーを切り替える</h5>



<p>Chromeのユーザーは、現在私の場合、下図の１が個人、２が某目的、３が自治会、４が某目的という使い方になっています。</p>



<figure class="wp-block-image size-large"><a href="https://imakat.com/rd.php?id=UfDdMdzm.png" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=UfDdMdzm.png" alt=""/></a></figure>



<p>AppleScriptについては、「<a rel="noopener" target="_blank" href="https://waarumstudy.blogspot.com/2020/03/mac-google-chrome-desktop-shortcut.html">IPHONEアプリ個人開発とライフハック<span class="fa fa-external-link external-icon anchor-icon"></span></a>」さんの記事の中の、5,段落に書かれたスクリプトを利用させていただきました。スクリプトの1行目&#8221; set userNumber to 1&#8243;の数字を、例えば自治会用であれば&#8221;set userNumber to 3&#8243;にします。</p>



<p></p>



<h5 class="wp-block-heading">＜４＞-２）-１ AppleScriptをSTREAM DECKへ書き込み実行する方法＜その１＞</h5>



<p>AppleScriptを書き込み実行できるようにするプラグインを入手してインストールします。</p>



<p><a rel="noopener" target="_blank" href="https://github.com/mushoo/streamdeck-applescript">ダウンロードサイト<span class="fa fa-external-link external-icon anchor-icon"></span></a></p>



<p>「Release」をクリックします↓</p>



<figure class="wp-block-image size-large"><a href="https://imakat.com/rd.php?id=xE19N79z.png" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=xE19N79z.png" alt=""/></a></figure>



<p>com.mushoo.RunAppleScript.streamDeckPlugin をクリックします↓</p>



<figure class="wp-block-image size-large"><a href="https://imakat.com/rd.php?id=RLjmc04S.png" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=RLjmc04S.png" alt=""/></a></figure>



<p>Downloadをクリックします↓</p>



<figure class="wp-block-image size-large"><a href="https://imakat.com/rd.php?id=DeixYexf.png" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=DeixYexf.png" alt=""/></a></figure>



<p>ダウンロードされたファイルをクリックします↓</p>



<figure class="wp-block-image size-large"><a href="https://imakat.com/rd.php?id=JhYPdbsB.png" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=JhYPdbsB.png" alt=""/></a></figure>



<p>STREAM DECKにRunAppleScriptがインストールされました。これをボタンにドロップします↓</p>



<figure class="wp-block-image size-large"><a href="https://imakat.com/rd.php?id=42COBsPN.png" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=42COBsPN.png" alt=""/></a></figure>



<p>AppleScriptを書き込みます↓</p>



<figure class="wp-block-image size-large"><a href="https://imakat.com/rd.php?id=mhuHTDkD.png" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=mhuHTDkD.png" alt=""/></a></figure>



<div id="422"></div>



<h5 class="wp-block-heading">＜４＞-２）-２ AppleScriptをSTREAM DECKへ書き込み実行する方法＜その２＞</h5>



<p>最初＜その１＞で作成していたのですが、新OS Venturaへ更新したところ、なぜか、RunAppleScriptが消失してしまいました。再インストールを試みましたが、既存であるとのエラーで、先に進みません。そこで、RunAppleScriptに頼らない、元からある方法、つまり素直に、Appleスクリプトエディタを使って記述することにしました。</p>



<p>Stream Deckへ直接記述(インライン)しない方法は、ちょっと面倒にも感じますが、スクリプトファイルが一つのフォルダで管理できるのは便利で、一長一短です。</p>



<p>新たな発見ですが、<strong>アプリケーションファイルappに変換しなくても、スクリプトファイルscptのままで、それをStream Deckのボタンの場所へドラッグ＆ドロップするだけで動作しました</strong>。以下のような流れです。</p>



<figure class="wp-block-image size-large"><a href="https://imakat.com/rd.php?id=j7WVrJs6.png" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=j7WVrJs6.png" alt=""/></a></figure>



<p></p>



<h4 class="wp-block-heading">＜5＞ディレクトリ名（フォルダ名、ファイル名）は日本語を使わないこと！</h4>



<p>ちょっと脱線して、NAS上のフォルダを呼び出す場合の注意点を書きます。写真動画の取り込みの流れは、私の例では、下図のようになっています。DropboxとSynologyNASはどちらか一つでいいではないか、そうも言えますが、心配し過ぎかも知れませんが、自宅のSynologyNASがもし災害で破損した時のバックアップの考えです。クラウドサービスの中ではDropboxだけの問題かも知れませんが、スマホから写真動画をアップロードするフォルダ名は日本語で「カメラアップロード」と決まっています。このSTREAM DECKのAppleScriptの記述では、ディレクトリ名に日本語が使えません。そこで、SynologyNAS側の同期フォルダ名を「camera_up」と英小文字にしました。</p>



<p></p>



<figure class="wp-block-image size-large is-style-rounded"><a href="https://imakat.com/rd.php?id=yiwwfhLv.png" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=yiwwfhLv.png" alt=""/></a></figure>



<p>AppleScriptの記述は以下になります。</p>



<figure class="wp-block-image size-large"><a href="https://imakat.com/rd.php?id=1NpG41ln.png" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=1NpG41ln.png" alt=""/></a></figure>



<p>AppleScriptは、</p>



<pre class="wp-block-code"><code>tell app "Finder" to open location "smb://<strong><span class="bold-red">aaaaaaa</span></strong>:<span class="bold-red">bbbbbbb</span>@<span class="bold-red">ccccc.ccccc.ccc</span>/<span class="bold-red">ddddd</span>"</code></pre>



<p><strong><span class="bold-red">aaaaaaa</span></strong>は、サーバーアドレスで、SynologyNASの場合、コントロールパネル-&gt;ファイルサービス-&gt;SMBのところに書かれています。</p>



<figure class="wp-block-image size-large"><a href="https://imakat.com/rd.php?id=77wlxKpQ.png" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=77wlxKpQ.png" alt=""/></a></figure>



<p><span class="bold-red">bbbbbbb</span>は、SynologyNASにMacから接続するときのパスワードです。<span class="bold-red">ccccc.ccccc.ccc</span>は、IPアドレスまたはホスト名、<span class="bold-red">ddddd</span>は、ディレクトリ名です。</p>



<p>なおRunAppleScriptが動作しない場合は、<a href="#422" target="_blank" rel="noreferrer noopener">こちらへ</a>。</p>



<p>それでは、「自治会作業」のプロファイルへ戻って。。。</p>



<h4 class="wp-block-heading">＜６＞出来上がったプロファイルの例</h4>



<p>「自治会作業」プロファイルの例です。関係するアプリやフォルダを一まとめにしています。Webアプリは全て自治会アカウントGoogle内で完結します。</p>



<p>多少脚色もありますが説明します。<br>「自治会作業」：プロファイル切替用ボタン<br>「自治会アカウントGoogle」：自治会アカウントのGoogle Chromeが立ち上がります。<br>「R4自治会」〜「自治会ドライブ」：各種フォルダ<br>「Googleスプレッドシート」〜「Google図形描画」：Googleのアプリです。自治会アカウントで立ち上がります。<br>「Microsoft Excel」〜「Microsoft Word」：そのものです。<br>「メール」：そのものです。<br>「スクショ」：スクリーンショットのショートカット「⌘+↑+4」。<br>「スキャン」：EpsonのScanSnapのアプリ。<br>「Chromeリモート」：自治会アカウントのChromeリモートが立ち上がります。<br>「会員名簿」「AppSheetの作成」：自治会アカウントGoogleで動くAppSheetアプリです。<br>「お知らせ投稿」：自治会アカウントGoogleで動くBloggerです。<br>「自治会ネット掲示板」：自治会アカウントGoogleで動くGoogleサイトです。<br>「公民館カレンダー」：自治会アカウントGoogleで動くGoogleカレンダーです。</p>



<figure class="wp-block-image size-large"><a href="https://imakat.com/rd.php?id=wHMbqUap.png" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=wHMbqUap.png" alt=""/></a></figure>



<p>「ブラウジング」のプロファイルは以下です。個人アカウントのGoogle Chromeが立ち上がります。「YouTube」「Amazon」などボタンがありますが、ちょっと面倒ですが、<strong>全部、マルチアクションを使っています</strong>。別のプロファイルへコピーしても個人アカウントから起動させるためです。「RunAppleScript」で個人アカウントへ切り替える→「Stream Deck:遅延」→「システム：Webサイト（例えばAmazonのURL)」の順です。YouTubeも個人アカウントで開きますので履歴は個人アカウントにだけ残ります。<strong>自治会アカウントのYouTube履歴に残るようなことはありません</strong>。</p>



<figure class="wp-block-image size-large"><a href="https://imakat.com/rd.php?id=dbam5BTc.png" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=dbam5BTc.png" alt=""/></a></figure>



<p></p>



<h4 class="wp-block-heading">＜７＞まとめ</h4>



<p>この一連の登録作業ですが、高齢者にとってはまだまだ難しいです。しかしながら、登録さえしてしまえば、あとはワンタッチ。まさに「<strong>高齢者のアクセシビリティの向上</strong>」に貢献する製品です。ここでは触れませんでしたがIFTTTプラグインを入れれば家電製品をコントロールをできるようになります。この製品により、高齢者、障害者にとって役立つ様々な活用が広がりそうな感じがしますが、残念なのは、32ボタンのもので約3万円と高く、私のようなマニアックな人向けの価格帯です。1万円を切れば、かなり広がる気がします。</p>



<p>以上</p>



<iframe sandbox="allow-popups allow-scripts allow-modals allow-forms allow-same-origin" style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&#038;bc1=000000&#038;IS2=1&#038;bg1=FFFFFF&#038;fc1=000000&#038;lc1=0000FF&#038;t=imakat-22&#038;language=ja_JP&#038;o=9&#038;p=8&#038;l=as4&#038;m=amazon&#038;f=ifr&#038;ref=as_ss_li_til&#038;asins=B07RL8H55Z&#038;linkId=5119bb1b6427d4956cc190904692ee25"></iframe>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">14886</post-id>	</item>
	</channel>
</rss>
