Edge(Chromium) + Selenium(Python)を使ってみる ~導入編~

我が家のIEちゃんが余命いくばくもないのでブラウザ自動運転の後継を確保するべく簡単に調べた結果Seleniumとかいうのが今のところ一番メジャーらしい。ActiveX叩けば簡単に動かせてたIEに比べれば面倒臭いんだけど仕方ないね。もっと簡単なのがあればそっちがメジャーになってるだろうし。
なお資料は

を参照した。

まずは必要な物の確認

ブラウザ
これはEdge(Chromium)を使うものとする。Chromeは入れてないしFirefoxはなんだか面倒そうなので。
WebDriver
Windowsの設定からインストールすることが出来るらしい。なんと便利な。「設定→アプリ→オプション機能→機能の追加」からMicrosoft WebDriverを選ぶ。しかし後で問題発覚。素直にWebDriverを手動で落として来る事。
Selenium本体
言語はPythonとする。現在まだβのVer4推奨らしいがanaconda上にVer4が上がってない。公式推奨にも関わらず使う奴いないんだろうなたぶん。よく読むと「The Selenium Tools for Microsoft Edge」とやらを使えば同等の事が出来るらしい。仕方ないのでVer3に決定。

色々読むと基本これだけでいいらしい。

取り敢えずやってみるがWebDriverがおかしい

from selenium import webdriver
driver = webdriver.Edge(r"C:\windows\system32\MicrosoftWebDriver.exe")
driver.get("https://www.google.com")

こんな感じのコードをパクってきていざ実行・・・おい動かねーぞ!ブラウザは立ち上がるがぐぐるを開いてくれない。try-exceptでエラーコードを見るとどうもモジュール自体がエラーを吐いてる。WebDriverExceptionとか見えるが自動で落ちてくる奴がおかしいのか。仕方ないので検索して手動で探してきた奴を指定すると無事動いた。よく見ると自動で落ちてくる奴はMicrosoftWebDriver.exeだが手動で探してきた奴はmsedgedriver.exe。Selenium DocumentationによるとMicrosoftWebDriver.exeはLegacyつまり旧版Edge用でmsedgedriver.exeはChromium用だと。という事なので設定から自動で落ちてくる奴は使わない事。

The Selenium Tools for Microsoft Edge

Ver3の拡張パック的な物。これがあればVer4と同等の事が出来るらしい。

from msedge.selenium_tools import Edge, EdgeOptions
driver = Edge(executable_path="", capabilities=None, port=0, verbose=False, service_log_path=None, log_path=None, keep_alive=False, desired_capabilities=None, service_args=None, options=None)
WebDriver Class

インスタンス

引数 概要
executable_path string Edge用WebDriverのPathを指定する。未指定だとPathを通せば探しに行くらしい。
capabilities
desired_capabilities
dict 各ブラウザ共通の設定情報をdictで指定する。capabilitiesはLegacy Edge用でdesired_capabilitiesはChromium Edge用。だがちゃんと中でcapabilitiesとdesired_capabilitiesが振り分けれてるのでどっちでも問題ない。
port number サービスの実行ポートを指定する。defaultの0だと空きポートを適当に使う。
verbose boolean 詳細なログを吐く。
service_log_path string LogのPathを指定する。
log_path string 非推奨。service_log_pathを使う事。
keep_alive boolean EdgeRemoteConnectionでHTTP keep-aliveを有効にする。
service_args list serviceに渡す引数のListを指定する。
options object EdgeOptionsのインスタンスを指定する。

メソッド

メソッド名 引数 概要
launch_app id 指定したIDでEdgeアプリを起動する。オリジナルであるChromiumのドキュメントを読むと非公式のコマンドらしい。
get_network_conditions ネットワークの状態をdictで返す。
set_network_conditions offline
latency
download_throughput
upload_throughput
ネットワークの状態を設定する。
execute_cdp_cmd cmd
cmd_args
Edge Devtools Protocol commandを実行する。詳細はChrome DevTools Protocol参照。
quit ブラウザを閉じる。
create_options optionsのインスタンスを作る。後述するEdgeOptionsと全く一緒なのでどちらを使ってもいい。
Options Class

プロパティ

プロパティ名 概要
use_chromium boolean chromium版を使うかどうか。現状ほぼ必須。
use_webview boolean capabilityのbrowserNameにwebview2を設定する。Edgeアプリのレンダリングエンジンの事か。詳細不明。
page_load_strategy string capabilitiesのpageLoadStrategyを変更する。
capabilities read only、writeはset_capabilityを使う。
binary_location string ブラウザバイナリのpathを返す。
debugger_address string Devtoolsインスタンスのアドレスを返す。
arguments read only、writeはadd_argumentを使う。
extensions read only、writeはadd_extensionまたはadd_encoded_extensionを使う。
experimental_options read only、writeはadd_experimental_optionを使う。
headless boolean headlessモードを有効にするかどうか。GUIを表示せずに実行できるようになる。add_argumentで「--headless」を追加しても内部的には全く一緒だがheadlessプロパティはWindowsの場合「--disable-gpu」も一緒に追加しているので手間が一つ省ける。

メソッド

メソッド名 引数 概要
set_capability name
value
capabilitiesのブラウザ共通部分に項目を追加する。
to_capabilities capabilitiesオブジェクトを作成する。
add_argument argument capabilitiesのargsに追加する。
add_extension extension capabilitiesのextensionsに追加する。拡張機能のファイルPathを指定する事。
add_encoded_extension extension capabilitiesのextensionsに追加する。拡張機能のファイルをBase64エンコードした文字列を指定する事。
add_experimental_option name
value
capabilitiesのブラウザ固有部分に項目を追加する。
set_headless 廃止。headlessプロパティを使う事。
各ブラウザ共通capability

参考は下記。しかしW3Cにはproxyがあるのにseleniumの実装にはない。コマンドラインオプションにproxy関連があるからそっちでやれという事なんだろうか。

名前 概要
browserName string ブラウザ名。
browserVersion string ブラウザVer。
pageLoadStrategy string ページ読み込みの手順。使用可能な値は「normal, eager, none」の3つ。結局document.readyStateを見てるだけ。defaultのnormalはcomplete、eagerはeagerはinteractive、noneはAnyつまり何もしない。
platformName string 要はOS名。
acceptInsecureCerts boolean 名前通りでセキュアでない証明書を受け入れるかどうか。falseだとエラーを返す。
timeouts object タイムアウトを指定する。Script Timeout, Page Load Timeout, Implicit Wait TimeoutのObjectを指定する。
unhandledPromptBehavior string ブラウザがダイアログを出した場合の処理を指定する。
setWindowRect string ウィンドウのサイズと位置を変更する。内部でgetWindowRectを叩いてるだけ。
strictFileInteractability boolean type=fileのinput要素に厳密なチェックを行うかどうか。厳密なチェックとやらが何をするのか知らないが。
Edge固有capability

参考は下記。というかいちいち見に行くのが面倒なのでコピーしただけ。

ちなみにargsで指定できる値の一覧は下記。Chromiumの一覧だが「--headless」も「--disable-gpu」もちゃんとあるので大体あってるだろうたぶんきっと。

EdgeOptions オブジェクト

名前 概要
args list Microsoft Edge を起動するときに使用するコマンドライン引数の一覧です。 値が関連付けられた引数は、= 記号で区切る必要があります (['start-maximized', 'user-data-dir=/tmp/temp_profile'] など)。
binary string 使用する Microsoft Edge バイナリのパス (macOS では、アプリだけでなく実際のバイナリである必要があります。 例: /Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge)。
debuggerAddress string たとえば、接続先のデバッガー サーバーのアドレスを、次の hostname/ip:port 形式で指定します 127.0.0.1:38947 。
detach false WebDriver Microsoft Edgeがセッションを閉じていなくても、WebDriver サービスがシャットダウンすると終了します false 。 場合は、Microsoft Edge WebDriver ローカル エンドがセッションを閉じる場合 true にのみ終了します。 WebDriver ローカル エンドがセッションを閉じない場合は、ユーザー インスタンスで使用される一時的なユーザー true EdgeDriver データ フォルダー Microsoft Edgeされません。
excludeSwitches list Microsoft Edge の起動時に、既定で EdgeDriver によって除外される Microsoft Edge コマンド ライン スイッチの一覧。 スイッチの -- プレフィックスは使用しないようにします。
extensions list 起動時にインストールする拡張機能の一覧。 リスト内の各項目は、base-64 でエンコードされたパック拡張 (.crx) である必要があります。
localState dict 基本設定の名前と値で構成される各エントリを持つ辞書。 ユーザー設定は、ユーザー データ フォルダー内のローカル状態ファイルに適用されます。
minidumpPath string Microsoft Edge ミニダンプを保存するディレクトリ。 (Linux でのみサポートされています。)
mobileEmulation dict deviceName の値、または deviceMetrics および userAgent の値を含むディクショナリ。
perfLoggingPrefs dict パフォーマンス ログの設定を指定するオプションのディクショナリ。 詳細については、「perfLoggingPrefs オブジェクト」を参照してください。
prefs dict 基本設定の名前と値で構成される各エントリを持つ辞書。 ユーザー設定は、使用中のユーザー プロファイルにのみ適用されます。 たとえば、ファイルのユーザー データ Preferences フォルダー内のファイルに移動Microsoft Edge
wdpAddress string 接続先の Windowsバイス ポータル サーバーのアドレス。hostname/ip:port の形式で指定します。例: 127.0.0.1:50080。 詳細については、「リモート デバッグ-Windows 10 デバイス」を参照してください。
wdpPassword string Windowsバイス ポータル サーバーに接続するときに使用するオプションのパスワードです。 サーバーで認証が有効になっている場合は必須です。
wdpUsername string バイス ポータル サーバーへの接続時に使用Windowsオプションのユーザー名。 サーバーで認証が有効になっている場合は必須です。
windowsApp string 起動する Microsoft Edge アプリ パッケージのアプリケーション ユーザー モデル ID。例: Microsoft.MicrosoftEdge.Stable_8wekyb3d8bbwe!MSEDGE。 Windowsバイス ポータルを使って Windows 10X デバイスまたはエミュレーターに接続する場合は、binary の代わりに windowsApp を使います。
windowTypes list ウィンドウ ハンドルの一覧に表示されるウィンドウの型の一覧。 Android webview 要素にアクセスするには、一覧に webview を含めます。

perfLoggingPrefs オブジェクト

キー 既定値 詳細
bufferUsageReportingInterval 正の整数 1000 DevTools トレース バッファー使用量イベント間の要求されたミリ秒数。 たとえば、1000 の場合は 1 秒に 1 回、すべてのトレースバッファーの量が報告されます。 レポートにバッファー使用量が 100% と示されている場合は、警告が発生します。
enableNetwork ブール値 true ネットワーク ドメインからイベントを収集します (または収集しません)。
enablePage ブール値 true ページ ドメインからイベントを収集します (または収集しません)。
traceCategories 文字列 (空) トレース イベントを収集する Microsoft Edge トレース カテゴリのコンマ区切り文字列。 未指定または空の文字列は、トレースを無効にします。

Webdriver Manager for Python

ブラウザのVerとWebDriverのVerは合わせる必要がある。しかしEdgeは知らないうちにUpdateしてるので面倒臭い。とか思ってたらその辺をいい感じに解決してくれる便利アイテムがあるらしい。それはいいんだけど各ブラウザの公式からじゃなくてどのブラウザもWebDriverを置いておくスペースを別途用意してそこから落とすんだな。あとよくエラーを吐くがたぶんサーバーが不安定なんだろう。

from msedge.selenium_tools import Edge, EdgeOptions
from webdriver_manager.microsoft import EdgeChromiumDriverManager
options = EdgeOptions()
options.use_chromium = True
driver = Edge(executable_path = EdgeChromiumDriverManager().install(), options = options)
driver.get("https://www.google.co.jp")

こんな感じでWebDriverがなければ勝手に落としてきてくれあまつさえVerチェックまでしてくれる。特に何も指定しなければWebDriverのPathは「C:\Users\user名\.wdm\drivers\edgedriver\win64\Ver\msedgedriver.exe」となるが場所を指定したければ

from msedge.selenium_tools import Edge, EdgeOptions
from webdriver_manager.microsoft import EdgeChromiumDriverManager
options = EdgeOptions()
options.use_chromium = True
driver = Edge(executable_path = EdgeChromiumDriverManager(path="C:\webdriver").install(), options = options)
driver.get("https://www.google.co.jp")

とEdgeChromiumDriverManagerでpathを指定すればいい。

今月の読書日記

民主主義の基本的な仕組みを解説した本。保守リベラルには全く言及されておらずあくまで政治の構造一本。それでも政治学の素養が低い俺さんにはまあまあ難しかった。マネロンって具体的にナニをドウするのか解説してある珍しい本。だがこれが正しいのかどうなのかよく分からない。アフガンの紆余曲折を解説してある本。確かに詳細で分かりやすいのだが、筆者の名前で検索するとすぐに出てくるがIS大好きタリバン大好きっ子なので話を割り引いてどころか話半分で聞かざるを得ない。西洋史または中国史と比較して日本史を俯瞰するというのは歴史本の定番だがむしろ日本史を語る視点が面白くてよかった。江戸時代の経済政策辺りなんて目から鱗

yt-dlp オプション一覧及びそのメモ

youtube-dlの開発が止まっておりfork版のyt-dlpに移る事にした。yt-dlpyoutube-dlのforkであるyoutube-dlcのそのまたforkになる。オリジナルであるyoutube-dlのオプション解説はyoutube-dl オプション一覧及びそのメモ

OPTIONS

-h, --help
ヘルプを表示する。
--version
プログラムのVerを表示する。
-U, --update
プログラムのupdateを実行する。
-i, --ignore-errors
ダウンロードエラーを無視する。プレイリストごとダウンロードするような時に使う。エラーで失敗してもダウンロードは成功したとみなされる。
--no-abort-on-error (default)
--abort-on-error
ダウンロードエラー発生時に処理を中止するかどうか。--ignore-errorsは成功したとみなすが--no-abort-on-errorはスキップするだけ。--abort-on-errorのエイリアスとして--no-ignore-errors。
--dump-user-agent
userAgentを表示する。
--list-extractors
extractor一覧を表示する。
--extractor-descriptions
extractor一覧を説明付きで表示する。が、説明なしの物が殆ど。
--force-generic-extractor
汎用extractorでのダウンロードを強制する。
--default-search PREFIX
URLでない値をURLとして与えられた場合の処理方法。"auto"を指定したらyoutube-dlが適当に推測して処理しようとするが大抵巧くいかない。"error"を指定したらただエラーを返すだけ。"fixup_error"を指定したらURLとして与えられた引数を修正しようとするが巧くいかなかったらやっぱりエラーを返す。"gvsearch2:"を指定したらGoogleVideoでの検索結果から2つの動画をダウンロードする。1つでいいなら"gvsearch1:"となる。つまり数字部分がダウンロード数となる。
--ignore-config, --no-config
--config-locationで指定された設定ファイル以外を無視する。設定ファイル内で指定された場合はそれ以上の設定ファイルのロードを無視する。
--config-location PATH
設定ファイルもしくはフォルダPATHを指定する。
--flat-playlist
--no-flat-playlist
プレイリスト展開をするかどうか。
--mark-watched
--no-mark-watched (default)
youtubeのみ。要するに再生履歴に残すか残さないかの事。当然ユーザ名パスワードを一緒に指定しないと意味ない。
--no-color
出力にカラーコードを生成しない。
--compat-options OPTS
yt-dlpでの各オプションのデフォルト動作の違いを元に戻す。
Network Options
--proxy URL
プロキシを設定する。HTTP/HTTPS及びSOCKS。SOCKSはsocks5://127.0.0.1:1080/のような感じで指定する。
--socket-timeout SECONDS
タイムアウトの秒数を指定。単位は秒。
--source-address IP
恐らくはクライアント側からのパケットのソースアドレス偽装。つまり--proxyと似たような機能だろう。公式の説明がシンプル過ぎて推測でしかないが。
-4, --force-ipv4
-6, --force-ipv6
IPv4, IPv6を強制それぞれ強制
Geo Restriction
--geo-verification-proxy URL
--proxyと違うのはサイトへのアクセス時のみの適用で動画のダウンロード時は未適用と言う点。ChinaのProxyは回線が不安定な物が多いのでそういうときはこれを使う。
--geo-bypass
--no-geo-bypass
X-Forwarded-Forヘッダ偽装による地域制限回避をするかしないか。
--geo-bypass-country CODE
ISO 3166-2で規定されたコードを指定して地域制限を回避する。
--geo-bypass-ip-block IP_BLOCK
CIDR表記で指定されたIPレンジを地域制限を回避する。
Video Selection
--playlist-start NUMBER
--playlist-end NUMBER
例えば2を指定するとプレイリスト内の2番目の動画から処理を開始もしくは処理を終える。
--playlist-items ITEM_SPEC
--playlist-items 1-3,7,10-13のように処理するプレイリスト内の番号を指定する。
--match-title REGEX 非推奨
--reject-title REGEX 非推奨
正規表現にマッチした物をダウンロードするかもしくは除外してダウンロードする。
--max-downloads NUMBER
最大ダウンロード数を指定する。
--min-filesize SIZE
--max-filesize SIZE
最大最小ファイルサイズをそれぞれ指定する。
--date DATE
動画のアップロード日時を指定する。YYYYMMDD形式または
(now|today)[+-][0-9](day|week|month|year)(s)?
のようなフォーマットを指定する。
--datebefore DATE
--dateafter DATE
指定した日時より以前もしくは以後の物をそれぞれ処理する。フォーマットは--dateと同様。
--min-views COUNT 非推奨
--max-views COUNT 非推奨
最大最小視聴回数をそれぞれ指定する。
--match-filter FILTER
--no-match-filter (default)
ダウンロードする動画をフィルタするかどうか。単純にfield名を指定すればそのfieldが存在するかどうか。!fieldとすれば反転。「~=」を使用してpython互換の正規表現を使用する事も出来る。
!is_live & like_count>?100 & description~="(?i)\bcats \& dogs\b"
はis_live が存在しないつまり生放送ではない、like_countが100以上、descriptionが「\bcats & dogs\b」と一致する動画がヒットする。
--no-playlist
--yes-playlist
プレイリストを無視するかどうかのフラグ。
--age-limit YEARS
年齢制限の事。
--download-archive FILE
--no-download-archive (default)
ダウンロードした動画のIDを自動で記録するかどうか。そして記録された動画は次回実行時にダウンロードをスキップする。
--break-on-existing
--break-on-reject
ほぼ同じ機能だがexistingはarchiveにヒットしたらrejectはfilterにヒットしなかったらダウンロードを停止する。
--skip-playlist-after-errors N
指定されたエラー数を超えるとプレイリスト自体がスキップされる。
--include-ads 非サポート
広告もダウンロードする。
Download Options
-N, --concurrent-fragments N
fragmentの同時ダウンロード数。デフォルトは1。
-r, --limit-rate RATE
最大ダウンロード速度を指定する(例 50K, 4.2M)。
--throttled-rate RATE
最低ダウンロード速度を指定しこれを下回ると再ダウンロードする。
-R, --retries RETRIES
リトライ数を指定する。infiniteという値も一応用意されているがこんな値使うな。
--fragment-retries RETRIES
fragmentのリトライ数。
--skip-unavailable-fragments (default)
有効でないfragmentをskipする。エイリアスとして--no-abort-on-unavailable-fragment。
--abort-on-unavailable-fragment
有効でないfragmentがあるときダウンロード処理を中断する。エイリアスとして--no-skip-unavailable-fragments。
--keep-fragments
--no-keep-fragments (default)
ダウンロード後fragmentを残すかどうか。
--buffer-size SIZE
ダウンロードバッファを指定する。
--resize-buffer (default)
--no-resize-buffer
ダウンロードバッファを自動調整するかどうか。
--http-chunk-size SIZE 実験的
チャンクサイズを指定する。サーバー側で指定されている帯域制限回避に役立つかもしれない。
--playlist-reverse
--no-playlist-reverse (default)
プレイリスト上の動画のダウンロード順を逆からにするかどうか。
--playlist-random
プレイリスト上の動画をランダムにダウンロードする。
--xattr-set-filesize
拡張ファイル属性に予想されるファイルサイズを書き込む。
--hls-prefer-native 非推奨
--hls-prefer-ffmpeg 非推奨
HLSの処理方法のオプション。nativeは自前で処理する。HLSというのはHttp Live Streamingの事でストリーミング配信用のプロトコル
--hls-use-mpegts
--no-hls-use-mpegts
HLSでMPEG TSを使うかどうか。
--downloader [PROTO:]NAME
PROTOはプロトコル。要はプロトコルごとに使用する外部ダウンローダーを指定することが出来る。PROTOで使用出来るのはhttp、 ftp、m3u8、dash、rstp、rtmp、mms。NAMEで使用できるのはnative、aria2c、avconv、axel、curlffmpeg、httpie、wget。例えば
--downloader aria2c --downloader "dash,m3u8:native"
のようにプロトコルごとに複数指定してもよい。エイリアスとして--external-downloader。
--downloader-args NAME:ARGS
外部ダウンローダーに引数を渡す。エイリアスとして --external-downloader-args。
Filesystem Options
-a, --batch-file FILE
動画URLを記述したファイルを指定してまとめてダウンロードする。
--id 削除
ファイル名を動画IDのみとする。後述の-oと併用するとconflictで停止する。
-P, --paths [TYPES:]PATH
ファイルのダウンロード先を指定する。--outputで絶対パスが指定された時は無効となる。TYPESでファイルタイプを指定する事も出来るので-Pオプションを複数指定してタイプごとに振り分ける事も可能。サポートされているタイプはsubtitle、thumbnail、description、infojson、pl_thumbnail、pl_description、pl_infojson、chapter。homeとtempを指定する事も出来る。「temp:PATH」で指定したフォルダに一時ファイルを展開し「home:PATH」に最終ファイルを格納する。
-o, --output [TYPES:]TEMPLATE
ファイル名を指定する。TYPESの使い方は--pathsと一緒。使用できる変数は後述のOUTPUT TEMPLATEを参照。
--output-na-placeholder TEXT
OUTPUT TEMPLATEの各変数はサイトによっては当然存在しない物も多い。その時は「NA」が出力されるがこのオプションでそれを書き換えることが出来る。
--autonumber-start NUMBER 非推奨
%(autonumber)sの初期値を指定する。
--restrict-filenames
--no-restrict-filenames (default)
ファイル名をASCIIコードに制限するかどうか。
--windows-filenames
--no-windows-filenames (default)
Windows互換のファイル名に置き換える。要は駄目文字対策。--windows-filenamesは使ってるOSに関係なく実行されるが--no-windows-filenamesはWindowsの場合のみでこれがデフォルト。Windowsユーザーには関係ないオプション。
--trim-filenames LENGTH
拡張子を除いたファイル名の文字数を指定値に制限する。
-w, --no-overwrites
どんなファイルも上書きしないというオプション。
--force-overwrites
--no-force-overwrites (default)
--force-overwritesは動画とメタデータファイルを上書きし、それに対して--no-force-overwritesは動画は上書きしないがメタデータファイルは上書きする。
-c, --continue (default)
--no-continue
ダウンロードのリジュームをするかどうか。
--part (default)
--no-part
.partファイルを使わないというからメモリ上に読み込むとかそんな事かと思ったら単にpart拡張子の話。
--mtime (default)
--no-mtime
HTTPのLast-Modifiedヘッダをファイルの更新日時に使うかどうか。
--write-description
--no-write-description (default)
descriptionファイルを別途作成するかどうか。
--write-info-json
--no-write-info-json (default)
メタデータを記述したJSONファイルを別途作成するかどうか。
--write-playlist-metafiles (default)
--no-write-playlist-metafiles
--write-info-jsonや--write-descriptionを指定する場合、プレイリストのメタデータを追記するかどうか。
--clean-infojson (default)
--no-clean-infojson
JSONファイルからファイル名のようなプライベートな項目を削除する。このオプションを使ったからと言ってプライベートな項目を全て削除したとは限らない事に注意する事。
--write-comments
--no-write-comments
動画コメントを取得しJSONファイルに書き込む。エイリアスとして--get-commentsまたは--no-get-comments。
--write-annotations 非サポート
アノテーションxmlで作成する。
--load-info-json FILE
JSONファイルから動画情報をロードする。書き込みは--write-info-jsonで行う。
--cookies FILE
--no-cookies (default)
ファイルからcookieをロードするかどうか。
--cookies-from-browser BROWSER[:PROFILE]
--no-cookies-from-browser (default)
ブラウザのプロファイルからcookieを取得するかどうか。サポートしているブラウザはbrave、chromechromium、edge、firefoxoperasafarivivaldi。PROFILEにはPROFILE名またはPROFILEのPathを指定する。指定されてない場合は最後に使用されたPROFILEを使う。
--cache-dir DIR
キャッシュディレクトリを変更する。
--no-cache-dir
キャッシュファイルを作成しない。
--rm-cache-dir
youtube-dlの作成したキャッシュファイルを全て消す。
Thumbnail images
--write-thumbnail
--no-write-thumbnail (default)
サムネイルを作成するかどうか。
--write-all-thumbnails
サムネイルを全てのフォーマットで作成する。
--list-thumbnails
利用可能なサムネイルを表示する。
Internet Shortcut Options
--write-link
使用しているOSに応じた(.url、.webloc、.desktop)インターネットショートカットファイルを作る。しかしなんでこんな機能が必要なんだろうか。
--write-url-link
Windowsのインターネットショートカットファイルを作る。
--write-webloc-link
MacOSのインターネットショートカットファイルを作る。
--write-desktop-link
Linuxのインターネットショートカットファイルを作る。
Verbosity / Simulation Options
-q, --quiet
コマンドプロンプトにおける表示を最小限にする。別にコマンドプロンプトの起動自体を抑制する訳ではない。
--no-warnings
警告を無視する。
-s, --simulate
--no-simulate
実行のシミュレートのみにするかどうか。
--ignore-no-formats-error 実験的
--no-ignore-no-formats-error (default)
「No video formats」エラーを無視するかどうか。メタデータ取得に役立つ。
--skip-download
動画のダウンロードを行わないが関連ファイルの書き込みは行う。エイリアスは--no-download。
-g, --get-url 非推奨
-e, --get-title 非推奨
--get-id 非推奨
--get-thumbnail 非推奨
--get-description 非推奨
--get-duration 非推奨
--get-filename 非推奨
--get-format 非推奨
指定の物を表示するだけで実行はしない。
-O, --print TEMPLATE
--quietで実行かつシミュレートするだけだがTEMPLATEで指定された動画ごとの諸情報を表示する。
-j, --dump-json 非推奨
--quietで実行かつシミュレートするだけだが動画ごとの諸情報をJSON形式で表示する。しかしせめて整形ぐらいしてから表示してほしい。
-J, --dump-single-json
--quietで実行かつシミュレートするだけだがURLごとの諸情報をJSON形式で表示する。でも表示される情報は--dump-jsonと別に変らない。
--print-json 非推奨
--quietで実行かつ動画情報をJSONで表示。
--force-write-archive
シミュレート実行の場合でもエラーが起きない限りarchiveに追記する。エイリアスは--force-download-archive。
--newline
ダウンロードの進行状況を逐次表示。やってみれば分かる。
--no-progress
ダウンロードの進行状況を表示しない。
--console-title
コンソールのタイトルバーに現在の処理内容を表示する。
-v, --verbose
デバッグ用の諸情報を表示する。
--dump-pages
デバッグ用にリクエスト結果をbase64エンコードして表示する。でも長過ぎてデバッグにならない。
--write-pages
デバッグ用の中間処理をカレントディレクトリ内に書き込む。公式にもカレントディレクトリと単純に書かれているが動画のダウンロードPathの事ではなく文字通りの意味でyt-dlpをscriptから呼び出しているとそのscriptのディレクトリにあったりする。
--print-traffic
HTTPトラフィックを表示する。
-C, --call-home 非サポート
--no-call-home 非サポート
デバッグ時にyoutube-dlサーバーにアクセスするかどうか。
Workarounds
--encoding ENCODING 実験的
使用する文字コードを指定する。
--no-check-certificate
暗号化通信のデジタル証明書をチェックしない。
--prefer-insecure
動画情報の取得に非暗号化通信を使用する。現在サポートしてるのはyoutubeのみ。
--user-agent UA
userAgentを指定する。
--referer URL
refererを指定する。
--add-header FIELD:VALUE
カスタムHTTPヘッダを指定する。このオプションは複数回指定できる。
--bidi-workaround
双方向性テキスト。つまりアラビア語などは文章を右から左へと書くが数字は左から右へと書かねばならない。このような言語を扱うときに指定する。
--sleep-requests SECONDS
データリクエスト間のインターバルを秒で指定する。
--sleep-interval SECONDS
単独で使用された時はそれぞれのダウンロード前に指定された秒数のインターバルを入れる。--max-sleep-intervalとセットで使われた時は--min-sleep-intervalとして機能する。互換性を考えたんだろうけどなにこの変な実装。エイリアスは--min-sleep-interval。
--max-sleep-interval SECONDS
それぞれのダウンロード前に指定された秒数を上限としたランダムな秒数のインターバルを入れる。ただし必ず--sleep-intervalとセットで使う事。
--sleep-subtitles SECONDS
字幕のダウンロード前のインターバルを秒で指定する。
Video Format Options
-f, --format FORMAT
Video format codeを指定する。詳細はFORMAT SELECTIONを参照。
--all-formats 非推奨
利用可能な全てのフォーマットをダウンロードする。
-S, --format-sort SORTORDER
bestとみなされるformatの判定基準を指定する。詳細はSorting Formatsを参照。
--S-force, --format-sort-force
--no-format-sort-force (default)
bestとみなされるformatの判定基準を強制するかどうか。詳細はSorting Formatsを参照。
--video-multistreams
--no-video-multistreams (default)
複数の映像ストリームを追加するかどうか。
--audio-multistreams
--no-audio-multistreams (default)
複数の音声ストリームを追加するかどうか。
--prefer-free-formats
--no-prefer-free-formats (default)
同じ品質のフリーのフォーマットを優先するかどうか。品質に関わりなく優先する場合は「--format-sort ext」を指定する。
--check-formats
--no-check-formats
選択されたフォーマットが実際にダウンロード可能かどうかのチェックをするかどうか。
-F, --list-formats
利用可能な全てのフォーマットを表示する。
--youtube-skip-dash-manifest 非推奨
youtubeにおいてDASH manifestsを無視する。
--merge-output-format FORMAT
結合が必要な場合にコンテナフォーマットを指定する。使用可能なのはmkv、mp4、ogg、webm、flv。
Subtitle Options
--write-sub
--no-write-subs (default)
字幕ファイルを生成するかどうか。
--write-auto-sub
--no-write-auto-subs (default)
youtubeで字幕ファイルを自動で生成するかどうか。
--all-subs 非推奨
使用可能な全ての字幕をダウンロードする。
--list-subs
使用可能な全ての字幕を表示する。
--sub-format FORMAT
字幕のフォーマットを指定する。
--sub-lang LANGS
字幕の言語を指定する。
Authentication Options
-u, --username USERNAME
ログイン時のユーザー名を指定する。
-p, --password PASSWORD
ログイン時のパスワードを指定する。
-2, --twofactor TWOFACTOR
auth codeを指定する。
-n, --netrc
netrcファイルを使う。
--netrc-location PATH
netrcファイルのPathまたはフォルダを指定する。
--video-password PASSWORD
そのまんま動画のパスワード。どうも必要なサイトが複数あるらしい。
--ap-mso MSO
Adobe Pass(今はAdobe Primetimeという名称になっている)という配信プラットフォームの話でこのOptionはTV providerのidを指定する。有効なidは--ap-list-msoを見る事。
--ap-username USERNAME
Adobe Passのユーザー名を指定する。
--ap-password PASSWORD
Adobe Passのパスワードを指定する。
--ap-list-mso
Adobe PassのTV providerのid一覧を表示する。
Post-processing Options
-x, --extract-audio
動画を音声のみに変換する。
--audio-format FORMAT
--extract-audioが指定された時の音声フォーマットを指定する。指定できるのはbest, aac, vorbis, mp3, m4a, opus, wavのいずれか。
--audio-quality QUALITY
音声変換時のクオリティを指定。VBRなら0-9、CBRなら128Kなど
--remux-video FORMAT
コンテナをmuxし直す。ルールは複数設定でき
aac>m4a/mov>mp4/mkv
だとaacならm4aにmovならmp4にその他はmkvとなる。
--recode-video FORMAT
映像フォーマットを指定のフォーマットに変換する。構文は--remux-videoと同様。
--postprocessor-args NAME:ARGS
実行するポストプロセッサを指定する。有効なポストプロセッサは
Merger, ModifyChapters, SplitChapters, ExtractAudio, VideoRemuxer, VideoConvertor, Metadata, EmbedSubtitle, EmbedThumbnail, SubtitlesConvertor, ThumbnailsConvertor, FixupStretched, FixupM4a, FixupM3u8, FixupTimestamp and FixupDuration
有効なexeは
AtomicParsley, FFmpeg and FFprobe
さらにffmpegまたはffprobeの場合プレフィックスに「_i」または「_o」を番号付きで追加して入出力ファイルの前に引数を渡すことが出来る。
 --ppa "Merger+ffmpeg_i1:-v quiet"
エイリアスは--ppa。
-k, --keep-video
--no-keep-video (default)
ダウンロードした変換前のファイルを残すかどうか。
--post-overwrites (default)
--no-post-overwrites
ダウンロード後処理された後のファイルを上書きするかどうか。
--embed-subs
--no-embed-subs (default)
ファイルに字幕を埋め込むかどうか。
--embed-thumbnail
--no-embed-thumbnail (default)
ファイルにサムネイルを埋め込むかどうか。
--embed-metadata
--no-embed-metadata (default)
ファイルにメタデータを埋め込むかどうか。エイリアスは--add-metadata及び--no-add-metadata。
--embed-chapters
--no-embed-chapters (default)
ファイルにchapterを埋め込むかどうか。エイリアスは --add-chapters及び--no-add-chapters。
--metadata-from-title FORMAT 非推奨
動画タイトルからtitle, artistのようなメタデータを取得する。使用できる変数は--output同様にOUTPUT TEMPLATEを参照。
--parse-metadata FROM:TO
FROMで指定されたfieldをparseしてTO で指定されたfieldに書き込む。
--parse-metadata "title:%(artist)s - %(title)s"
--replace-in-metadata FIELDS REGEX REPLACE
正規表現メタデータを書き換える。このオプションは複数回設定可能。
--xattrs
拡張ファイル属性にメタデータを書き込む。
--fixup POLICY
既知のエラーを自動で修正する。
--prefer-avconv 非推奨
--prefer-ffmpeg 非推奨
avconvとffmpegの指定された方を優先して使用する。
--ffmpeg-location PATH
ffmpeg/avconvのPATHを指定する。
--exec CMD
--no-exec
ダウンロード後にコマンドを実行するかどうか。ダウンロードファイルのPathを「filepath」fieldで取得する事も出来る。このオプションは複数回設定可能。
--exec-before-download CMD
--no-exec-before-download
ダウンロード前にコマンドを実行するかどうか。
--convert-subs FORMAT
字幕フォーマットを変換する。サポートしてるのはsrt、ass、vtt、lrc。エイリアスは --convert-subtitles。
--convert-thumbnails FORMAT
サムネイルの形式を変換するのだがサポートされているのは現在jpg及びpngのみ。
--split-chapters
--no-split-chapters (default)
chapterを使用してファイルを分割するかどうか。
--remove-chapters REGEX
--no-remove-chapters (default)
指定された正規表現にタイトルが一致したchapterを削除するかどうか。
--force-keyframes-at-cuts
--no-force-keyframes-at-cuts (default)
chapterを追加または削除する際chapter周りにkeyframeを設定し直すかどうか。当然再エンコになる。
SponsorBlock Options

そもそもこれは何をする物なのだということだがその辺りはAbout - SponsorBlockに書かれている。元々はyoutubeの広告等のパートをスキップしようというAPIらしい。

--sponsorblock-mark CATS
SponsorBlock APIを利用してchapterを書き込む。指定できるcategoryはall、sponsor、intro、outro、selfpromo、interaction、preview、music_offtopic。頭に-を付けて除外する事も出来る。categoryの説明はSegment Categoriesを参照。
--sponsorblock-remove CATS
指定したcategoryを削除するとサラッと書かれているが当然再エンコになるんだが具体的にどうするんだろうか。それともchapterの事なんだろうか。しかしそれは--sponsorblock-markで除外指定できるし。
--sponsorblock-chapter-title TEMPLATE
--sponsorblock-markで設定されたchapterのタイトルテンプレート。使用可能なfieldはstart_time、end_time、category、categories、name、category_names。
--no-sponsorblock
--sponsorblock-markと--sponsorblock-removeを無効化する。
--sponsorblock-api URL
SponsorBlock APIのURLを指定する。
Extractor Options
--extractor-retries RETRIES
extractorごとのリトライ数を指定する。infiniteも一応ある。ただし既知のextractorのみ。--retriesは全体のリトライ数なのでたぶんこちらが優先されるんだろう。
--allow-dynamic-mpd (default)
--ignore-dynamic-mpd
dynamic mpdを許可するかどうか。dynamicって何のこっちゃと思ったらどうもライブストリーミングの話らしい。エイリアスは--no-ignore-dynamic-mpd及び--no-allow-dynamic-mpd。
--hls-split-discontinuity
--no-hls-split-discontinuity (default)
直訳すると「HLS形式の動画を広告などの不連続部分で異なるフォーマットに分割する」になるんだがそんな事にはならない。どこのサイトの話なんだろうか。
--extractor-args KEY:ARGS
extractorごとに予め設定されている引数を指定する。

CONFIGURATION

oオプション等のいつも使うオプションを設定ファイルとしてまとめておく事が出来る。便利っちゃ便利だがサイト毎に設定を振り分ける事が出来る訳でもなくscriptから実行させていると無用の長物ではある。認識する場所にはいくつかある

Main Configuration
--config-locationで指定された物。
Portable Configuration
バイナリと同フォルダに置かれたyt-dlp.conf。pythonで実行してる場合は「root /yt_dlp/__main__.py」のroot。
Home Configuration
--paths "home:path"で指定されたフォルダまたはカレントフォルダに置かれたyt-dlp.conf。
User Configuration
ユーザー領域に置かれた物。LinuxおよびmacOSなら「%XDG_CONFIG_HOME%/yt-dlp/config」、Windowsなら「%APPDATA%/yt-dlp/config」。
System Configuration
「/etc/yt-dlp.conf」
-x
--no-mtime
--proxy 127.0.0.1:3128
-o ~/Movies/%(title)s.%(ext)s
# Lines starting with # are comments

#から始まる行はコメントとして扱われる。ところでCONFIGURATIONの項目には

You can use --ignore-config if you want to disable all configuration files for a particular yt-dlp run.

と書いてあるが--ignore-configオプションの説明の方が正しい。このオプションを設定しようとも--config-locationは有効となる。

.netrcにもちょっとだけ触れておこう。これはログインのユーザー名とパスワードをまとめておく物。中の書式は

machine <extractor> login <login> password <password>

となるので

machine youtube login myaccount@gmail.com password my_youtube_password
machine twitch login my_twitch_account_name password my_twitch_password

みたいに書けば良い。そもそもなんでこんな機能があるかと言うとコマンドラインの履歴にplane textでログイン情報を残すのが嫌という事らしい。

OUTPUT TEMPLATE

  • field名の書式設定が出来る。詳しくは「python 文字列 format」辺りで検索する事。
    %(NAME)05d
  • サイトから得られるメタデータ内のList及びDictionaryを「.」で展開出来る。「:」でsliceも出来る。
    %(tags.0)s
    %(subtitles.en.-1.ext)s
    %(id.3:7:-1)s
    %(formats.:.format_id)s
  • 数値fieldの加算減算が出来る。
    %(playlist_index+10)03d
    %(n_entries+1-playlist_index)d
  • 日時時刻の書式設定も出来る。
    %(duration>%H-%M-%S)s
    %(upload_date>%Y-%m-%d)s
    %(epoch-3600>%H-%M-%S)s
  • fieldが空の場合のDefault値を設定出来る。--output-na-templateと同じ事ではあるがあちらは全fieldに効いてくる。
    %(uploader|Unknown)s
  • 代替fieldを設定することが出来る。
    %(release_date>%Y,upload_date>%Y|Unknown)s
    これの意味は「release_date>%Y」がなければ「upload_date>%Y」を使いそれもなければ仕方ないから「Unknown」を表示という事。
  • 追加で「B, j, l, q」という書式が使える。これはBytes、json、list、quotedの意味。Bytesとjsonはいいだろう。listはいわゆる配列で「,」区切りで展開される。ただし「#」flagがある場合は改行で展開する。quotedは単に文字列をクオートで囲むだけの話。
  • NFCユニコードが扱える。ただし「#」flagがある場合はNFDとなる。
    %(title)+.100U

断っておくが以下の物が全て使える訳ではない。特定のサイトに特化したような物も多い。

id
動画ID
title
動画タイトル
url
動画URL
ext
拡張子
alt_title
secondary titleってサブタイトルでいいんだろうか
description
動画概要
display_id
動画IDと何が違うのか不明
uploader
動画upload者のフルネーム
license
動画のライセンス
creator
動画の制作者
upload_date
YYYYMMDDで表される動画のupload日時
release_date
YYYYMMDDで表される動画のrelease日時
timestamp
動画が利用可能になったUNIXタイム
release_timestamp
動画がリリースされたUNIXタイム
uploader_id
動画upload者のIDもしくはニックネーム
channel
チャンネルのフルネーム
channel_id
チャンネルID
location
動画が撮影された場所
duration
動画の長さ
duration_string
HH:mm:ssで表される動画の長さ
view_count
動画の閲覧数
like_count
動画のポジティブな評価数
dislike_count
動画のネガティブな評価数
repost_count
動画のrepostつまり引用の数
average_rating
動画の平均評価数
comment_count
動画のコメント数
age_limit
動画の制限年齢
live_status
is_live、was_live、is_upcoming、not_liveの内いずれか
is_live
live streamつまり生放送なのかどうか
was_live
live streamだったかどうか
playable_in_embed
動画が他サイトへの埋め込みを許可しているかどうか
availability
private、premium_only、subscriber_only、needs_auth、unlisted、publicの内いずれか
start_time
URLで指定されている再生開始時間とあるがyoutubeでたまに見る奴の事だろうか。
end_time
URLで指定されている再生終了時間。
format
動画フォーマット
format_id
動画フォーマットコード
format_note
動画フォーマットの追加情報
width
動画解像度の幅
height
動画解像度の高さ
resolution
動画解像度
tbr
音声と映像の平均bitrate
abr
音声の平均bitrate
acodec
音声codec
asr
音声のサンプリングレート
vbr
映像の平均bitrate
fps
映像のFPS
vcodec
映像codec
container
動画のコンテナフォーマット
filesize
ファイルサイズ
filesize_approx
概算ファイルサイズ
protocol
http等のプロトコル
extractor
要はyoutube等のドメイン
extractor_key
上記と似ているがこっちはextractorのkey名で微妙に違う
epoch
ファイル作成したUINX TIME
autonumber
ダウンロードごとに振られる連番
n_entries
プレイリストにおいて抽出されたアイテム数
playlist
プレイリスト名もしくはID
playlist_index
プレイリスト内動画のindex
playlist_autonumber
プレイリス内におけるダウンロード順の位置
playlist_id
プレイリストID
playlist_title
プレイリストタイトル
playlist_uploader
プレイリストupload者のフルネーム
playlist_uploader_id
プレイリストupload者のID
webpage_url
動画ページのURL
original_url
与えられたURL


チャプターもしくはセクションを持っているときに使用可能

chapter
チャプターのタイトル
chapter_number
チャプターの数
chapter_id
チャプターのID


シリーズもしくはエピソードを持っているときに使用可能

series
シリーズのタイトル
season
シーズンのタイトル
season_number
シーズンの数
season_id
シーズンのID
episode
エピソードのタイトル
episode_number
エピソードの数
episode_id
エピソードのID


音楽アルバム等で使用可能

track
タイトル
track_number
track number
track_id
トラックID
artist
Artist
genre
ジャンル
album
アルバム名
album_type
アルバムタイプ
album_artist
Album Artist
disc_number
Disc Number
release_year
YYYYで表される発売年


--split-chaptersのprefixとして使用可能

section_title
chapterタイトル
section_number
chapter番号
section_start
chapterの開始秒数
section_end
chapterの終了秒数

--printでのみ使用可能

urls
全てのリクエストURL、つまりm3u8ならURLはプレイリストの1つだけだしyoutubeなら動画と音声の2つのURLが返る
filename
ファイル名


--sponsorblock-chapter-titleでのみ使用可能

start_time
chapterの開始秒数
end_time
chapterの終了秒数
categories
SponsorBlockカテゴリのLIST
category
SponsorBlockカテゴリ
category_names
FriendlyなSponsorBlockカテゴリのLIST
name
FriendlyなSponsorBlockカテゴリ
#例えばこんな感じで使う
-o "%(title)s-%(id)s.%(ext)s"
#Windowsのbatch fileで使う場合は%をエスケープする
-o "%%(title)s-%%(id)s.%%(ext)s"
#任意の階層パスを含めることも出来る
-o "%(playlist)s/%(playlist_index)s - %(title)s.%(ext)s"
#標準出力にストリーミングする
-o -

FORMAT SELECTION

formatオプションで使用する。使用可能なformat codeは--list-formatsで確認できる。
format codeを指定する。

-f 22

こんな指定の仕方も出来る。使用できる値は下記。

-f best
all
全てのformat。
mergeall
全formatをコンテナにマージする。当然--audio-multistreamsと--video-multistreamsが必要。
b*, best*
w*, worst*
映像音声のどれが含まれているかは考慮しない。
b, best
w, worst
映像と音声両方を含む。
best*[vcodec!=none][acodec!=none]
worst*[vcodec!=none][acodec!=none]
とそれぞれ同値。
bv, bestvideo
wv, worstvideo
best*[acodec=none]
worst*[acodec=none]
とそれぞれ同値。
bv*, bestvideo*
wv*, worstvideo*
best*[vcodec!=none]
worst*[vcodec!=none]
とそれぞれ同値。
ba, bestaudio
wa, worstaudio
best*[vcodec=none]
worst*[vcodec=none]
とそれぞれ同値。
ba*, bestaudio*
wa*, worstaudio*
best*[acodec!=none]
worst*[acodec!=none]
とそれぞれ同値。

拡張子を指定する事も出来る。使用できる値は3gp、aac、flv、m4a、mp3、mp4、ogg、wav、webm。

-f webm

2番目にbestな物を指定する。

-f best.2

優先順位を指定する。22がなければ17、それもなければ18をダウンロードする。

-f 22/17/18

複数の形式をダウンロードする。この場合存在するならば22,17,18の全てをダウンロードする。

-f 22,17,18

映像と音声のformat codeを別々に指定する事も可能。指定方法はvideo format + audio format。ただしffmpegが必要。

-f bestvideo + bestaudio
Filtering Formats

細かく絞り込む事も出来る。使用できる値は下記。通常は値が不明な場合はその条件は除外されるが演算子に「?」を付けると除外されずに有効となる。つまり値が不明でもダウンロードされる。

-f "best[height = 720]"
-f "[filesize > 10M]"
-f "[height <=? 720][tbr>500]"

数値fieldに使う比較演算子は<、<=、>、>=、=、!=

filesize
ファイルサイズ
width
動画幅
height
動画高
tbr
動画全体の平均ビットレート
abr
音声の平均ビットレート
vbr
映像の平均ビットレート
asr
音声のサンプリングレート
fps
フレームレート

文字列fieldに使う比較演算子は=、^=(で始まる)、$=(で終わる)、*=(含む)

ext
拡張子
acodec
音声コーデック
vcodec
映像コーデック
container
動画コンテナ
protocol
実際のダウンロードの際のプロトコル
format_id
フォーマットの説明
language
言語
Sorting Formats

--format-sortを指定して--format-sort field1,field2...の様にbestの判断基準を指定することが出来る。
使用できるfieldは下記。

hasvid
映像のあるフォーマットを優先する
hasaud
音声のあるフォーマットを優先する
ie_pref
extractorに指定されたフォーマット設定
lang
extractorに指定された言語設定
quality
extractorに指定されたフォーマット品質
source
extractorに指定されたsourceの優先度。
proto
ダウンロードのプロトコル。(https/ftps > http/ftp > m3u8_native/m3u8 > http_dash_segments> websocket_frag > other > mms/rtsp > unknown > f4f/f4m)
vcodec
映像のコーデック。(av01 > vp9.2 > vp9 > h265 > h264 > vp8 > h263 > theora > other > unknown)
acodec
音声のコーデック。(opus > vorbis > aac > mp4a > mp3 > ac3 > dts > other > unknown)
codec
vcodec,codecと同じ。
vext
映像の拡張子。(mp4 > webm > flv > other > unknown)
aext
音声の拡張子。 (m4a > aac > mp3 > ogg > opus > webm > other > unknown)
ext
vext,extと同じ。
filesize
正確なファイルサイズ。m3u8とDASH形式では使用不可。
fs_approx
マニフェストから計算されたおおよそのファイルサイズ。
size
正確なファイルサイズ。分からない場合はおおよそのファイルサイズ。
height
映像の高さ。
width
映像の幅。
res
映像の解像度。
fps
映像のフレームレート。
hdr
映像のHDR。(DV > HDR12 > HDR10+ > HDR10 > SDR)
tbr
合計の平均ビットレート
vbr
映像のビットレート
abr
音声のビットレート
br
tbr,vbr,abrと同じ。
asr
音声のサンプリングレート。
  • ソートは降順だがfieldの前に「+」を付けると昇順となる。+resとすれば最小解像度を優先する。
  • res:720とすれば720p以下での最大解像度もしくはない場合は最小の解像度を優先する。codecとextは映像と音声の2つの値を取り得る。+codec:avc:m4aとすれば映像codecではavcを音声codecではm4aを優先の上で昇順となる。
  • filesize~1Gとすればfilesizeが1GBに最も近い物を優先する。
  • hasvidとie_prefは無条件で最優先となっている。これは--format-sort-forceで変更可能。
  • デフォルトではcodec:vp9.2が有効つまりav1は優先ではない。同様にhdr:12が有効でありDVは優先ではない。これはAV1及びDVはまだ一般的ではない為。

EXTRACTOR ARGUMENTS

一部のextractorは追加の引数が設定されている。

youtube

skip
manifestのダウンロードをskipする。hlsもしくはdashのいずれかを指定する。
player_client
動画情報を抽出するクライアントを指定する。値はweb、androidios、mwebがあり、_music、_embedded、_agegate、_creator、_agegateの接尾語を持つ。ただし_agegateはmwebのみ。
web_embedded
player_skip
抽出に必要ないくつかのネットワークリクエストをskipする。configs、webpage、jsの内一つもしくは複数を指定する。
include_live_dash
live dash formatを含める。
comment_sort
コメントのソート順としてtopもしくはnewのいずれか指定する。
max_comments
ダウンロードするコメントの最大数を指定する。
max_comment_depth
後で書く

youtubetab(playlists、channels、feeds等)

skip
webpage(webpageのダウンロードをskip)、authcheck(認証が必要なplaylistのダウンロードを許可)の内一つもしくは両方。

funimation

language
言語を指定する。
--extractor-args "funimation:language=english,japanese"
version
動画のversionとしてuncutもしくはsimulcastのいずれかを指定する。
--extractor-args "funimation:version=uncut"

vikichannel

video_types
ダウンロードする動画の種類を指定する。episodes、movies、clips、trailersの内一つもしくは複数。

今月の読書日記

旧ソ連の衛星国家が社会主義から民主主義にどのように移行したか。それには準大統領制という耳慣れない政治体制を理解する必要があるがよく読めば制度自体はそう難しくない。難しいのは実際の運用。日本のマスコミはこれを議院内閣制と位置付けてるのでニュースで使われることは基本ないらしいが、大統領と首相が並列で存在すればいいだけなので実は準大統領制の国家は結構ある。Covid-19いわゆる新型コロナは人間相手の医者は未知のウイルスだったかもしれないが獣医もしくはウイルス学者にとっては別に未知でも何でもないというお話。分かりやすい解説の本だったが、自説である哺乳類の進化はウイルスのおかげという話は学会でどの程度の賛同を得られてるのか全く書いてない。トイレマニアのサブカル本かと思いきやトイレを切り口にインドの実情を浮き彫りにしようという至極真面目な本。中国人の思考回路の源流を歴史の中から探し出そうという本だが中国史総浚いとしても有用だった通り越してむしろ分かりやすかった。やっぱ中国人とアメリカ人は思考回路が似てるという事を確認できる一冊。

今月の読書日記

マスコミが大好きなAIとやらの中の人は具体的に何をしているのかの解説。プログラミングアレルギーでも理解できる平易な本。日本人の名前のフォーマットがいつ頃現在の物になったのかよく分かる本。なんとまあつい最近で明治以来なんだねえ。進化論的な心理学の観点から人類の色んなしょうがない事を解説してる本。集団狩猟生活の記憶がDNAレベルで刻み込まれてる云々って奴。ブログエントリのような軽いノリの文章だが内容は歴史の本読んでても中々お目にかからない珍しい物。古代オリエントの宗教なんて資料が少ないだろうにここまで分かるもんなんだね。話が聖書を中心に展開するがそれは致し方ないのかもしれない。

今月の読書日記

アフターと書かれてはいるがリベラルの起源と歴史的経緯が話の本題。分かりやすくまとめられているんだろうが保守リベラルに対するある程度の予備知識すらない俺さんには難しかった。タイトル自体は馬鹿っぽいけど内容は韓国政治右派左派の傾向と分析の本。韓国の右派左派はいわゆる保守リベラルではない。ただ基本は韓国人が書いた韓国政治本なので、日本人が書いた日本政治本と同様に悪口しか書いてない。
麻薬と人間 100年の物語

麻薬と人間 100年の物語

麻薬戦争の必要性や疑問をこれでもかとばかりにジャーナリストが調べた本。今まで教えられてきた事を根底から覆すのでにわかには信じがたいがたぶん本当なんだろう。なにせ注釈が異常に多い。信じられるかソースを出せソースをと言われるのが分かってるんだろう。麻薬戦争はコストに見合う結果を出せているのかという疑問を麻薬研究の総本山ですら明快に否定してないというのが事態を深刻性を物語っている。お高いしその上分厚いが一読の価値がある本。リベラルという政治的概念が時代と共に変化していく様子を解説した本。「アフターリベラル」で予備知識を仕入れたからかかなり理解できた。

今月の読書日記

番号は謎(新潮新書)

番号は謎(新潮新書)

塀の中の事情 (平凡社新書0941)

塀の中の事情 (平凡社新書0941)