<?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>FinalCutPro | imakat.com</title>
	<atom:link href="https://imakat.com/tag/finalcutpro/feed/" rel="self" type="application/rss+xml" />
	<link>https://imakat.com</link>
	<description>工夫と改善で人生をちょっと豊かに</description>
	<lastBuildDate>Tue, 14 Apr 2026 19:30:25 +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>FinalCutPro | 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】QuickTimePlayerとテキストエディット〜昔からある小道具を忘るべからず</title>
		<link>https://imakat.com/2024/08/08/22970/</link>
		
		<dc:creator><![CDATA[imakat]]></dc:creator>
		<pubDate>Thu, 08 Aug 2024 02:00:00 +0000</pubDate>
				<category><![CDATA[字幕作成]]></category>
		<category><![CDATA[デジタル]]></category>
		<category><![CDATA[ものづくり]]></category>
		<category><![CDATA[vimeo]]></category>
		<category><![CDATA[FinalCutPro]]></category>
		<category><![CDATA[テキストエディット]]></category>
		<category><![CDATA[字幕工房]]></category>
		<category><![CDATA[QuickTimePlayer]]></category>
		<guid isPermaLink="false">https://imakat.com/?p=22970</guid>

					<description><![CDATA[純正のQuickTimePlayerとテキストエディットだけで、かなりのことができる YouTube,SNSといった庶民による動画配信が拡大したことにより、動画作成や字幕作成、翻訳などについてのアプリやサービスは、百花繚 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h3 class="wp-block-heading">純正のQuickTimePlayerとテキストエディットだけで、かなりのことができる</h3>



<p>YouTube,SNSといった庶民による動画配信が拡大したことにより、動画作成や字幕作成、翻訳などについてのアプリやサービスは、百花繚乱といった状況です。</p>



<p>アプリやサービスを、取り替えては楽しむ。それは若い人は、それでいいのでしょうが、私なんかは、手作業で地味にコツコツできないものか、とすぐに考えてしまいます。</p>



<p><strong>QuickTimePlayerとテキストエディットは</strong>、Macを買えば、最初から入っています。<strong>いわば大工のノミとカンナのような小道具</strong>です。今回、感じたのは、新しいものの吸収も大事だが、古くからある道具にコツコツ慣れることも大事だろう、と思えることです。</p>



<p>下のイメージ図は、動画と字幕作りのワークフローです。結局、作られたものは必ずといっていいほど、作り直しが発生するわけです。その時に、本格的に動画アプリでその修正を行うか、または、ノミ、カンナなどDIYショップで買えるような小道具で行うか。そこの選択ですが、私は、まずはDIYを選ぶ。ダメなら動画アプリなどを選ぶ。そのような順番で考えます。</p>



<a rel="noopener" target="_blank" href="https://docs.google.com/drawings/d/1bR0LVfw4O6ug_sEluP5RW557a-TceQ3OonCKBpbLKzg/edit?usp=sharing">
<img decoding="async" src="https://docs.google.com/drawings/d/e/2PACX-1vSroUBmQKujQ4nJ2AGV8dgEYFgcqllRF4x-lrOPsVPM_xtnvPV9i6WA2MorthHHHQZR366oeW66KWkK/pub?w=960&amp;h=720">
</a>



<p></p>



<div class="wp-block-cocoon-blocks-toggle-box-1 toggle-wrap toggle-box block-box not-nested-style cocoon-block-toggle"><input id="toggle-checkbox-202604150430090" class="toggle-checkbox" type="checkbox"/><label class="toggle-button" for="toggle-checkbox-202604150430090"><span class="fz-18px"> <strong><span class="marker">関係するオリジナルスクリプト一覧表(ここをクリック)</span></strong></span></label><div class="toggle-content">
<figure class="wp-block-flexible-table-block-table is-scroll-on-pc is-scroll-on-mobile"><table class="is-stacked-on-mobile" style="max-width:100%;width:auto;min-width:50%"><tbody><tr><td style="background-color:#fff7cc;width:25%"><strong>スクリプトのリンク</strong></td><td style="background-color:#f3fafe;width:50%"><strong>説明</strong></td></tr><tr><td style="background-color:#fff7cc;width:50%"><a href="https://imakat.com/?pubtxt=srtからvttを生成するworkflow_pub.txt" target="_blank">srtからvttを生成する</a>(AppleScriptクイックアクション)</td><td><a href="https://imakat.com/ds5/?drid=2">動画&#x1f3a5;(無音)</a><br>新たに作ったVTTファイルに対して、 <br> (1) 先頭行に文字列&#8221;WEBVTT&#8221;を含む行を挿入する。 <br>(2) 2行目に空白の行を挿入する。 <br>(3) 3行目以降から、読み込んだデータを書き込む。 <br> (4) &#8220;&#8211;&gt;&#8221; がある行は、行の中の&#8221;,&#8221;を&#8221;.&#8221;に置き換える。<br>※元のファイルを残します。</td></tr><tr><td style="background-color:#fff7cc"><a href="https://imakat.com/?pubtxt=vttからsrtを生成する兼srtの連番を付け直すworkflow_pub.txt" target="_blank">vttからsrtを生成する兼srtの連番を付け直す</a>(renumbered.srt)(AppleScriptクイックアクション)</td><td><a href="https://imakat.com/ds5/?drid=24" target="_blank">動画&#x1f3a5;(無音)</a><br>vttからsrtを生成します。また、新たに作ったSRTファイルに対して、<br>(1) 文字列”WEBVTT”のある行は削除する。<br>(2) &#8220;&#8211;&gt;&#8221; がある行は、行の中の&#8221;.&#8221;を&#8221;,&#8221;に置き換える。<br>(3)連番を1から振り直す。<br>※元のファイルを残します。新しいファイル名は、&#8221;元のファイル名_renumbered.srt&#8221;となります。</td></tr><tr><td style="background-color:#fff7cc"><a href="https://imakat.com/?pubtxt=字幕文章に時刻を挿入するworkflow_pub.txt" target="_blank">字幕文章に時刻を挿入するvtt</a>(timeadded.vtt)(AppleScriptクイックアクション)</td><td><a href="https://imakat.com/ds5?drid=4">動画&#x1f3a5;(無音</a><a href="https://imakat.com/ds?drid=4">)</a><br>文字列の先頭に、開始時刻(00:01:23)を追記する。私はカモメ→(00:01:23)私はカモメ※元のファイルを残します。_timeadded.vttが新しく作られます。この字幕文章の先頭に時刻情報を入れる目的は、翻訳された外国語の示す動画の位置を分かりやすくするためです。</td></tr><tr><td style="background-color:#fff7cc"><a href="https://imakat.com/?pubtxt=字幕文章の時刻を削除するworkflow_pub.txt" target="_blank">字幕文章の時刻を削除する</a>(timeremoved.vtt)(AppleScriptクイックアクション)</td><td><a href="https://imakat.com/ds5/?drid=23" target="_blank">動画(&#x1f3a5;無音)</a><br>上の「字幕文章に時刻を挿入する」を取り消しにします。※元のファイル_timeadded.vttは残します。新しいファイルは、_timeadded_timeremoved .vttになります。</td></tr><tr><td style="background-color:#fff7cc"><a href="https://imakat.com/?pubtxt=字幕文章に番号を挿入するworkflow_pub.txt" target="_blank">字幕文章に番号を挿入する</a>(numadded.vtt)(AppleScriptクイックアクション)</td><td>文字列の先頭に、番号1)を追記する。私はカモメ→1)私はカモメ※元のファイルを残します。_numadded.vttが新しく作られます。この字幕文章の先頭に番号を入れる目的は、翻訳された外国語の示す動画の位置を分かりやすくするためです。</td></tr><tr><td style="background-color:#fff7cc"><a href="https://imakat.com/?pubtxt=字幕文章の番号を削除するworkflow_pub.txt" target="_blank">字幕文章の番号を削除する</a>(numremoved.vtt)(AppleScriptクイックアクション)</td><td>上の「字幕文章に番号を挿入する」を取り消しにします。※元のファイル_numadded.vttは残します。新しいファイルは、_numadded_numremoved .vttになります。</td></tr><tr><td style="background-color:#fff7cc"><a href="https://imakat.com/?pubtxt=字幕空白詰め_vimeo_auto_generated_captions_vttの修正_pub.txt" target="_blank">vimeo_auto_generated_captions.vttの修正をする</a>(AppleScriptクイックアクション)</td><td><a href="https://imakat.com/ds5/?drid=22" target="_blank">動画&#x1f3a5;(無音)</a><br>Vimeoの字幕自動生成からダウンロードしたファイルの、文字列の空白を削除する。vttのまま。※直接上書き更新します。何度でもダウンロードできるため。</td></tr><tr><td style="background-color:#fff7cc"><a href="https://imakat.com/?pubtxt=字幕時刻の秒ずらしを行うworkflow_pub.txt" target="_blank">vttの字幕時刻の秒ずらしを行う。</a>(timeshifted.vtt)(AppleScriptクイックアクション)</td><td><a href="https://imakat.com/ds5/?drid=25" target="_blank">動画&#x1f3a5;(無音)</a><br>動画の途中で、挿入や削除を行うと、字幕ファイルの時刻にズレが生じます。挿入や削除を行った以降の動画をコピーして、その分の秒ずらしを行うことができます。<span class="bold-red">但し、文章の頭に時刻情報を入れてある(_timeadded.vtt)については、エラーになります。一度、上の「字幕文章の時刻を削除する」を実行した後で、ここを実行してください</span>。<br>※元のファイルを残します。新しいファイル名は&#8221;元のファイル名_timeshited.vtt&#8221;となります。</td></tr></tbody></table></figure>
</div></div>



<p><strong>＜クイックアクション＞</strong></p>



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



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



<h4 class="wp-block-heading">１　「字幕工房」の利用</h4>



<a rel="noopener" target="_blank" href="https://www.tranquillitybase.jp/SubtitleFactory/SubtitleFactory.html">
<img decoding="async" src="https://imakat.com/rd.php?id=zZhRueuH.png
"
></a>



<p>動画や字幕を修正する小道具は、ノミやカンナのようなものと言いましたが、小道具側に入れるが、ちょっと高級なもの、電動ノコギリのようなものが「字幕工房」です。<br>ナレーションを文字起こしするような場合は、Vimeo、Vrew、Filmoraなどの機能を使って字幕ファイルが自動生成されますが、内容を文字で説明する場合は、説明文を自分で打ち込むことになります。そのような場合に、「字幕工房」は向いています。</p>



<p>「字幕工房」は、動画(mp4 mov)の上で、右クリック-&gt;このアプリケーションで開く-&gt;「字幕工房.app」で開けるのが非常に便利です。</p>



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



<p>この「字幕工房」は字幕をQuickTimeプレーヤーおよびSafariと紐付けするようになっています。その紐付け状態でWordPressプレーヤーで再生させると字幕が二重になったり扱いが面倒になります。従って、私としては、動画は動画として独立、字幕は字幕として独立して作成して、配信するときに、紐付けて動作させるやり方にします。</p>



<p><br>その方法ですが、2つ注意点があります。<span class="bold">1つ目は、作成した字幕を忘れずに書き出すこと</span>。ファイル-&gt;SRT-&gt;書き出す-&gt;日本語、とすると同じフォルダにSRTが書き出されます。これを忘れると、終了の時、字幕が何も残らない結果（何も修正されない結果)になってしまいます。<strong>SRTで書き出すことが字幕の保存という意味です</strong>。<strong>作業を後日続けたい時は、「読み込む&#8230;」で行います</strong>。その上にある保存、別名で保存は、mp4.mov動画の保存であり、私の場合は使いません。</p>



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



<p><span class="bold">2つ目は、終了する時</span>、「動画に加えた変更を保存しますか？」と聞かれますが、動画のイメージ自体には何も変更はありませんが動画と字幕を紐付けすることは、動画にとっての変更となるでしょう。動画には何の変更もされたくありませんので<span class="bold">「保存しない」を選びます。</span></p>



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



<p>上のスクリプトの説明表の中の動画は、「字幕工房」QuickTimePlayerで作成しています。</p>



<p>※「字幕工房」：Mac App Storeで購入できます。買い切りで約1000円。</p>



<figure class="wp-block-image size-large is-resized"><a href="https://imakat.com/rd.php?id=3B1f4XtZ.png" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=3B1f4XtZ.png" alt="" style="width:167px;height:auto"/></a></figure>



<h4 class="wp-block-heading">２　Appleスクリプトによる字幕ファイルのかんたん作成</h4>



<p>「字幕工房」よりもっと、かんたんな作成方法です。QuickTimePlayerで動画を表示しながら、止めた位置に、字幕テキストを書き込んでいく簡単なアプリを作成しました。そこそこ実用になります。→<a href="https://imakat.com/2025/08/28/27063/" target="_blank">「字幕かんたん作成」</a></p>



<h4 class="wp-block-heading">３　字幕文章の時刻情報(00:00:00)の挿入と削除について</h4>



<p>上の表にあるように、字幕文章の先頭に秒未満をカットした時刻情報(00:00:00)を、挿入したり削除したりできます。一応、その都度、ファイル名に、timeadded、timeremovedが追記されます。なぜ、このようなものを用意しているかですが、<strong>動画内の字幕が翻訳できない場合の補助として、その字幕の位置を示すため</strong>です。例えば、Vimeoなど動画内に表示される字幕を翻訳できる場合と、WordPressのように動画内では翻訳できない場合があります。字幕一覧は翻訳されます。<br>時刻情報が文章に入っている例：<br>下は、Dropboxの動画をWordPressプレーヤーで配信している例です。ページ左上の「言語を選択」から適当な言語を選んで表示してみてください。(1)はリアルタイムで翻訳されますが、動画の外枠へ表示します。(2)は動画内の字幕は日本語ですが、字幕一覧は翻訳されます(長い動画の時は翻訳の改行が不安定になりますが)ので、時刻情報をキーとして内容を把握できます。<br><a href="https://imakat.com/ds5/?drid=10" target="_blank">(1)メールを全受信に表示しない方法＜字幕一覧なし＞ 33秒(動画&#x1f3a5;Dropbox)</a><br><a href="https://imakat.com/dr5/?drid=10" target="_blank">(2)メールを全受信に表示しない方法＜字幕一覧あり＞ 33秒(動画&#x1f3a5;Dropbox)</a></p>



<p>必要に応じて、文章頭に時刻情報を入れることが可能、と捉えてください。<br></p>



<h4 class="wp-block-heading">４　その他</h4>



<p>動画作成の作業を便利にするものとして、今回は、QuickTimePlayer、テキストエディット、字幕工房を具体的に取り上げましたが、網羅するならば、上に掲載したクイックアクション、それから、下にあるStream Deckの各設定が、全体像になります。</p>



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



<p>Stream Deckに関しては、また別に取り上げます。</p>



<p>以上。</p>



<figure class="wp-block-image size-large is-resized"><a href="https://imakat.com/rd.php?id=s0omPPEw.png" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=s0omPPEw.png" alt="" style="width:110px;height:auto"/></a></figure>



<p></p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">22970</post-id>	</item>
		<item>
		<title>Synology NASのHDD「お下がり」交換リレー</title>
		<link>https://imakat.com/2023/09/05/17965/</link>
		
		<dc:creator><![CDATA[imakat]]></dc:creator>
		<pubDate>Tue, 05 Sep 2023 11:41:07 +0000</pubDate>
				<category><![CDATA[デジタル]]></category>
		<category><![CDATA[ものづくり]]></category>
		<category><![CDATA[ホットスワップ]]></category>
		<category><![CDATA[データの大容量化]]></category>
		<category><![CDATA[クラウド]]></category>
		<category><![CDATA[vimeo]]></category>
		<category><![CDATA[FinalCutPro]]></category>
		<category><![CDATA[Synology]]></category>
		<category><![CDATA[NAS]]></category>
		<category><![CDATA[DS218+]]></category>
		<category><![CDATA[DS220+]]></category>
		<category><![CDATA[Alxum]]></category>
		<category><![CDATA[SHR]]></category>
		<guid isPermaLink="false">https://imakat.com/?p=17965</guid>

					<description><![CDATA[2025.7.9追記：SynologyがサードパーティのHDDを使用不可にする打ち出しについては、検証をクリアしたベンダーについては、互換性リストに追加して使用可能にするとのことです。Western Digital、Se [&#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"/>



<p>2025.7.9追記：SynologyがサードパーティのHDDを使用不可にする打ち出しについては、検証をクリアしたベンダーについては、互換性リストに追加して使用可能にするとのことです。Western Digital、Seagate、東芝は追加されることはほぼ確実のようです(<a rel="noopener" target="_blank" href="https://gigazine.net/news/20250623-synology-nas-storage/">記事<span class="fa fa-external-link external-icon anchor-icon"></span></a>)。</p>



<p>2024.9.追記：SATAスタンドは、ミラーリングを行うようにしました。</p>


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

  <div class="iframe-wrapper">
    <iframe
      src="https://player.vimeo.com/video/861177501?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 translate="yes"><summary translate="yes">字幕一覧(クリック)</summary> <p translate="yes">
(<a href="#" class="imk-cue" data-seek="0:00" translate="no">00:00:00</a>)  Synology NAS HDD「お下がり」交換リレー<br>
(<a href="#" class="imk-cue" data-seek="0:11" translate="no">00:00:11</a>)  これが自宅にあるNASとWebサーバーです。<br>
(<a href="#" class="imk-cue" data-seek="0:23" translate="no">00:00:23</a>)  DS220+ですけどね、最近容量不足ということで困ってました。<br>
(<a href="#" class="imk-cue" data-seek="0:30" translate="no">00:00:30</a>)  そこで大容量に変えることにしました。<br>
(<a href="#" class="imk-cue" data-seek="0:34" translate="no">00:00:34</a>)  ストレージマネージャーにこういう警告が出ています。<br>
(<a href="#" class="imk-cue" data-seek="0:39" translate="no">00:00:39</a>)  二巡すると全部が入れ替わるようになります。<br>
(<a href="#" class="imk-cue" data-seek="0:46" translate="no">00:00:46</a>)  事前にハードディスクとSATAスタンドを買っておきました。<br>
(<a href="#" class="imk-cue" data-seek="0:53" translate="no">00:00:53</a>)  それでは作業を具体的に見ていきましょう。NASの蓋を外します。<br>
(<a href="#" class="imk-cue" data-seek="1:04" translate="no">00:01:04</a>)  ディスク1とディスク2がありますが、同じ容量なんで2から抜くことにします。<br>
(<a href="#" class="imk-cue" data-seek="1:14" translate="no">00:01:14</a>)  引き抜きます。<br>
(<a href="#" class="imk-cue" data-seek="1:21" translate="no">00:01:21</a>)  Seagateの6TBです。<br>
(<a href="#" class="imk-cue" data-seek="1:39" translate="no">00:01:39</a>)  引き抜いたあと警告音が鳴ります。<br>
(<a href="#" class="imk-cue" data-seek="1:51" translate="no">00:01:51</a>)  右側が今外した6TBです。左が12TBの新品です。<br>
(<a href="#" class="imk-cue" data-seek="2:05" translate="no">00:02:05</a>)  ハードディスク取り付けパーツを付け替えます。<br>
(<a href="#" class="imk-cue" data-seek="2:21" translate="no">00:02:21</a>)  まあ滅多にやらない作業なんで手際が悪いです。<br>
(<a href="#" class="imk-cue" data-seek="2:45" translate="no">00:02:45</a>)  12TBの方にはめます。<br>
(<a href="#" class="imk-cue" data-seek="3:42" translate="no">00:03:42</a>)  やっとできました。私が不器用なだけです。誰でも簡単にできます。<br>
(<a href="#" class="imk-cue" data-seek="3:58" translate="no">00:03:58</a>)  差し込みます。<br>
(<a href="#" class="imk-cue" data-seek="4:30" translate="no">00:04:30</a>)  ディスク2のライトが点灯しました。装着まではOKです。<br>
(<a href="#" class="imk-cue" data-seek="4:39" translate="no">00:04:39</a>)  「劣化」と表示されています。新しいドライブを装着済みなので、今すぐ修復をクリックします。<br>
(<a href="#" class="imk-cue" data-seek="4:54" translate="no">00:04:54</a>)  修復中となります。最初に初期化されます。<br>
(<a href="#" class="imk-cue" data-seek="5:03" translate="no">00:05:03</a>)  それでは3番目の作業で、Webサーバーの3TBの入れ替えをします。<br>
(<a href="#" class="imk-cue" data-seek="5:25" translate="no">00:05:25</a>)  Webサーバーの蓋を外します。<br>
(<a href="#" class="imk-cue" data-seek="5:31" translate="no">00:05:31</a>)  ここにディスク1とディスク2があります。同じ容量なのでどちらから抜いても構いません。<br>
(<a href="#" class="imk-cue" data-seek="5:40" translate="no">00:05:40</a>)  2から抜いてみます。<br>
(<a href="#" class="imk-cue" data-seek="5:53" translate="no">00:05:53</a>)  ホットスワップ機能がついているもんですから、ハードディスクを抜いてもサーバーは中断しないです。そのまま動作します。<br>
(<a href="#" class="imk-cue" data-seek="6:18" translate="no">00:06:18</a>)  ハードディスク取り付けパーツを、お下がりの6TBへ付け替えます。<br>
(<a href="#" class="imk-cue" data-seek="6:38" translate="no">00:06:38</a>)  どうも不器用です。<br>
(<a href="#" class="imk-cue" data-seek="7:01" translate="no">00:07:01</a>)  6TBの方へ付けます。<br>
(<a href="#" class="imk-cue" data-seek="7:11" translate="no">00:07:11</a>)  どうも手元の小さいものがよく見えなくなってきてますね、年のせいで。<br>
(<a href="#" class="imk-cue" data-seek="8:06" translate="no">00:08:06</a>)  はい、できました。<br>
(<a href="#" class="imk-cue" data-seek="8:23" translate="no">00:08:23</a>)  6TBを差し込みます。<br>
(<a href="#" class="imk-cue" data-seek="8:47" translate="no">00:08:47</a>)  ディスク2が点灯しました。<br>
(<a href="#" class="imk-cue" data-seek="8:57" translate="no">00:08:57</a>)  お下がりの6TBは差し込み済みなので、今すぐ修復を選びます。<br>
(<a href="#" class="imk-cue" data-seek="9:06" translate="no">00:09:06</a>)  ディスク2を選びます。<br>
(<a href="#" class="imk-cue" data-seek="9:13" translate="no">00:09:13</a>)  お下がりなのでデータは入ってるんですね。まあ消していいか聞いてきますので、「いいえ」ではなく「はい」を選びます。<br>
(<a href="#" class="imk-cue" data-seek="9:33" translate="no">00:09:33</a>)  修復中になります。<br>
(<a href="#" class="imk-cue" data-seek="9:41" translate="no">00:09:41</a>)  一巡目の最後の作業ですね。お下がりの3TBをSATAスタンドに取り付けます。<br>
(<a href="#" class="imk-cue" data-seek="9:55" translate="no">00:09:55</a>)  私が買ったのはAlxumというスタンドです。<br>
(<a href="#" class="imk-cue" data-seek="10:20" translate="no">00:10:20</a>)  それではAのソケットに差し込みます。<br>
(<a href="#" class="imk-cue" data-seek="11:06" translate="no">00:11:06</a>)  Bも空いています。<br>
(<a href="#" class="imk-cue" data-seek="11:23" translate="no">00:11:23</a>)  まあ、硬いですな。<br>
(<a href="#" class="imk-cue" data-seek="11:33" translate="no">00:11:33</a>)  SATAスタンドのハードディスクはexFATでフォーマットします。<br>
(<a href="#" class="imk-cue" data-seek="11:41" translate="no">00:11:41</a>)  これで一巡目は終わりですけど、NASサーバー、Webサーバーともに修復順調に進んでます。<br>
(<a href="#" class="imk-cue" data-seek="11:53" translate="no">00:11:53</a>)  TimeMachineの設定については割愛しますね。<br>
(<a href="#" class="imk-cue" data-seek="11:58" translate="no">00:11:58</a>)  まあちょっと気分転換です。<br>
(<a href="#" class="imk-cue" data-seek="12:04" translate="no">00:12:04</a>)  家の近くにですね、タヌキが出ていました。<br>
(<a href="#" class="imk-cue" data-seek="12:10" translate="no">00:12:10</a>)  まあ本当に犬ですね。犬そっくりです。走り方も犬。<br>
(<a href="#" class="imk-cue" data-seek="12:20" translate="no">00:12:20</a>)  二巡目ですけど、やることは一巡目と同じです。<br>
(<a href="#" class="imk-cue" data-seek="12:29" translate="no">00:12:29</a>)  もう結果からお見せします。SATAスタンドに2個のハードディスクが刺さってます。<br>
(<a href="#" class="imk-cue" data-seek="12:43" translate="no">00:12:43</a>)  最後にマネージャーを確認しますと、NAS、Webサーバーともに修復中、進んでます。<br>
(<a href="#" class="imk-cue" data-seek="12:53" translate="no">00:12:53</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 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>



<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>マニアックなようでもあり、よくありそうな話題です。</p>



<p>人の嗜好には、色々ありますが、モノを買う時、「何でも入っている方がいい」という人と「それぞれ別々の方がいい」に分かれると思います。ただどうでしょう。今でも量販店のパソコンコーナーへ行って、「そのまま何でも全部入ってて、後からあれ買えこれ買えって言ってこないやつ。それで安いやつ。」と店員を困らせ、まあ、ある意味店員を喜ばせ、買う人の方が多いですかね。まだDVDドライブ付きが売ってますね。オールインワンってやつ。</p>



<p>今回、NASが容量不足で、内装されたHDDを大容量に交換する。というテーマですが、もしオールインワン嗜好の人のパソコンに例えると、パソコンに内蔵されたHDDを換装する、ということを意味します。これを自分でやると結構大変。まず外付けのHDDにデータを全部コピーする。HDDとパソコンの指示書通りに、パソコンのネジを外して、HDDを交換する。外付けHDDから新HDDへコピーする。様々な確認を通って、完了。その作業の間は、当然、パソコンは使えません。</p>



<p><strong>パソコンでは内蔵されていて、そう簡単には取り出せないHDDを、そもそも最初から、外に取り出してしまったもの。別々にしたもの。それがNAS</strong>です（ただしNASは、それだけが目的ではありません。）</p>



<p>そしてNASは、たいてい、2個以上のHDDを持って、データを常に、二つ以上持っています。片方のエンジンが故障しても飛行できるようになっています。</p>



<p>ですから、今回の、HDDを大容量に交換する時でも、パソコンの停止は不要です。</p>



<p>なお、「お下がり」交換リレーと称したのは、<strong>新品HDD→DS220+→既存を抜いて→DS218+→既存を抜いて→SATAスタンドと「お古」をお下がりした</strong>からです。</p>



<h4 class="wp-block-heading">実行前→完成</h4>



<figure class="wp-block-image size-large is-resized has-custom-border"><a href="https://imakat.com/rd.php?id=jCwkhKPO.png" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=jCwkhKPO.png" alt="" class="has-border-color has-grey-border-color" style="border-width:5px;border-radius:15px;aspect-ratio:1.7796208530805686;width:839px;height:auto"/></a></figure>



<p>今回、開始から完成まで、約２日かかりましたが、振り返ってみると、難しい作業は、ありませんでした。もちろん、慎重に行う必要はあります。</p>



<p>殆ど同じ仕様である、DS220+とDS218+を使ったことが、さらに、一連の作業をスムーズにさせました。2台x2巡ですから、4回同じ作業をしたわけです。</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"><strong>1 　</strong>まるでマジック。パソコンの作業を止めることなく、NASやWebサーバーも止めることなく、HDDの容量が増えている。</h4>



<p>DS218+およびDS220+ともに2個のHDDを収容しています。SHRまたはRAID1を使用した場合、最大使用量は小さい方になってしまいます。例えば、異なる容量の既存6TBと新12TBという組み合わせで稼働すること自体はできます。新12TBに既存6TBのデータが書き込まれます。ただし、このままにすると、新12TBの方の6TB分が未使用になってしまいます。このままではやってることが無意味です。ですので一巡目の修復が完了後に、二巡目として、既存6TBを抜いて新12TBを入れて、先の12TBから新12TBにデータを書き込みます。これにより、元のデータを維持した上で、12TBが使用可能領域になります。<strong>パソコンの作業を止めさせることなく、裏側で、HDDを総入れ替えするという、まるでマジック</strong>です。これをDS218+とDS220+の2台同時に行ったわけです。こういったトリック的なやり方は、企業の情報システム部では、ふつうに行われていることかと思いますが、家庭でも、割と簡単に実行できるのは、大いなる進歩です。</p>



<p>余談ですが、NAS(DS220+)とWebサーバー(DS218+)は、別のプロバイダ、別のネットワークにして、隔離しています。</p>



<p><a rel="noopener" target="_blank" href="https://www.synology.com/ja-jp/support/RAID_calculator?hdds=">Synology RAID計算機<span class="fa fa-external-link external-icon anchor-icon"></span></a>というサイトでは、</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a href="https://imakat.com/rd.php?id=0PLcgUrU.png" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=0PLcgUrU.png" alt="" style="aspect-ratio:0.5827814569536424;width:318px;height:auto"/></a></figure>



<p>HDDの組み合わせにより、使用可能な容量を算出してくれます。</p>



<h4 class="wp-block-heading"><strong>２　SATAスタンドのHDDフォーマットはexFAT。</strong></h4>



<p>SATAスタンドは、HDDを挿し込むだけで、SynologyNAS側では、別の2個のUSBディスクと認識されます。(3TB+3TB)x0.9= 5.4TB 使用できます。HDDのフォーマットはexFATにしました。exFATであれば、SATAスタンドのUSBケーブルを抜き挿しして、<strong>WindowsでもMacでも読み書きが出来ます</strong>。</p>



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



<p>この外付けHDD2個でRAIDを組むことはできませんが、シェルスクリプトとスケジューラを使って、ミラーリングの形、常に同じものを2つ持つ形の定期バックアップを行っています（<a rel="noopener" target="_blank" href="https://docs.google.com/document/d/1UVE1WvxvuN7JAe0Xi-flcUvravX7upYZhEK52bzSvdc/edit?usp=sharing">rsyncを使ってUSBHDD１からUSBHDD２へ定期バックアップ<span class="fa fa-external-link external-icon anchor-icon"></span></a>)。</p>



<a rel="noopener" target="_blank" href="https://docs.google.com/drawings/d/10-dgJGt4Y4sB31O5aj126ORL7_jsQ5RzVeBX13p4XlQ/edit?usp=sharing">
<img decoding="async" src="https://docs.google.com/drawings/d/10-dgJGt4Y4sB31O5aj126ORL7_jsQ5RzVeBX13p4XlQ/pub?w=960&#038;h=720"
></a>



<h4 class="wp-block-heading">３　動画がどんどん大容量化。だから、NASに注目が集まりそう。</h4>



<p>つくづく思いますが、動画などの大容量のデータを、どこへ、どのように保存するかは、非常に大きな問題です。どんどん大容量化していきます。クラウドだけに頼っていたら、お金が続かない。クラウドの主な役割は、災害後に復旧させたい重要な情報を預ける、とした場合、そこまで重要ではないが、日常生活の充実のために手元に残しておきたいデータは、どうすればいいか。</p>



<p>NASは、その一つの答えです。</p>



<p>以上</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">17965</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[Appleシリコン]]></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>
		<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>
	</channel>
</rss>
