<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>https://turgenev.cloudfree.jp/mw-new/mw143/index.php?action=history&amp;feed=atom&amp;title=YouTube_%28Music%29%E3%81%AE%E3%83%97%E3%83%AC%E3%82%A4%E3%83%AA%E3%82%B9%E3%83%88%E3%81%AE%E3%82%AE%E3%83%A3%E3%83%83%E3%83%97%E3%83%AC%E3%82%B9%E5%86%8D%E7%94%9F</id>
	<title>YouTube (Music)のプレイリストのギャップレス再生 - 版の履歴</title>
	<link rel="self" type="application/atom+xml" href="https://turgenev.cloudfree.jp/mw-new/mw143/index.php?action=history&amp;feed=atom&amp;title=YouTube_%28Music%29%E3%81%AE%E3%83%97%E3%83%AC%E3%82%A4%E3%83%AA%E3%82%B9%E3%83%88%E3%81%AE%E3%82%AE%E3%83%A3%E3%83%83%E3%83%97%E3%83%AC%E3%82%B9%E5%86%8D%E7%94%9F"/>
	<link rel="alternate" type="text/html" href="https://turgenev.cloudfree.jp/mw-new/mw143/index.php?title=YouTube_(Music)%E3%81%AE%E3%83%97%E3%83%AC%E3%82%A4%E3%83%AA%E3%82%B9%E3%83%88%E3%81%AE%E3%82%AE%E3%83%A3%E3%83%83%E3%83%97%E3%83%AC%E3%82%B9%E5%86%8D%E7%94%9F&amp;action=history"/>
	<updated>2026-04-26T18:56:58Z</updated>
	<subtitle>このウィキのこのページに関する変更履歴</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://turgenev.cloudfree.jp/mw-new/mw143/index.php?title=YouTube_(Music)%E3%81%AE%E3%83%97%E3%83%AC%E3%82%A4%E3%83%AA%E3%82%B9%E3%83%88%E3%81%AE%E3%82%AE%E3%83%A3%E3%83%83%E3%83%97%E3%83%AC%E3%82%B9%E5%86%8D%E7%94%9F&amp;diff=280&amp;oldid=prev</id>
		<title>Turgenev: Notion-MW</title>
		<link rel="alternate" type="text/html" href="https://turgenev.cloudfree.jp/mw-new/mw143/index.php?title=YouTube_(Music)%E3%81%AE%E3%83%97%E3%83%AC%E3%82%A4%E3%83%AA%E3%82%B9%E3%83%88%E3%81%AE%E3%82%AE%E3%83%A3%E3%83%83%E3%83%97%E3%83%AC%E3%82%B9%E5%86%8D%E7%94%9F&amp;diff=280&amp;oldid=prev"/>
		<updated>2024-10-09T07:23:22Z</updated>

		<summary type="html">&lt;p&gt;Notion-MW&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ja&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← 古い版&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2024年10月9日 (水) 16:23時点における版&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l11&quot;&gt;11行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;11行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;インストールは実行ファイル単体でダウンロードしてもいいし、pipのパッケージとして入れてもよい。&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;インストールは実行ファイル単体でダウンロードしてもいいし、pipのパッケージとして入れてもよい。&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;例えば、&amp;lt;code&amp;gt;yt&amp;amp;#45;dlp &amp;amp;#45;F 動画URL&amp;lt;/code&amp;gt;とすると、ダウンロード可能なフォーマット（画質・音質に差がある）が一覧表示される。なおURLに&amp;amp;amp;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;が含まれる場合は””で囲うこと。これを見るとわかるが、YouTubeの動画は内部では動画と音声に分けて管理されており、再生時にブラウザで両者を合成している。最も高品質な音声データは”251”というフォーマット番号のもので、Opus形式で圧縮されたWebMオーディオとなっている。これをギャップレス再生することができれば目的は達成できそうである。&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;例えば、&amp;lt;code&amp;gt;yt&amp;amp;#45;dlp &amp;amp;#45;F 動画URL&amp;lt;/code&amp;gt;とすると、ダウンロード可能なフォーマット（画質・音質に差がある）が一覧表示される。なおURLに&amp;amp;amp;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;が含まれる場合は””で囲うこと。これを見るとわかるが、YouTubeの動画は内部では動画と音声に分けて管理されており、再生時にブラウザで両者を合成している。最も高品質な音声データは”251”というフォーマット番号のもので、Opus形式で圧縮されたWebMオーディオとなっている。これをギャップレス再生することができれば目的は達成できそうである。なお、動画によっては（アップロード日が古いもの？）”251”がないものもある。&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;WebMオーディオのギャップレス再生に対応したソフトは少なく、筆者が知っているものは[https://mpv.io/ mpv]のみである。mpvの使い方やオプションについては[[MPVとギャップレス再生|MPVとギャップレス再生]]も参照。mpv以外だとWindows Media PlayerやFoobar2000などはwavやflacのギャップレス再生には対応しているが、webaの再生においてはわずかに隙間が聴こえる。従ってこの記事ではmpvを使用する。&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;WebMオーディオのギャップレス再生に対応したソフトは少なく、筆者が知っているものは[https://mpv.io/ mpv]のみである。mpvの使い方やオプションについては[[MPVとギャップレス再生|MPVとギャップレス再生]]も参照。mpv以外だとWindows Media PlayerやFoobar2000などはwavやflacのギャップレス再生には対応しているが、webaの再生においてはわずかに隙間が聴こえる。従ってこの記事ではmpvを使用する。&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l122&quot;&gt;122行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;122行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;fi&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;fi&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;shift 2&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;shift 2&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;yt-dlp $NA_OPTION -f &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;251 &lt;/del&gt;--extractor-args &quot;youtube:lang=ja&quot; -O title -O url -I $INDEX:$END_INDEX ${ARR[1]} | sed &#039;1~2 s/^/#EXTINF:-1,/&#039; | sed &#039;1i#EXTM3U&#039; | ./mpv.exe --player-operation-mode=pseudo-gui --prefetch-playlist=yes --playlist=- $@&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;yt-dlp $NA_OPTION -f &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;bestaudio &lt;/ins&gt;--extractor-args &quot;youtube:lang=ja&quot; -O title -O url -I $INDEX:$END_INDEX ${ARR[1]} | sed &#039;1~2 s/^/#EXTINF:-1,/&#039; | sed &#039;1i#EXTM3U&#039; | ./mpv.exe --player-operation-mode=pseudo-gui --prefetch-playlist=yes --playlist=- $@&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;p&amp;gt;まず3行目で、長さ3の配列ARRに①”www”または”music”②プレイリストID③index、をそれぞれ入れる（動画IDは捨てる）。4～6行目で&amp;lt;code&amp;gt;&amp;amp;#45;&amp;amp;#45;compat&amp;amp;#45;options no&amp;amp;#45;youtube&amp;amp;#45;unavailable&amp;amp;#45;videos&amp;lt;/code&amp;gt;の有無を設定する。&amp;lt;/p&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;p&amp;gt;まず3行目で、長さ3の配列ARRに①”www”または”music”②プレイリストID③index、をそれぞれ入れる（動画IDは捨てる）。4～6行目で&amp;lt;code&amp;gt;&amp;amp;#45;&amp;amp;#45;compat&amp;amp;#45;options no&amp;amp;#45;youtube&amp;amp;#45;unavailable&amp;amp;#45;videos&amp;lt;/code&amp;gt;の有無を設定する。&amp;lt;/p&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;p&amp;gt;7～10行目では開始indexと再生曲数を用いて植木算をして終了曲のindexを計算している。$2が0なら$END_INDEXは未設定のため事実上は空文字列（終了曲の指定なし）となる。&amp;lt;/p&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;p&amp;gt;7～10行目では開始indexと再生曲数を用いて植木算をして終了曲のindexを計算している。$2が0なら$END_INDEXは未設定のため事実上は空文字列（終了曲の指定なし）となる。&amp;lt;/p&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;p&amp;gt;最後がメインのコマンド実行である。yt&amp;amp;#45;dlpを用いてタイトルと内部URLの一覧を取得する（なお&amp;lt;code&amp;gt;&amp;amp;#45;&amp;amp;#45;extractor&amp;amp;#45;args &amp;amp;quot;youtube&amp;amp;#58;lang&amp;amp;#61;ja&amp;amp;quot;&amp;lt;/code&amp;gt;は日本語タイトルを取得しようとして入れてあるが、現状では(おそらくyt&amp;amp;#45;dlpがwww.のほうしか見ないため)&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;効果なし）。フォーマットは最高音質の251を指定する。さらに、ここまでに計算した開始・終了インデックスを&lt;/del&gt;&amp;lt;code&amp;gt;&amp;amp;#45;I&amp;lt;/code&amp;gt;オプションで渡す。出力形式としてはタイトルと内部URLが交互に書かれた複数行テキストが返ってくる。&amp;lt;/p&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;p&amp;gt;最後がメインのコマンド実行である。yt&amp;amp;#45;dlpを用いてタイトルと内部URLの一覧を取得する（なお&amp;lt;code&amp;gt;&amp;amp;#45;&amp;amp;#45;extractor&amp;amp;#45;args &amp;amp;quot;youtube&amp;amp;#58;lang&amp;amp;#61;ja&amp;amp;quot;&amp;lt;/code&amp;gt;は日本語タイトルを取得しようとして入れてあるが、現状では(おそらくyt&amp;amp;#45;dlpがwww.のほうしか見ないため)&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;効果なし）。フォーマットは最高音質を取得する&amp;lt;code&amp;gt;bestaudio&amp;lt;/code&amp;gt;を指定する。さらに、ここまでに計算した開始・終了インデックスを&lt;/ins&gt;&amp;lt;code&amp;gt;&amp;amp;#45;I&amp;lt;/code&amp;gt;オプションで渡す。出力形式としてはタイトルと内部URLが交互に書かれた複数行テキストが返ってくる。&amp;lt;/p&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;p&amp;gt;次に、mpvにm3u形式のプレイリスト（単にurlやファイル名を列挙する書式と違って、再生時のタイトルを指定できる）として渡すため、タイトルがある行（奇数行）の先頭に&amp;amp;#35;EXTINF&amp;amp;#58;&amp;amp;#45;1,を付加し、さらに全体の先頭行に&amp;amp;#35;EXTM3Uを付ける。そして最後にmpvの&amp;amp;#45;&amp;amp;#45;playlistに対して標準出力（ハイフンで表される）を渡すことで、めでたくタイトル付きで音声をギャップレス再生できる。動画データを渡していないので画面は真っ黒である。&amp;lt;/p&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;p&amp;gt;次に、mpvにm3u形式のプレイリスト（単にurlやファイル名を列挙する書式と違って、再生時のタイトルを指定できる）として渡すため、タイトルがある行（奇数行）の先頭に&amp;amp;#35;EXTINF&amp;amp;#58;&amp;amp;#45;1,を付加し、さらに全体の先頭行に&amp;amp;#35;EXTM3Uを付ける。そして最後にmpvの&amp;amp;#45;&amp;amp;#45;playlistに対して標準出力（ハイフンで表される）を渡すことで、めでたくタイトル付きで音声をギャップレス再生できる。動画データを渡していないので画面は真っ黒である。&amp;lt;/p&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;p&amp;gt;追加のmpvのオプションとしては、バッチファイルから渡されてきたものに加えて、CUIからの実行でもGUIを強制する&amp;lt;code&amp;gt;&amp;amp;#45;&amp;amp;#45;player&amp;amp;#45;operation&amp;amp;#45;mode&amp;amp;#61;pseudo&amp;amp;#45;gui&amp;lt;/code&amp;gt;とWeb上リソースのギャップレス再生に有効な&amp;lt;code&amp;gt;&amp;amp;#45;&amp;amp;#45;prefetch&amp;amp;#45;playlist&amp;amp;#61;yes&amp;lt;/code&amp;gt;を指定しているが、古いバージョンではさらにオプションが必要かもしれない（[[MPVとギャップレス再生|MPVとギャップレス再生]] も参照）。もちろん、スクリプト内ではなくmpv.confで指定してもよい。&amp;lt;/p&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;p&amp;gt;追加のmpvのオプションとしては、バッチファイルから渡されてきたものに加えて、CUIからの実行でもGUIを強制する&amp;lt;code&amp;gt;&amp;amp;#45;&amp;amp;#45;player&amp;amp;#45;operation&amp;amp;#45;mode&amp;amp;#61;pseudo&amp;amp;#45;gui&amp;lt;/code&amp;gt;とWeb上リソースのギャップレス再生に有効な&amp;lt;code&amp;gt;&amp;amp;#45;&amp;amp;#45;prefetch&amp;amp;#45;playlist&amp;amp;#61;yes&amp;lt;/code&amp;gt;を指定しているが、古いバージョンではさらにオプションが必要かもしれない（[[MPVとギャップレス再生|MPVとギャップレス再生]] も参照）。もちろん、スクリプト内ではなくmpv.confで指定してもよい。&amp;lt;/p&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Turgenev</name></author>
	</entry>
	<entry>
		<id>https://turgenev.cloudfree.jp/mw-new/mw143/index.php?title=YouTube_(Music)%E3%81%AE%E3%83%97%E3%83%AC%E3%82%A4%E3%83%AA%E3%82%B9%E3%83%88%E3%81%AE%E3%82%AE%E3%83%A3%E3%83%83%E3%83%97%E3%83%AC%E3%82%B9%E5%86%8D%E7%94%9F&amp;diff=186&amp;oldid=prev</id>
		<title>Turgenev: Notion-MW</title>
		<link rel="alternate" type="text/html" href="https://turgenev.cloudfree.jp/mw-new/mw143/index.php?title=YouTube_(Music)%E3%81%AE%E3%83%97%E3%83%AC%E3%82%A4%E3%83%AA%E3%82%B9%E3%83%88%E3%81%AE%E3%82%AE%E3%83%A3%E3%83%83%E3%83%97%E3%83%AC%E3%82%B9%E5%86%8D%E7%94%9F&amp;diff=186&amp;oldid=prev"/>
		<updated>2023-11-24T12:34:19Z</updated>

		<summary type="html">&lt;p&gt;Notion-MW&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ja&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← 古い版&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2023年11月24日 (金) 21:34時点における版&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l28&quot;&gt;28行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;28行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;では再生用のコマンドの設計を定める。現実にはプレイリストを丸ごと聴くとは限らないから、開始曲と終了曲を指定できるようにしたい。そこで今回は、&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;では再生用のコマンドの設計を定める。現実にはプレイリストを丸ごと聴くとは限らないから、開始曲と終了曲を指定できるようにしたい。そこで今回は、&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&quot;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;python&lt;/del&gt;&quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&quot;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;c&lt;/ins&gt;&quot;&amp;gt;ytp &quot;[開始曲のプレイリストID付きURL]&quot; [再生曲数（指定なしあるいは0なら最後まで再生）]&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;c&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;ytp &quot;[開始曲のプレイリストID付きURL]&quot; [再生曲数（指定なしあるいは0なら最後まで再生）]&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;という構文で動作するytpというプログラムを作成する。丸ごと聴きたければ最初の曲のリンクを渡せばよい。Windowsにおいてはスタートボタンを押して「検索」欄に入力すれば任意のコマンドを実行できるので（※Windows 11のバージョン22H2ではバグで引数が読まれないので代わりにWin+Rを使うとよい）、YouTube Musicのプレイリスト画面から始めてかなり少ないステップで音楽を聴くことができるようになる。ここで「プレイリストID付きURL」と言っているのは、&amp;lt;code&amp;gt;https&amp;amp;#58;//&amp;amp;#91;wwwまたはmusic&amp;amp;#93;.youtube.com/watch?v&amp;amp;#61;動画のID&amp;amp;amp;list&amp;amp;#61;プレイリストのID&amp;amp;amp;index&amp;amp;#61;&amp;amp;#91;数&amp;amp;#93;&amp;lt;/code&amp;gt;という形式のもので、このindexの部分から開始曲を取得する。&amp;lt;code&amp;gt;www.youtube.com&amp;lt;/code&amp;gt;のほうではプレイリスト内の動画を右クリックして表示されるメニューからこの形式のURLをコピーできる。一方でYouTube Musicでは、アルバム画面で曲目を&amp;lt;u&amp;gt;&amp;lt;strong&amp;gt;Shift+&amp;lt;/strong&amp;gt;&amp;lt;/u&amp;gt;右クリックすれば同様にURLを得られるが、indexの部分が含まれていない。そこで今回は、[https://requestly.io/ &amp;lt;strong&amp;gt;Requestly&amp;lt;/strong&amp;gt;]というブラウザ拡張機能（Chrome、Edge、Safari、FireFox等で使える）を使用し、YouTube MusicのWebページを書き換えてURLに&amp;lt;code&amp;gt;&amp;amp;amp;index&amp;amp;#61;&amp;amp;#91;数&amp;amp;#93;&amp;lt;/code&amp;gt;を付加する。&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;という構文で動作するytpというプログラムを作成する。丸ごと聴きたければ最初の曲のリンクを渡せばよい。Windowsにおいてはスタートボタンを押して「検索」欄に入力すれば任意のコマンドを実行できるので（※Windows 11のバージョン22H2ではバグで引数が読まれないので代わりにWin+Rを使うとよい）、YouTube Musicのプレイリスト画面から始めてかなり少ないステップで音楽を聴くことができるようになる。ここで「プレイリストID付きURL」と言っているのは、&amp;lt;code&amp;gt;https&amp;amp;#58;//&amp;amp;#91;wwwまたはmusic&amp;amp;#93;.youtube.com/watch?v&amp;amp;#61;動画のID&amp;amp;amp;list&amp;amp;#61;プレイリストのID&amp;amp;amp;index&amp;amp;#61;&amp;amp;#91;数&amp;amp;#93;&amp;lt;/code&amp;gt;という形式のもので、このindexの部分から開始曲を取得する。&amp;lt;code&amp;gt;www.youtube.com&amp;lt;/code&amp;gt;のほうではプレイリスト内の動画を右クリックして表示されるメニューからこの形式のURLをコピーできる。一方でYouTube Musicでは、アルバム画面で曲目を&amp;lt;u&amp;gt;&amp;lt;strong&amp;gt;Shift+&amp;lt;/strong&amp;gt;&amp;lt;/u&amp;gt;右クリックすれば同様にURLを得られるが、indexの部分が含まれていない。そこで今回は、[https://requestly.io/ &amp;lt;strong&amp;gt;Requestly&amp;lt;/strong&amp;gt;]というブラウザ拡張機能（Chrome、Edge、Safari、FireFox等で使える）を使用し、YouTube MusicのWebページを書き換えてURLに&amp;lt;code&amp;gt;&amp;amp;amp;index&amp;amp;#61;&amp;amp;#91;数&amp;amp;#93;&amp;lt;/code&amp;gt;を付加する。&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l45&quot;&gt;45行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;42行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;ちなみに、&amp;lt;code&amp;gt;www.youtube.com&amp;lt;/code&amp;gt;のほうに強制的に遷移させる（履歴ごと上書きするために&amp;lt;code&amp;gt;location.replace&amp;lt;/code&amp;gt;を使うのがよい）という方法もある。&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;ちなみに、&amp;lt;code&amp;gt;www.youtube.com&amp;lt;/code&amp;gt;のほうに強制的に遷移させる（履歴ごと上書きするために&amp;lt;code&amp;gt;location.replace&amp;lt;/code&amp;gt;を使うのがよい）という方法もある。&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&quot;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;python&lt;/del&gt;&quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&quot;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;javascript&lt;/ins&gt;&quot;&amp;gt;new MutationObserver(() =&amp;gt; {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;javascript&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;new MutationObserver(() =&amp;gt; {&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     if (location.href.indexOf(&amp;quot;youtube.com/playlist&amp;quot;) &amp;gt;= 0) {&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     if (location.href.indexOf(&amp;quot;youtube.com/playlist&amp;quot;) &amp;gt;= 0) {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         urlAddIndex();&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         urlAddIndex();&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l102&quot;&gt;102行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;96行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;ul&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;ul&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;ytp.bat（最初に呼ばれるランチャー）&amp;lt;/p&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;ytp.bat（最初に呼ばれるランチャー）&amp;lt;/p&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&quot;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;python&lt;/del&gt;&quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&quot;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;c&lt;/ins&gt;&quot;&amp;gt;cd %~dp0&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;c&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;cd %~dp0&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;set &amp;quot;snd=%2&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;set &amp;quot;snd=%2&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;if &amp;quot;%2&amp;quot;==&amp;quot;&amp;quot; set &amp;quot;snd=0&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;if &amp;quot;%2&amp;quot;==&amp;quot;&amp;quot; set &amp;quot;snd=0&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l110&quot;&gt;110行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;102行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;p&amp;gt;再生曲数が指定されていない場合は0を補う。&amp;lt;code&amp;gt;&amp;amp;#45;&amp;amp;#45;af&amp;lt;/code&amp;gt;オプションに関してはバックスラッシュとシングルクォートでエスケープしている（試行錯誤のすえ、とりあえずこれで問題なく動いている）。&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;p&amp;gt;再生曲数が指定されていない場合は0を補う。&amp;lt;code&amp;gt;&amp;amp;#45;&amp;amp;#45;af&amp;lt;/code&amp;gt;オプションに関してはバックスラッシュとシングルクォートでエスケープしている（試行錯誤のすえ、とりあえずこれで問題なく動いている）。&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;ytp&amp;amp;#45;invisible.vbs（bashを非表示で起動するためのvbs）&amp;lt;/p&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;ytp&amp;amp;#45;invisible.vbs（bashを非表示で起動するためのvbs）&amp;lt;/p&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&quot;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;python&quot;&amp;gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&quot;vb.net&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&quot;&amp;gt;&lt;/ins&gt;Dim oWshShell&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;vb.net&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Dim oWshShell&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Set oWshShell = CreateObject(&amp;quot;WScript.Shell&amp;quot;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Set oWshShell = CreateObject(&amp;quot;WScript.Shell&amp;quot;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Dim mpv_args&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Dim mpv_args&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l121&quot;&gt;121行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;111行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;p&amp;gt;2つ目以降の引数をつなげて渡している。Runのオプションで0（非表示）、False（終了を待たない）を指定している。デバッグ時は0を1に変えておくとウィンドウが表示される。&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;p&amp;gt;2つ目以降の引数をつなげて渡している。Runのオプションで0（非表示）、False（終了を待たない）を指定している。デバッグ時は0を1に変えておくとウィンドウが表示される。&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;ytpx.sh（処理を行う本体）&amp;lt;/p&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;ytpx.sh（処理を行う本体）&amp;lt;/p&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&quot;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;python&lt;/del&gt;&quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&quot;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;shell&lt;/ins&gt;&quot;&amp;gt;#!/bin/sh&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;shell&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;#!/bin/sh&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;cd /path/to/mpv_dir&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;cd /path/to/mpv_dir&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;ARR=(`echo $1 | sed -r &amp;quot;s/^.*(www|music)\.youtube\.com\/watch\?v=[^&amp;amp;]+&amp;amp;list=([^&amp;amp;]+)&amp;amp;index=([^&amp;amp;]+)$/\1 \2 \3/&amp;quot;`)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;ARR=(`echo $1 | sed -r &amp;quot;s/^.*(www|music)\.youtube\.com\/watch\?v=[^&amp;amp;]+&amp;amp;list=([^&amp;amp;]+)&amp;amp;index=([^&amp;amp;]+)$/\1 \2 \3/&amp;quot;`)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l146&quot;&gt;146行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;134行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;上記の実装では引用符の入力など多少の回りくどいキーボード操作が必要である。URLはクリップボードに入っているので、ショートカットキーから起動することももちろん可能である。ただし再生曲数を入力するためのダイアログは必要である。以下のAutoHotkeyのスクリプトの例では、Ctrl+Alt+Shift+Lを押すと入力ダイアログを表示して再生曲数を取得し、ytp.batを起動する。&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;上記の実装では引用符の入力など多少の回りくどいキーボード操作が必要である。URLはクリップボードに入っているので、ショートカットキーから起動することももちろん可能である。ただし再生曲数を入力するためのダイアログは必要である。以下のAutoHotkeyのスクリプトの例では、Ctrl+Alt+Shift+Lを押すと入力ダイアログを表示して再生曲数を取得し、ytp.batを起動する。&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&quot;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;python&quot;&amp;gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&quot;vb.net&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&quot;&amp;gt;&lt;/ins&gt;^!+l::&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;vb.net&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;^!+l::&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;InputBox, play_numbers, Gapless Play YouTube, Enter the number of tracks to play (&amp;quot;&amp;quot; or &amp;quot;0&amp;quot; will play to the end)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;InputBox, play_numbers, Gapless Play YouTube, Enter the number of tracks to play (&amp;quot;&amp;quot; or &amp;quot;0&amp;quot; will play to the end)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Run ytp.bat &amp;quot;%clipboard%&amp;quot; %play_numbers%&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Run ytp.bat &amp;quot;%clipboard%&amp;quot; %play_numbers%&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Turgenev</name></author>
	</entry>
	<entry>
		<id>https://turgenev.cloudfree.jp/mw-new/mw143/index.php?title=YouTube_(Music)%E3%81%AE%E3%83%97%E3%83%AC%E3%82%A4%E3%83%AA%E3%82%B9%E3%83%88%E3%81%AE%E3%82%AE%E3%83%A3%E3%83%83%E3%83%97%E3%83%AC%E3%82%B9%E5%86%8D%E7%94%9F&amp;diff=158&amp;oldid=prev</id>
		<title>Turgenev: Notion-MW</title>
		<link rel="alternate" type="text/html" href="https://turgenev.cloudfree.jp/mw-new/mw143/index.php?title=YouTube_(Music)%E3%81%AE%E3%83%97%E3%83%AC%E3%82%A4%E3%83%AA%E3%82%B9%E3%83%88%E3%81%AE%E3%82%AE%E3%83%A3%E3%83%83%E3%83%97%E3%83%AC%E3%82%B9%E5%86%8D%E7%94%9F&amp;diff=158&amp;oldid=prev"/>
		<updated>2023-11-24T12:03:50Z</updated>

		<summary type="html">&lt;p&gt;Notion-MW&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ja&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← 古い版&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2023年11月24日 (金) 21:03時点における版&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l28&quot;&gt;28行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;28行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;では再生用のコマンドの設計を定める。現実にはプレイリストを丸ごと聴くとは限らないから、開始曲と終了曲を指定できるようにしたい。そこで今回は、&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;では再生用のコマンドの設計を定める。現実にはプレイリストを丸ごと聴くとは限らないから、開始曲と終了曲を指定できるようにしたい。そこで今回は、&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&quot;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;c&lt;/del&gt;&quot;&amp;gt;ytp &quot;[開始曲のプレイリストID付きURL]&quot; [再生曲数（指定なしあるいは0なら最後まで再生）]&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&quot;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;python&lt;/ins&gt;&quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;c&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;ytp &quot;[開始曲のプレイリストID付きURL]&quot; [再生曲数（指定なしあるいは0なら最後まで再生）]&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;という構文で動作するytpというプログラムを作成する。丸ごと聴きたければ最初の曲のリンクを渡せばよい。Windowsにおいてはスタートボタンを押して「検索」欄に入力すれば任意のコマンドを実行できるので（※Windows 11のバージョン22H2ではバグで引数が読まれないので代わりにWin+Rを使うとよい）、YouTube Musicのプレイリスト画面から始めてかなり少ないステップで音楽を聴くことができるようになる。ここで「プレイリストID付きURL」と言っているのは、&amp;lt;code&amp;gt;https&amp;amp;#58;//&amp;amp;#91;wwwまたはmusic&amp;amp;#93;.youtube.com/watch?v&amp;amp;#61;動画のID&amp;amp;amp;list&amp;amp;#61;プレイリストのID&amp;amp;amp;index&amp;amp;#61;&amp;amp;#91;数&amp;amp;#93;&amp;lt;/code&amp;gt;という形式のもので、このindexの部分から開始曲を取得する。&amp;lt;code&amp;gt;www.youtube.com&amp;lt;/code&amp;gt;のほうではプレイリスト内の動画を右クリックして表示されるメニューからこの形式のURLをコピーできる。一方でYouTube Musicでは、アルバム画面で曲目を&amp;lt;u&amp;gt;&amp;lt;strong&amp;gt;Shift+&amp;lt;/strong&amp;gt;&amp;lt;/u&amp;gt;右クリックすれば同様にURLを得られるが、indexの部分が含まれていない。そこで今回は、[https://requestly.io/ &amp;lt;strong&amp;gt;Requestly&amp;lt;/strong&amp;gt;]というブラウザ拡張機能（Chrome、Edge、Safari、FireFox等で使える）を使用し、YouTube MusicのWebページを書き換えてURLに&amp;lt;code&amp;gt;&amp;amp;amp;index&amp;amp;#61;&amp;amp;#91;数&amp;amp;#93;&amp;lt;/code&amp;gt;を付加する。&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;という構文で動作するytpというプログラムを作成する。丸ごと聴きたければ最初の曲のリンクを渡せばよい。Windowsにおいてはスタートボタンを押して「検索」欄に入力すれば任意のコマンドを実行できるので（※Windows 11のバージョン22H2ではバグで引数が読まれないので代わりにWin+Rを使うとよい）、YouTube Musicのプレイリスト画面から始めてかなり少ないステップで音楽を聴くことができるようになる。ここで「プレイリストID付きURL」と言っているのは、&amp;lt;code&amp;gt;https&amp;amp;#58;//&amp;amp;#91;wwwまたはmusic&amp;amp;#93;.youtube.com/watch?v&amp;amp;#61;動画のID&amp;amp;amp;list&amp;amp;#61;プレイリストのID&amp;amp;amp;index&amp;amp;#61;&amp;amp;#91;数&amp;amp;#93;&amp;lt;/code&amp;gt;という形式のもので、このindexの部分から開始曲を取得する。&amp;lt;code&amp;gt;www.youtube.com&amp;lt;/code&amp;gt;のほうではプレイリスト内の動画を右クリックして表示されるメニューからこの形式のURLをコピーできる。一方でYouTube Musicでは、アルバム画面で曲目を&amp;lt;u&amp;gt;&amp;lt;strong&amp;gt;Shift+&amp;lt;/strong&amp;gt;&amp;lt;/u&amp;gt;右クリックすれば同様にURLを得られるが、indexの部分が含まれていない。そこで今回は、[https://requestly.io/ &amp;lt;strong&amp;gt;Requestly&amp;lt;/strong&amp;gt;]というブラウザ拡張機能（Chrome、Edge、Safari、FireFox等で使える）を使用し、YouTube MusicのWebページを書き換えてURLに&amp;lt;code&amp;gt;&amp;amp;amp;index&amp;amp;#61;&amp;amp;#91;数&amp;amp;#93;&amp;lt;/code&amp;gt;を付加する。&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l42&quot;&gt;42行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;45行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;ちなみに、&amp;lt;code&amp;gt;www.youtube.com&amp;lt;/code&amp;gt;のほうに強制的に遷移させる（履歴ごと上書きするために&amp;lt;code&amp;gt;location.replace&amp;lt;/code&amp;gt;を使うのがよい）という方法もある。&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;ちなみに、&amp;lt;code&amp;gt;www.youtube.com&amp;lt;/code&amp;gt;のほうに強制的に遷移させる（履歴ごと上書きするために&amp;lt;code&amp;gt;location.replace&amp;lt;/code&amp;gt;を使うのがよい）という方法もある。&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&quot;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;javascript&lt;/del&gt;&quot;&amp;gt;new MutationObserver(() =&amp;gt; {&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&quot;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;python&lt;/ins&gt;&quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;javascript&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;new MutationObserver(() =&amp;gt; {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     if (location.href.indexOf(&amp;quot;youtube.com/playlist&amp;quot;) &amp;gt;= 0) {&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     if (location.href.indexOf(&amp;quot;youtube.com/playlist&amp;quot;) &amp;gt;= 0) {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         urlAddIndex();&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         urlAddIndex();&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l96&quot;&gt;96行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;102行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;ul&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;ul&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;ytp.bat（最初に呼ばれるランチャー）&amp;lt;/p&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;ytp.bat（最初に呼ばれるランチャー）&amp;lt;/p&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&quot;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;c&lt;/del&gt;&quot;&amp;gt;cd %~dp0&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&quot;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;python&lt;/ins&gt;&quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;c&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;cd %~dp0&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;set &amp;quot;snd=%2&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;set &amp;quot;snd=%2&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;if &amp;quot;%2&amp;quot;==&amp;quot;&amp;quot; set &amp;quot;snd=0&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;if &amp;quot;%2&amp;quot;==&amp;quot;&amp;quot; set &amp;quot;snd=0&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l102&quot;&gt;102行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;110行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;p&amp;gt;再生曲数が指定されていない場合は0を補う。&amp;lt;code&amp;gt;&amp;amp;#45;&amp;amp;#45;af&amp;lt;/code&amp;gt;オプションに関してはバックスラッシュとシングルクォートでエスケープしている（試行錯誤のすえ、とりあえずこれで問題なく動いている）。&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;p&amp;gt;再生曲数が指定されていない場合は0を補う。&amp;lt;code&amp;gt;&amp;amp;#45;&amp;amp;#45;af&amp;lt;/code&amp;gt;オプションに関してはバックスラッシュとシングルクォートでエスケープしている（試行錯誤のすえ、とりあえずこれで問題なく動いている）。&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;ytp&amp;amp;#45;invisible.vbs（bashを非表示で起動するためのvbs）&amp;lt;/p&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;ytp&amp;amp;#45;invisible.vbs（bashを非表示で起動するためのvbs）&amp;lt;/p&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;pre class&lt;/del&gt;=&quot;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;visual&lt;/del&gt;&quot;&amp;gt;Dim oWshShell&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;syntaxhighlight lang&lt;/ins&gt;=&quot;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;python&lt;/ins&gt;&quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Set oWshShell = CreateObject(&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;quot;&lt;/del&gt;WScript.Shell&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;quot;&lt;/del&gt;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;vb.net&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Dim oWshShell&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Set oWshShell = CreateObject(&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&quot;&lt;/ins&gt;WScript.Shell&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&quot;&lt;/ins&gt;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Dim mpv_args&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Dim mpv_args&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;For cnt = 2 To WScript.Arguments.Count - 1&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;For cnt = 2 To WScript.Arguments.Count - 1&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  mpv_args =  mpv_args &amp;amp;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;amp; &lt;/del&gt;&amp;amp;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;quot; &amp;amp;quot; &amp;amp;amp; &lt;/del&gt;WScript.Arguments(cnt)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  mpv_args =  mpv_args &amp;amp; &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&quot; &quot; &lt;/ins&gt;&amp;amp; WScript.Arguments(cnt)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Next&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Next&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;oWshShell.Run &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;quot;&amp;amp;quot;&amp;amp;quot;&lt;/del&gt;C:\Program Files\Git\bin\bash.exe&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;quot;&amp;amp;quot; &lt;/del&gt;-c &#039;ytpx.sh &amp;amp;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;quot;&amp;amp;quot;&amp;amp;quot; &amp;amp;amp; &lt;/del&gt;Wscript.Arguments(0) &amp;amp;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;amp; &amp;amp;quot;&amp;amp;quot;&lt;/del&gt;&amp;amp;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;quot; &amp;amp;quot; &amp;amp;amp; &lt;/del&gt;Wscript.Arguments(1) &amp;amp;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;amp; &lt;/del&gt;mpv_args &amp;amp;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;amp; &amp;amp;quot;&lt;/del&gt;&#039;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;quot;&lt;/del&gt;, 0, False&amp;lt;/&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;pre&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;oWshShell.Run &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&quot;&quot;&quot;&lt;/ins&gt;C:\Program Files\Git\bin\bash.exe&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&quot;&quot; &lt;/ins&gt;-c &#039;ytpx.sh &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&quot;&quot;&quot; &lt;/ins&gt;&amp;amp; Wscript.Arguments(0) &amp;amp; &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&quot;&quot;&quot; &quot; &lt;/ins&gt;&amp;amp; Wscript.Arguments(1) &amp;amp; mpv_args &amp;amp; &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&quot;&lt;/ins&gt;&#039;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&quot;&lt;/ins&gt;, 0, False&amp;lt;/&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;syntaxhighlight&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;p&amp;gt;2つ目以降の引数をつなげて渡している。Runのオプションで0（非表示）、False（終了を待たない）を指定している。デバッグ時は0を1に変えておくとウィンドウが表示される。&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;p&amp;gt;2つ目以降の引数をつなげて渡している。Runのオプションで0（非表示）、False（終了を待たない）を指定している。デバッグ時は0を1に変えておくとウィンドウが表示される。&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;ytpx.sh（処理を行う本体）&amp;lt;/p&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;ytpx.sh（処理を行う本体）&amp;lt;/p&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&quot;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;shell&lt;/del&gt;&quot;&amp;gt;#!/bin/sh&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&quot;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;python&lt;/ins&gt;&quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;shell&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;#!/bin/sh&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;cd /path/to/mpv_dir&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;cd /path/to/mpv_dir&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;ARR=(`echo $1 | sed -r &amp;quot;s/^.*(www|music)\.youtube\.com\/watch\?v=[^&amp;amp;]+&amp;amp;list=([^&amp;amp;]+)&amp;amp;index=([^&amp;amp;]+)$/\1 \2 \3/&amp;quot;`)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;ARR=(`echo $1 | sed -r &amp;quot;s/^.*(www|music)\.youtube\.com\/watch\?v=[^&amp;amp;]+&amp;amp;list=([^&amp;amp;]+)&amp;amp;index=([^&amp;amp;]+)$/\1 \2 \3/&amp;quot;`)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l134&quot;&gt;134行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;146行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;上記の実装では引用符の入力など多少の回りくどいキーボード操作が必要である。URLはクリップボードに入っているので、ショートカットキーから起動することももちろん可能である。ただし再生曲数を入力するためのダイアログは必要である。以下のAutoHotkeyのスクリプトの例では、Ctrl+Alt+Shift+Lを押すと入力ダイアログを表示して再生曲数を取得し、ytp.batを起動する。&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;上記の実装では引用符の入力など多少の回りくどいキーボード操作が必要である。URLはクリップボードに入っているので、ショートカットキーから起動することももちろん可能である。ただし再生曲数を入力するためのダイアログは必要である。以下のAutoHotkeyのスクリプトの例では、Ctrl+Alt+Shift+Lを押すと入力ダイアログを表示して再生曲数を取得し、ytp.batを起動する。&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;pre class&lt;/del&gt;=&quot;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;visual&lt;/del&gt;&quot;&amp;gt;^!+l::&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;syntaxhighlight lang&lt;/ins&gt;=&quot;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;python&lt;/ins&gt;&quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;InputBox, play_numbers, Gapless Play YouTube, Enter the number of tracks to play (&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;quot;&amp;amp;quot; &lt;/del&gt;or &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;quot;&lt;/del&gt;0&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;quot; &lt;/del&gt;will play to the end)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Run ytp.bat &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;quot;&lt;/del&gt;%clipboard%&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;quot; &lt;/del&gt;%play_numbers%&amp;lt;/&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;pre&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;vb.net&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;^!+l::&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;InputBox, play_numbers, Gapless Play YouTube, Enter the number of tracks to play (&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&quot;&quot; &lt;/ins&gt;or &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&quot;&lt;/ins&gt;0&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&quot; &lt;/ins&gt;will play to the end)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Run ytp.bat &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&quot;&lt;/ins&gt;%clipboard%&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&quot; &lt;/ins&gt;%play_numbers%&amp;lt;/&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;syntaxhighlight&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;英語は間違っているかもしれない。&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;英語は間違っているかもしれない。&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;ダイアログはvbsのInputboxでも出せるが、Windows標準のショートカットキーの設定（ショートカット（←これはファイルの形式のこと）に対して設定できる）は若干管理しづらいイメージがあるためAutoHotkeyをおすすめしておく。&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;ダイアログはvbsのInputboxでも出せるが、Windows標準のショートカットキーの設定（ショートカット（←これはファイルの形式のこと）に対して設定できる）は若干管理しづらいイメージがあるためAutoHotkeyをおすすめしておく。&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:IT]][[Category:Music]]{{#seo:|title={{FULLPAGENAME}} - Turgenev&amp;#039;s Wiki}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:IT]][[Category:Music]]{{#seo:|title={{FULLPAGENAME}} - Turgenev&amp;#039;s Wiki}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Turgenev</name></author>
	</entry>
	<entry>
		<id>https://turgenev.cloudfree.jp/mw-new/mw143/index.php?title=YouTube_(Music)%E3%81%AE%E3%83%97%E3%83%AC%E3%82%A4%E3%83%AA%E3%82%B9%E3%83%88%E3%81%AE%E3%82%AE%E3%83%A3%E3%83%83%E3%83%97%E3%83%AC%E3%82%B9%E5%86%8D%E7%94%9F&amp;diff=118&amp;oldid=prev</id>
		<title>Turgenev: Notion-MW</title>
		<link rel="alternate" type="text/html" href="https://turgenev.cloudfree.jp/mw-new/mw143/index.php?title=YouTube_(Music)%E3%81%AE%E3%83%97%E3%83%AC%E3%82%A4%E3%83%AA%E3%82%B9%E3%83%88%E3%81%AE%E3%82%AE%E3%83%A3%E3%83%83%E3%83%97%E3%83%AC%E3%82%B9%E5%86%8D%E7%94%9F&amp;diff=118&amp;oldid=prev"/>
		<updated>2023-11-24T10:20:43Z</updated>

		<summary type="html">&lt;p&gt;Notion-MW&lt;/p&gt;
&lt;a href=&quot;https://turgenev.cloudfree.jp/mw-new/mw143/index.php?title=YouTube_(Music)%E3%81%AE%E3%83%97%E3%83%AC%E3%82%A4%E3%83%AA%E3%82%B9%E3%83%88%E3%81%AE%E3%82%AE%E3%83%A3%E3%83%83%E3%83%97%E3%83%AC%E3%82%B9%E5%86%8D%E7%94%9F&amp;amp;diff=118&amp;amp;oldid=111&quot;&gt;差分を表示&lt;/a&gt;</summary>
		<author><name>Turgenev</name></author>
	</entry>
	<entry>
		<id>https://turgenev.cloudfree.jp/mw-new/mw143/index.php?title=YouTube_(Music)%E3%81%AE%E3%83%97%E3%83%AC%E3%82%A4%E3%83%AA%E3%82%B9%E3%83%88%E3%81%AE%E3%82%AE%E3%83%A3%E3%83%83%E3%83%97%E3%83%AC%E3%82%B9%E5%86%8D%E7%94%9F&amp;diff=111&amp;oldid=prev</id>
		<title>Turgenev: Notion-MW</title>
		<link rel="alternate" type="text/html" href="https://turgenev.cloudfree.jp/mw-new/mw143/index.php?title=YouTube_(Music)%E3%81%AE%E3%83%97%E3%83%AC%E3%82%A4%E3%83%AA%E3%82%B9%E3%83%88%E3%81%AE%E3%82%AE%E3%83%A3%E3%83%83%E3%83%97%E3%83%AC%E3%82%B9%E5%86%8D%E7%94%9F&amp;diff=111&amp;oldid=prev"/>
		<updated>2023-11-24T02:41:32Z</updated>

		<summary type="html">&lt;p&gt;Notion-MW&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ja&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← 古い版&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2023年11月24日 (金) 11:41時点における版&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l103&quot;&gt;103行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;103行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;ytp&amp;amp;#45;invisible.vbs（bashを非表示で起動するためのvbs）&amp;lt;/p&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;ytp&amp;amp;#45;invisible.vbs（bashを非表示で起動するためのvbs）&amp;lt;/p&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;visual basic &lt;/del&gt;Dim oWshShell Set oWshShell = CreateObject(&amp;amp;quot;WScript.Shell&amp;amp;quot;) Dim mpv_args For cnt = 2 To WScript.Arguments.Count - 1 mpv_args = mpv_args &amp;amp;amp; &amp;amp;quot; &amp;amp;quot; &amp;amp;amp; WScript.Arguments(cnt) Next oWshShell.Run &amp;amp;quot;&amp;amp;quot;&amp;amp;quot;C:\Program Files\Git\bin\bash.exe&amp;amp;quot;&amp;amp;quot; -c &#039;ytpx.sh &amp;amp;quot;&amp;amp;quot;&amp;amp;quot; &amp;amp;amp; Wscript.Arguments(0) &amp;amp;amp; &amp;amp;quot;&amp;amp;quot;&amp;amp;quot; &amp;amp;quot; &amp;amp;amp; Wscript.Arguments(1) &amp;amp;amp; mpv_args &amp;amp;amp; &amp;amp;quot;&#039;&amp;amp;quot;, 0, False ```&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;vb.net &lt;/ins&gt;Dim oWshShell Set oWshShell = CreateObject(&amp;amp;quot;WScript.Shell&amp;amp;quot;) Dim mpv_args For cnt = 2 To WScript.Arguments.Count - 1 mpv_args = mpv_args &amp;amp;amp; &amp;amp;quot; &amp;amp;quot; &amp;amp;amp; WScript.Arguments(cnt) Next oWshShell.Run &amp;amp;quot;&amp;amp;quot;&amp;amp;quot;C:\Program Files\Git\bin\bash.exe&amp;amp;quot;&amp;amp;quot; -c &#039;ytpx.sh &amp;amp;quot;&amp;amp;quot;&amp;amp;quot; &amp;amp;amp; Wscript.Arguments(0) &amp;amp;amp; &amp;amp;quot;&amp;amp;quot;&amp;amp;quot; &amp;amp;quot; &amp;amp;amp; Wscript.Arguments(1) &amp;amp;amp; mpv_args &amp;amp;amp; &amp;amp;quot;&#039;&amp;amp;quot;, 0, False ```&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;2つ目以降の引数をつなげて渡している。Runのオプションで0（非表示）、False（終了を待たない）を指定している。デバッグ時は0を1に変えておくとウィンドウが表示される。&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;2つ目以降の引数をつなげて渡している。Runのオプションで0（非表示）、False（終了を待たない）を指定している。デバッグ時は0を1に変えておくとウィンドウが表示される。&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l134&quot;&gt;134行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;134行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;上記の実装では引用符の入力など多少の回りくどいキーボード操作が必要である。URLはクリップボードに入っているので、ショートカットキーから起動することももちろん可能である。ただし再生曲数を入力するためのダイアログは必要である。以下のAutoHotkeyのスクリプトの例では、Ctrl+Alt+Shift+Lを押すと入力ダイアログを表示して再生曲数を取得し、ytp.batを起動する。&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;上記の実装では引用符の入力など多少の回りくどいキーボード操作が必要である。URLはクリップボードに入っているので、ショートカットキーから起動することももちろん可能である。ただし再生曲数を入力するためのダイアログは必要である。以下のAutoHotkeyのスクリプトの例では、Ctrl+Alt+Shift+Lを押すと入力ダイアログを表示して再生曲数を取得し、ytp.batを起動する。&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&quot;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;visual basic&lt;/del&gt;&quot;&amp;gt;^!+l::&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&quot;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;vb.net&lt;/ins&gt;&quot;&amp;gt;^!+l::&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;InputBox, play_numbers, Gapless Play YouTube, Enter the number of tracks to play (&amp;quot;&amp;quot; or &amp;quot;0&amp;quot; will play to the end)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;InputBox, play_numbers, Gapless Play YouTube, Enter the number of tracks to play (&amp;quot;&amp;quot; or &amp;quot;0&amp;quot; will play to the end)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Run ytp.bat &amp;quot;%clipboard%&amp;quot; %play_numbers%&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Run ytp.bat &amp;quot;%clipboard%&amp;quot; %play_numbers%&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Turgenev</name></author>
	</entry>
	<entry>
		<id>https://turgenev.cloudfree.jp/mw-new/mw143/index.php?title=YouTube_(Music)%E3%81%AE%E3%83%97%E3%83%AC%E3%82%A4%E3%83%AA%E3%82%B9%E3%83%88%E3%81%AE%E3%82%AE%E3%83%A3%E3%83%83%E3%83%97%E3%83%AC%E3%82%B9%E5%86%8D%E7%94%9F&amp;diff=87&amp;oldid=prev</id>
		<title>Turgenev: Notion-MW</title>
		<link rel="alternate" type="text/html" href="https://turgenev.cloudfree.jp/mw-new/mw143/index.php?title=YouTube_(Music)%E3%81%AE%E3%83%97%E3%83%AC%E3%82%A4%E3%83%AA%E3%82%B9%E3%83%88%E3%81%AE%E3%82%AE%E3%83%A3%E3%83%83%E3%83%97%E3%83%AC%E3%82%B9%E5%86%8D%E7%94%9F&amp;diff=87&amp;oldid=prev"/>
		<updated>2023-11-24T02:08:43Z</updated>

		<summary type="html">&lt;p&gt;Notion-MW&lt;/p&gt;
&lt;a href=&quot;https://turgenev.cloudfree.jp/mw-new/mw143/index.php?title=YouTube_(Music)%E3%81%AE%E3%83%97%E3%83%AC%E3%82%A4%E3%83%AA%E3%82%B9%E3%83%88%E3%81%AE%E3%82%AE%E3%83%A3%E3%83%83%E3%83%97%E3%83%AC%E3%82%B9%E5%86%8D%E7%94%9F&amp;amp;diff=87&amp;amp;oldid=26&quot;&gt;差分を表示&lt;/a&gt;</summary>
		<author><name>Turgenev</name></author>
	</entry>
	<entry>
		<id>https://turgenev.cloudfree.jp/mw-new/mw143/index.php?title=YouTube_(Music)%E3%81%AE%E3%83%97%E3%83%AC%E3%82%A4%E3%83%AA%E3%82%B9%E3%83%88%E3%81%AE%E3%82%AE%E3%83%A3%E3%83%83%E3%83%97%E3%83%AC%E3%82%B9%E5%86%8D%E7%94%9F&amp;diff=26&amp;oldid=prev</id>
		<title>Turgenev: Notion-MW</title>
		<link rel="alternate" type="text/html" href="https://turgenev.cloudfree.jp/mw-new/mw143/index.php?title=YouTube_(Music)%E3%81%AE%E3%83%97%E3%83%AC%E3%82%A4%E3%83%AA%E3%82%B9%E3%83%88%E3%81%AE%E3%82%AE%E3%83%A3%E3%83%83%E3%83%97%E3%83%AC%E3%82%B9%E5%86%8D%E7%94%9F&amp;diff=26&amp;oldid=prev"/>
		<updated>2023-11-23T13:16:09Z</updated>

		<summary type="html">&lt;p&gt;Notion-MW&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新規ページ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;YouTube Musicの無料版は、Googleアカウントすら不要のサービスながら、Apple music等の有料サービスと比較してもそれなりの範囲の楽曲をカバーしている。アルバムはYouTubeのプレイリストとして管理されており、検索は曲からアルバムへの移動ができるYouTube Music上で行う方が便利であるがURLの「music.」を消せば（「www.」に変えれば）YouTube上でも視聴可能である。しかし、YouTubeもYouTube Musicも（筆者の知る限り、少なくとも無料版では）ギャップレス再生には対応しておらず、ライブアルバムやアタッカ有りの交響曲などで曲間の音が不自然に途切れてしまう。これを解決しようというのが今回のテーマである。ついでに広告が非表示になり、再生中に「動画が一時停止されました。続きを再生しますか？」のポップアップが表示されることもなくなる。&lt;br /&gt;
&lt;br /&gt;
なお動作確認したのはWindowsとLinuxのみである。ただ再生に使用するソフトであるmpvはMacにもあるのでMacでも動くだろう。Androidは頑張ればLinuxでできることは全てできるという印象なのでできそうだがMacよりは大変だろう。mpv&amp;amp;#45;androidというAndroid用のmpvクライアントもあるらしいので使えそうではある。iPhoneは知らない。&lt;br /&gt;
&lt;br /&gt;
== yt&amp;amp;#45;dlp ==&lt;br /&gt;
&lt;br /&gt;
YouTube側が提供するソフトウェアで解決するのは難しそうなので、内部データを直接用いる必要がある。そのため、YouTube（やその他多くの動画サービス）のデータを解析・ダウンロードすることができるフリーソフトである&amp;lt;strong&amp;gt;yt&amp;amp;#45;dlp&amp;lt;/strong&amp;gt;（[https://github.com/yt-dlp/yt-dlp https://github.com/yt-dlp/yt-dlp]）を使用する。&lt;br /&gt;
&lt;br /&gt;
yt&amp;amp;#45;dlpはyoutube&amp;amp;#45;dl（のフォークであるyoutube&amp;amp;#45;dlc）のフォークである。現時点でのyoutube&amp;amp;#45;dlの最新版（2021.12.17）では、YouTube動画のダウンロードが異常に遅くなる不具合がある（YouTube側の変更によるもので、発生はおそらく2021年頃から？）（[https://github.com/ytdl-org/youtube-dl/issues/30715 https://github.com/ytdl-org/youtube-dl/issues/30715] によると修正は完了しているがリリースに反映されていない）が、yt&amp;amp;#45;dlpではこの問題が修正されている。&lt;br /&gt;
&lt;br /&gt;
インストールは実行ファイル単体でダウンロードしてもいいし、pipのパッケージとして入れてもよい。&lt;br /&gt;
&lt;br /&gt;
例えば、&amp;lt;code&amp;gt;yt&amp;amp;#45;dlp &amp;amp;#45;F 動画URL&amp;lt;/code&amp;gt;とすると、ダウンロード可能なフォーマット（画質・音質に差がある）が一覧表示される。なおURLに&amp;amp;amp;が含まれる場合は””で囲うこと。これを見るとわかるが、YouTubeの動画は内部では動画と音声に分けて管理されており、再生時にブラウザで両者を合成している。最も高品質な音声データは”251”というフォーマット番号のもので、Opus形式で圧縮されたWebMオーディオとなっている。これをギャップレス再生することができれば目的は達成できそうである。&lt;br /&gt;
&lt;br /&gt;
WebMオーディオのギャップレス再生に対応したソフトは少なく、筆者が知っているものは[https://mpv.io/ mpv]のみである。mpvの使い方やオプションについては[[MPVとギャップレス再生|MPVとギャップレス再生]]も参照。mpv以外だとWindows Media PlayerやFoobar2000などはwavやflacのギャップレス再生には対応しているが、webaの再生においてはわずかに隙間が聴こえる。従ってこの記事ではmpvを使用する。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;mpvでの内部urlの再生&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== mpvでの内部URLの再生 ==&lt;br /&gt;
&lt;br /&gt;
yt&amp;amp;#45;dlpでは（名前の通り）音声データをローカルにダウンロードすることもできるが、著作権法・YouTubeの利用規約上の問題があるため、もっと良い方法を考える。実は、yt&amp;amp;#45;dlpでは音声データをダウンロードするのではなくそのURLを取得することもできる（通常の動画のURLと区別するために以下では”内部URL”と呼ぶことにしよう）。またmpvはWeb上のリソースの再生にも対応している。従って、yt&amp;amp;#45;dlpでURLを取得してからそれをmpvに渡すという流れにすれば求める機能が実現できそうである。なお、前述の[[MPVとギャップレス再生|MPVとギャップレス再生]]にもあるように、ギャップレス再生を有効にするためにmpvに特定のオプション（最新版ならおそらく&amp;lt;code&amp;gt;prefetch&amp;amp;#45;playlist&amp;amp;#61;yes&amp;lt;/code&amp;gt;か&amp;lt;code&amp;gt;audio&amp;amp;#45;buffer&amp;amp;#61;&amp;amp;#91;2以上くらいの数字&amp;amp;#93;&amp;lt;/code&amp;gt;のどちらか）を設定する必要がある。&lt;br /&gt;
&lt;br /&gt;
ちなみに、mpv自体にもyoutube&amp;amp;#45;dlとの連携機能があり、内部URLではなく通常のYouTubeのURLを渡しても再生することができるが、この場合ギャップレス再生にはならない（[https://github.com/mpv-player/mpv/issues/7436 https://github.com/mpv-player/mpv/issues/7436]）（&amp;amp;#45;&amp;amp;#45;prefetch&amp;amp;#45;playlistも効果がない）。&lt;br /&gt;
&lt;br /&gt;
ところで、この内部URLを見てみると最初のほうにexpire&amp;amp;#61;xxxxxxxxxxとUNIX時間らしきものが書いてあるパラメータがあり、どうやらこのURLの有効期限は6時間しかないようである。従って6時間以上かかるプレイリストを再生するあるいは再生を途中で止めて時間が経ったなどの場合は再生できなくなってしまう。参照する内部URLを動的で切り替えてくれるプロキシ的なものを用意するとかプレイリストを途中で書き換える（この場合mpvの&amp;amp;#45;&amp;amp;#45;prefetch&amp;amp;#45;playlistを使うべきではない）とかすれば解決できそうだがそれほど簡単ではない気がするため放置している（簡単なのであればYouTubeのプレイリストURLを直接指定してのギャップレス再生にmpvが対応していたのではないかと思う）。&lt;br /&gt;
&lt;br /&gt;
== 実装の方針 ==&lt;br /&gt;
&lt;br /&gt;
では再生用のコマンドの設計を定める。現実にはプレイリストを丸ごと聴くとは限らないから、開始曲と終了曲を指定できるようにしたい。そこで今回は、&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;dummy_str_c&amp;quot;&amp;gt;ytp &amp;amp;quot;[開始曲のプレイリストID付きURL]&amp;amp;quot; [再生曲数（指定なしあるいは0なら最後まで再生）]&amp;lt;/pre&amp;gt;&lt;br /&gt;
という構文で動作するytpというプログラムを作成する。丸ごと聴きたければ最初の曲のリンクを渡せばよい。Windowsにおいてはスタートボタンを押して「検索」欄に入力すれば任意のコマンドを実行できるので（※Windows 11のバージョン22H2ではバグで引数が読まれないので代わりにWin+Rを使うとよい）、YouTube Musicのプレイリスト画面から始めてかなり少ないステップで音楽を聴くことができるようになる。ここで「プレイリストID付きURL」と言っているのは、&amp;lt;code&amp;gt;https&amp;amp;#58;//&amp;amp;#91;wwwまたはmusic&amp;amp;#93;.youtube.com/watch?v&amp;amp;#61;動画のID&amp;amp;amp;list&amp;amp;#61;プレイリストのID&amp;amp;amp;index&amp;amp;#61;&amp;amp;#91;数&amp;amp;#93;&amp;lt;/code&amp;gt;という形式のもので、このindexの部分から開始曲を取得する。&amp;lt;code&amp;gt;www.youtube.com&amp;lt;/code&amp;gt;のほうではプレイリスト内の動画を右クリックして表示されるメニューからこの形式のURLをコピーできる。一方でYouTube Musicでは、アルバム画面で曲目を&amp;lt;u&amp;gt;&amp;lt;strong&amp;gt;Shift+&amp;lt;/strong&amp;gt;&amp;lt;/u&amp;gt;右クリックすれば同様にURLを得られるが、indexの部分が含まれていない。そこで今回は、[https://requestly.io/ &amp;lt;strong&amp;gt;Requestly&amp;lt;/strong&amp;gt;]というブラウザ拡張機能（Chrome、Edge、Safari、FireFox等で使える）を使用し、YouTube MusicのWebページを書き換えてURLに&amp;lt;code&amp;gt;&amp;amp;amp;index&amp;amp;#61;&amp;amp;#91;数&amp;amp;#93;&amp;lt;/code&amp;gt;を付加する。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;requestlyによるwebページの書き換え&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== RequestlyによるWebページの書き換え ==&lt;br /&gt;
&lt;br /&gt;
{{Valuable}}&lt;br /&gt;
&lt;br /&gt;
Requestlyの「&amp;lt;strong&amp;gt;Insert Scripts&amp;lt;/strong&amp;gt;」を使用する。最初、呼び出し条件（If request URL Contains）にmusic.youtube.com/playlistを指定してもどうしてもうまくいかなかったのだが、YouTube Musicはシングルページのアプリケーションとして実装されているようで、URLは形式的に書き換えられているだけらしい（[https://github.com/requestly/requestly/issues/225 https://github.com/requestly/requestly/issues/225]）。そこで、呼び出し条件には”music.youtube.com”だけを指定し、MutationObserverというのを用いてページ内の変化を常時監視するような形でスクリプトを書く。呼び出しのタイミングは「Insert &amp;lt;strong&amp;gt;Before Page Load&amp;lt;/strong&amp;gt;」に設定すること。&lt;br /&gt;
&lt;br /&gt;
ただ、このコードだと条件が緩すぎて、一度の遷移につき十回ほど書き換え関数が実行されてしまうので改善を検討中。しかし厳しすぎるとこんどは高速で遷移した場合などにうまく実行されなかったりする。URLの書き換え自体は、CSSセレクタみたいなやつを適当に書けばいいので容易。&lt;br /&gt;
&lt;br /&gt;
ちなみに、&amp;lt;code&amp;gt;www.youtube.com&amp;lt;/code&amp;gt;のほうに強制的に遷移させる（履歴ごと上書きするために&amp;lt;code&amp;gt;location.replace&amp;lt;/code&amp;gt;を使うのがよい）という方法もある。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;dummy_str_javascript&amp;quot;&amp;gt;new MutationObserver(() =&amp;amp;gt; {&lt;br /&gt;
    if (location.href.indexOf(&amp;amp;quot;youtube.com/playlist&amp;amp;quot;) &amp;amp;gt;= 0) {&lt;br /&gt;
        urlAddIndex();&lt;br /&gt;
    }&lt;br /&gt;
}).observe(document, { subtree: true, childList: true });&lt;br /&gt;
&lt;br /&gt;
function urlAddIndex() {&lt;br /&gt;
    const playlist_node = document.querySelectorAll(&amp;#039;ytmusic-responsive-list-item-renderer.style-scope.ytmusic-shelf-renderer&amp;#039;);&lt;br /&gt;
    if (!playlist_node) return;&lt;br /&gt;
    for (const item of playlist_node) {&lt;br /&gt;
        var index_node = item.querySelector(&amp;amp;quot;div.left-items.style-scope.ytmusic-responsive-list-item-renderer &amp;amp;gt; yt-formatted-string&amp;amp;quot;);&lt;br /&gt;
        var title_node = item.querySelector(&amp;amp;quot;div.flex-columns.style-scope.ytmusic-responsive-list-item-renderer &amp;amp;gt; div.title-column.style-scope.ytmusic-responsive-list-item-renderer &amp;amp;gt; yt-formatted-string&amp;amp;quot;);&lt;br /&gt;
        if (!title_node || !index_node) continue;&lt;br /&gt;
        if (title_node.innerHTML.indexOf(&amp;amp;quot;&amp;amp;amp;amp;index=&amp;amp;quot;) &amp;amp;gt;= 0) continue;&lt;br /&gt;
        if (index_node.innerHTML == &amp;amp;quot; &amp;amp;quot;) continue;//for unavailable movies&lt;br /&gt;
        var newHTML = title_node.innerHTML.replace(&amp;amp;quot;\&amp;amp;quot;&amp;amp;gt;&amp;amp;quot;, &amp;amp;quot;&amp;amp;amp;amp;index=&amp;amp;quot; + index_node.innerHTML + &amp;amp;quot;\&amp;amp;quot;&amp;amp;gt;&amp;amp;quot;);&lt;br /&gt;
        title_node.innerHTML = newHTML;&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Requestlyの要求権限には「すべてのウェブサイト上にある自分の全データの読み取りと変更」が含まれる。自己責任でインストールすること。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;musicyoutubecomとwwwyoutubecomで内容が異なるプレイリスト及び利用不可能な曲を含むプレイリストへの対策&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== music.youtube.comとwww.youtube.comで内容が異なるプレイリスト及び利用不可能な曲を含むプレイリストへの対策 ==&lt;br /&gt;
&lt;br /&gt;
{{Valuable}}&lt;br /&gt;
&lt;br /&gt;
最初に述べた通り基本的にはURLがmusic.youtube.comでもwww.youtube.comでも同じプレイリストを視聴することができるが、一部のプレイリストでは含まれる動画が異なる場合がある（&amp;lt;code&amp;gt;v&amp;amp;#61;&amp;lt;/code&amp;gt;の後にあるIDで確認できる）。クラシック音楽のアルバムにはあまりないが、ロックバンドによるアルバムなどではしばしば見られる。&lt;br /&gt;
&lt;br /&gt;
例えば[https://music.youtube.com/playlist?list=OLAK5uy_nHB9DSjQxYMXFKwFIZz1WXXoZuQ4AxYuQ The Beatles 1967 &amp;amp;#45; 1970]の最初の曲は、「www」経由だとアルバムのジャケットと同じ静止画が映像として表示され、冒頭の音声は左側に極端に偏ったものが再生される（ビートルズの曲にはこのようなものが多いらしい）。一方、「music」経由だと動きのある映像が表示され、音声も左右に偏りのないものが聴こえる。明らかに全く別のデータである。&lt;br /&gt;
&lt;br /&gt;
次は[https://music.youtube.com/playlist?list=OLAK5uy_lVEZmlEedj-WUP1WweM08LQHreaecJLq0 The Lamb Lies Down On Broadway (Remastered 2008)]を見てみよう。「www」はやはりアルバムのジャケットと同じ静止画の映像だが、「music」のほうはディスクが回転する地味なアニメーション映像が表示される。音声に関しては一聴して違いは感じられず、実際おそらくいずれも全く同じデータに由来する（せいぜい非可逆圧縮による音質の違い程度しかない）ものかと思われる。しかし、ギャップレス再生という観点では重要な違いがあり、「music」のほうの音声は冒頭or末尾ごく短い無音が挿入されているようで、mpvでギャップレス再生をしても隙間が聞こえてしまう。&lt;br /&gt;
&lt;br /&gt;
ということで結論としては、常に「www」のほうのプレイリストデータを使用すべきである。といっても、現状のyt&amp;amp;#45;dlpはmusic.youtube.comのURLを指定したとしてもwww.youtube.comのデータしか取ってこない（[https://github.com/yt-dlp/yt-dlp/issues/622 https://github.com/yt-dlp/yt-dlp/issues/622]）（&amp;amp;#45;&amp;amp;#45;extractor&amp;amp;#45;argsなども効果なし）ため、特に対策などは不要である。&lt;br /&gt;
&lt;br /&gt;
筆者がこの問題に気づく以前は、yt&amp;amp;#45;dlpでプレイリストIDから動画IDの一覧を取得し（このように内部データを参照しない操作では&amp;amp;#45;&amp;amp;#45;flat&amp;amp;#45;playlistを指定すると大幅に速度が向上することを付記しておく）、URLの動画IDと照合してindexを計算していた。しかし両URLで内容が異なるプレイリストだと「www」のデータの中から「music」でのIDを検索しても見つからないため、ページの書き換えでindex番号を付加する（URLの動画IDは無視する）方法にしたという経緯があった。&lt;br /&gt;
&lt;br /&gt;
また、一部のプレイリストでは利用不可能（有料版のみ）として灰色で表示されている曲があり、これは&amp;lt;code&amp;gt;www.youtube.com&amp;lt;/code&amp;gt;で見るとそもそもプレイリスト内に表示されず、URLの&amp;lt;code&amp;gt;index&amp;lt;/code&amp;gt;もこれらを無視したものになっている。一方でyt&amp;amp;#45;dlpはデフォルトでは利用不可能な曲も含めて曲数をカウントするため、wwwのURLの&amp;lt;code&amp;gt;index&amp;lt;/code&amp;gt;を使うと曲数がズレてしまう。対策としては、&amp;lt;code&amp;gt;www.youtube.com&amp;lt;/code&amp;gt;のURLが渡された際にはyt&amp;amp;#45;dlpに&amp;lt;code&amp;gt;&amp;amp;#45;&amp;amp;#45;compat&amp;amp;#45;options no&amp;amp;#45;youtube&amp;amp;#45;unavailable&amp;amp;#45;videos&amp;lt;/code&amp;gt;を指定すれば正しい曲が選ばれる。&lt;br /&gt;
&lt;br /&gt;
== ytpコマンドの実装 ==&lt;br /&gt;
&lt;br /&gt;
では、URLを受け取って再生する部分を実装する。本質的な部分は全てyt&amp;amp;#45;dlpがやってくれるので使用言語は何でもいいが、個人的に既にGit Bashをインストールしていたので、本体をシェルスクリプトで作成し、それを呼び出すためだけのバッチを別で作成するという方針にした。このためだけに読者にGit Bashをインストールさせるのもどうかと思うが、罠だらけのcmdのバッチファイルで文字列処理を書く気にはなれないし、かといってPythonとかを使うのも大袈裟な感じである。&lt;br /&gt;
&lt;br /&gt;
ところで、ただbatから実行するだけだとコマンドプロンプトのウインドウ（&amp;lt;code&amp;gt;start&amp;lt;/code&amp;gt;を使うならbashのウインドウ）が再生中にずっと出ていて邪魔である。やり方が悪いのかわからないがnohupを使ってもうまくいかない（パイプを使ってmpv.exeに直接プレイリストを渡していてそこにシェルが介在するため難しそう？）。そこでvbsを使ってGit Bashをウインドウ非表示で呼び出すことにした。しかしvbsはbatと違って拡張子無しで実行できないのでさらにこのvbsを呼び出すだけのbatを作成した。結果としてやや回りくどい実装になってしまった。&lt;br /&gt;
&lt;br /&gt;
bat内ではmpvのオプションを指定できるようにした。&lt;br /&gt;
&lt;br /&gt;
== スクリプトの内容 ==&lt;br /&gt;
&lt;br /&gt;
{{Valuable}}&lt;br /&gt;
&lt;br /&gt;
ではスクリプトの内容を添付する。ここでは、mpvに渡すオプションの例として、フルスクリーン指定&amp;lt;code&amp;gt;&amp;amp;#45;&amp;amp;#45;fs&amp;amp;#61;yes&amp;lt;/code&amp;gt;、及び前述のビートルズのような極端なステレオを緩和して左右それぞれ3&amp;amp;#58;1の割合で混ぜる&amp;lt;code&amp;gt;&amp;amp;#45;&amp;amp;#45;af&amp;amp;#61;lavfi&amp;amp;#61;&amp;amp;#91;pan&amp;amp;#61;stereo|c0&amp;amp;#61;0.75&amp;amp;#42;c0+0.25&amp;amp;#42;c1|c1&amp;amp;#61;0.25&amp;amp;#42;c0+0.75&amp;amp;#42;c1&amp;amp;#93;&amp;lt;/code&amp;gt;を使った。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;ytp.bat（最初に呼ばれるランチャー）&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&amp;quot;dummy_str_c&amp;quot;&amp;gt;cd %~dp0&lt;br /&gt;
set &amp;amp;quot;snd=%2&amp;amp;quot;&lt;br /&gt;
if &amp;amp;quot;%2&amp;amp;quot;==&amp;amp;quot;&amp;amp;quot; set &amp;amp;quot;snd=0&amp;amp;quot;&lt;br /&gt;
start &amp;amp;quot;&amp;amp;quot; &amp;amp;quot;ytp-invisible.vbs&amp;amp;quot; %1 %snd% &amp;amp;quot;--fs=yes&amp;amp;quot; &amp;amp;quot;\&amp;#039;--af=lavfi=[pan=stereo|c0=0.75*c0+0.25*c1|c1=0.25*c0+0.75*c1]\&amp;#039;&amp;amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;再生曲数が指定されていない場合は0を補う。&amp;lt;code&amp;gt;&amp;amp;#45;&amp;amp;#45;af&amp;lt;/code&amp;gt;オプションに関してはバックスラッシュとシングルクォートでエスケープしている（試行錯誤のすえ、とりあえずこれで問題なく動いている）。&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;ytp&amp;amp;#45;invisible.vbs（bashを非表示で起動するためのvbs）&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&amp;quot;dummy_str_visual_basic&amp;quot;&amp;gt;Dim oWshShell&lt;br /&gt;
Set oWshShell = CreateObject(&amp;amp;quot;WScript.Shell&amp;amp;quot;)&lt;br /&gt;
Dim mpv_args&lt;br /&gt;
For cnt = 2 To WScript.Arguments.Count - 1&lt;br /&gt;
 mpv_args =  mpv_args &amp;amp;amp; &amp;amp;quot; &amp;amp;quot; &amp;amp;amp; WScript.Arguments(cnt)&lt;br /&gt;
Next&lt;br /&gt;
oWshShell.Run &amp;amp;quot;&amp;amp;quot;&amp;amp;quot;C:\Program Files\Git\bin\bash.exe&amp;amp;quot;&amp;amp;quot; -c &amp;#039;ytpx.sh &amp;amp;quot;&amp;amp;quot;&amp;amp;quot; &amp;amp;amp; Wscript.Arguments(0) &amp;amp;amp; &amp;amp;quot;&amp;amp;quot;&amp;amp;quot; &amp;amp;quot; &amp;amp;amp; Wscript.Arguments(1) &amp;amp;amp; mpv_args &amp;amp;amp; &amp;amp;quot;&amp;#039;&amp;amp;quot;, 0, False&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;2つ目以降の引数をつなげて渡している。Runのオプションで0（非表示）、False（終了を待たない）を指定している。デバッグ時は0を1に変えておくとウィンドウが表示される。&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;ytpx.sh（処理を行う本体）&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&amp;quot;dummy_str_shell&amp;quot;&amp;gt;#!/bin/sh&lt;br /&gt;
cd /path/to/mpv_dir&lt;br /&gt;
ARR=(`echo $1 | sed -r &amp;amp;quot;s/^.*(www|music)\.youtube\.com\/watch\?v=[^&amp;amp;amp;]+&amp;amp;amp;list=([^&amp;amp;amp;]+)&amp;amp;amp;index=([^&amp;amp;amp;]+)$/\1 \2 \3/&amp;amp;quot;`)&lt;br /&gt;
if [ ${ARR[0]} = &amp;amp;quot;www&amp;amp;quot; ]; then&lt;br /&gt;
  NA_OPTION=&amp;amp;quot;--compat-options no-youtube-unavailable-videos&amp;amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
INDEX=${ARR[2]}&lt;br /&gt;
if [ &amp;amp;quot;$2&amp;amp;quot; != &amp;amp;quot;0&amp;amp;quot; ]; then&lt;br /&gt;
  END_INDEX=`expr $INDEX + $2 - 1`&lt;br /&gt;
fi&lt;br /&gt;
shift 2&lt;br /&gt;
yt-dlp $NA_OPTION -f 251 --extractor-args &amp;amp;quot;youtube:lang=ja&amp;amp;quot; -O title -O url -I $INDEX:$END_INDEX ${ARR[1]} | sed &amp;#039;1~2 s/^/#EXTINF:-1,/&amp;#039; | sed &amp;#039;1i#EXTM3U&amp;#039; | ./mpv.exe --player-operation-mode=pseudo-gui --prefetch-playlist=yes --playlist=- $@&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;まず3行目で、長さ3の配列ARRに①”www”または”music”②プレイリストID③index、をそれぞれ入れる（動画IDは捨てる）。4～6行目で&amp;lt;code&amp;gt;&amp;amp;#45;&amp;amp;#45;compat&amp;amp;#45;options no&amp;amp;#45;youtube&amp;amp;#45;unavailable&amp;amp;#45;videos&amp;lt;/code&amp;gt;の有無を設定する。&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;7～10行目では開始indexと再生曲数を用いて植木算をして終了曲のindexを計算している。$2が0なら$END_INDEXは未設定のため事実上は空文字列（終了曲の指定なし）となる。&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;最後がメインのコマンド実行である。yt&amp;amp;#45;dlpを用いてタイトルと内部URLの一覧を取得する（なお&amp;lt;code&amp;gt;&amp;amp;#45;&amp;amp;#45;extractor&amp;amp;#45;args &amp;amp;quot;youtube&amp;amp;#58;lang&amp;amp;#61;ja&amp;amp;quot;&amp;lt;/code&amp;gt;は日本語タイトルを取得しようとして入れてあるが、現状では(おそらくyt&amp;amp;#45;dlpがwww.のほうしか見ないため)効果なし）。フォーマットは最高音質の251を指定する。さらに、ここまでに計算した開始・終了インデックスを&amp;lt;code&amp;gt;&amp;amp;#45;I&amp;lt;/code&amp;gt;オプションで渡す。出力形式としてはタイトルと内部URLが交互に書かれた複数行テキストが返ってくる。&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;次に、mpvにm3u形式のプレイリスト（単にurlやファイル名を列挙する書式と違って、再生時のタイトルを指定できる）として渡すため、タイトルがある行（奇数行）の先頭に&amp;amp;#35;EXTINF&amp;amp;#58;&amp;amp;#45;1,を付加し、さらに全体の先頭行に&amp;amp;#35;EXTM3Uを付ける。そして最後にmpvの&amp;amp;#45;&amp;amp;#45;playlistに対して標準出力（ハイフンで表される）を渡すことで、めでたくタイトル付きで音声をギャップレス再生できる。動画データを渡していないので画面は真っ黒である。&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;追加のmpvのオプションとしては、バッチファイルから渡されてきたものに加えて、CUIからの実行でもGUIを強制する&amp;lt;code&amp;gt;&amp;amp;#45;&amp;amp;#45;player&amp;amp;#45;operation&amp;amp;#45;mode&amp;amp;#61;pseudo&amp;amp;#45;gui&amp;lt;/code&amp;gt;とWeb上リソースのギャップレス再生に有効な&amp;lt;code&amp;gt;&amp;amp;#45;&amp;amp;#45;prefetch&amp;amp;#45;playlist&amp;amp;#61;yes&amp;lt;/code&amp;gt;を指定しているが、古いバージョンではさらにオプションが必要かもしれない（[[MPVとギャップレス再生|MPVとギャップレス再生]] も参照）。もちろん、スクリプト内ではなくmpv.confで指定してもよい。&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;なお(lib)mpvを内部で使用する&amp;lt;strong&amp;gt;mpv以外の&amp;lt;/strong&amp;gt;クライアント（Linuxのcelluloidなど）の場合はハイフンを用いた標準入力からの受け取り指定ができないこともある。手元のLinuxではとりあえず一旦m3uファイルに書き込んでからそれをcelluloidに渡すように変えてある（自明なのでここでは省略）。celluloidなどを使う場合も、適宜オプションを指定すること。&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ショートカットキーからの起動 ==&lt;br /&gt;
&lt;br /&gt;
上記の実装では引用符の入力など多少の回りくどいキーボード操作が必要である。URLはクリップボードに入っているので、ショートカットキーから起動することももちろん可能である。ただし再生曲数を入力するためのダイアログは必要である。以下のAutoHotkeyのスクリプトの例では、Ctrl+Alt+Shift+Lを押すと入力ダイアログを表示して再生曲数を取得し、ytp.batを起動する。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;dummy_str_visual_basic&amp;quot;&amp;gt;^!+l::&lt;br /&gt;
InputBox, play_numbers, Gapless Play YouTube, Enter the number of tracks to play (&amp;amp;quot;&amp;amp;quot; or &amp;amp;quot;0&amp;amp;quot; will play to the end)&lt;br /&gt;
Run ytp.bat &amp;amp;quot;%clipboard%&amp;amp;quot; %play_numbers%&amp;lt;/pre&amp;gt;&lt;br /&gt;
英語は間違っているかもしれない。&lt;br /&gt;
&lt;br /&gt;
ダイアログはvbsのInputboxでも出せるが、Windows標準のショートカットキーの設定（ショートカット（←これはファイルの形式のこと）に対して設定できる）は若干管理しづらいイメージがあるためAutoHotkeyをおすすめしておく。&lt;br /&gt;
[[Category:IT]][[Category:Music]]{{#seo:|title={{FULLPAGENAME}} - Turgenev&amp;#039;s Wiki}}&lt;/div&gt;</summary>
		<author><name>Turgenev</name></author>
	</entry>
</feed>