YouTubeサムネを自動生成するシェルスクリプトを作った

最終更新日

URLから簡単にYouTube用のサムネイルを作るスクリプト.

シェルスクリプトの本体

まず書いたスクリプトを載せます.

#!/bin/bash

# this shellscript requires a YouTube video URL as an argument
# prefix and suffix of the thumbnail URL</span>
prefix="http://img.youtube.com/vi/"
suffix="/maxresdefault.jpg"

# make thumbnail URL from YouTube video URL
id=`echo ${1} | grep -oP "(?&lt;=\=)(.+)"`
url=$prefix$id$suffix

# download the thumnail image
curl -o image.jpg $url

# get the part number of the video
title=`curl ${1} 2>&1 | grep -oP "(?&lt;=)(.+)(?=)"`
number=`echo $title | grep -oP "(?&lt;=Part )(.+)(?= -)"`

# edit SVG image
sed -i -e "s:>#[0-9][0-9]\?:>#${number}:g" svg.svg
inkscape -e png.png svg.svg

# make a thumbnail image and remove intermidiate files
convert image.jpg png.png -composite ${number}.jpg
rm image.jpg png.png
mv *.jpg ~/ダウンロード/
exit 0

仕様と用途

もちろんこれだけじゃ動かないです.前提になるのは…

  1. 引数のURLで渡すYouTube動画のタイトルの末尾が「Part **」のようになっていること (**の部分は数字)
  2. スクリプトを実行するマシンにInkscapeとImageMagickがインストールされてること
  3. 同じ階層に特定の様式のSVG画像が保存されていること

たぶん2の前提は簡単に解消できるね.インストールすればいいだけだから.

想定していること

このスクリプトは,もちろん僕の個人的な目的のために書かれてるから汎用性はない.でも僕の目的には十分なので,これで十分だけど,もし参考にする場合にはこれを改造して使ってくださいな.僕の使いみちは,こんな感じ.

  1. 僕のYouTube動画のURLを引数で渡す
  2. 手元のSVG画像を編集してサムネイルを作る

サムネイルを作りたい動画は,僕が使ってるNintendo Playthroughチャンネルの動画.この動画に,簡単にサムネイルを設定したいのです.

これが実際の動画動画

こんな感じで,タイトルが「Super Mario Odyssey Playthrough [No Commentary] Part 45」になってるから,この末尾の数字を取ってくる処理がある.上の動画の場合は45だね.

で,SVG画像を編集する.SVGの都合の良いところは全部XMLだということ.だからとても簡単にスクリプトから画像を生成できる!これは嬉しい.僕の場合は動画の通し番号だけ動画から取った数字を書いて,周りにはいつも同じ画像を配置してる.左上に「Super Mario Odyssey」ロゴを置いて,下側に「Playthrough」を書いてる.SVGの中にこんなtext要素があるので,それを編集してる.

<!-- 前略 -->

<text 
  xml:space="preserve"
  style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:56.99990463px;line-height:66.79676056px;font-family:'Super Mario';-inkscape-font-specification:'Super Mario Bold';font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:end;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:end;white-space:normal;shape-padding:0;opacity:1;vector-effect:none;fill-opacity:1"
  x="152.92862"
  y="-190.62903"
  id="text2150">
  <tspan
    sodipodi:role="line"
    x="152.92862"
    y="-190.62903"
    id="tspan2168">
    #59
  </tspan>
</text>

<!-- 後略 -->

YouTubeはアップロードした動画から自動的に良い感じのフレームを抜き出して動画のサムネイルに設定してくれる.だから自動で設定されたサムネイルに,いま編集したSVGを重ねればOK.YouTube動画のサムネイルを取得するのはとても簡単で,このサイトによれば,例えば最大サイズのサムネイル画像はこのURLで取得できる.

http://img.youtube.com/vi/動画のID/maxresdefault.jpg
rect881
画像を重ねて作成してる

自動設定されたサムネイルをダウンロードして,編集したSVGを合成してサムネイルに動画の通し番号を書いて,それをファイルに出力する.そんなスクリプトです.本当はYouTubeにアップロードして…みたいなところまで自動でできると嬉しいけど,今回はここまで.僕はプログラミングは得意じゃないので,認証とかやろうとすると迷宮入りしてしまいます…笑

僕は自分のゲームプレイ動画を載せるYouTubeチャンネルを持ってる.これは僕のゲームプレイを記録しておくためのもので,別にめちゃめちゃ沢山の人に見てもらいたいわけじゃない.まぁでも「一切見ないで欲しい」と思ってるわけでもなくて,あわよくば魅力を感じてもらって見てもらいたいとも思ってる.なので「できるだけ手間を掛けずに,でもそれなりに魅力的に見えるサムネイルを簡単に作成したい」というニーズがありました.今回のスクリプトはそのニーズに応えるもの.

コメントを残す

回れ右の内輪差をもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む