あとちょっとで flash のサポートが終了するので

これは「ブラウザが」なのか、それともアドビが開発をやめるのかどっちなん? 気付いたらブラウザがうるさくなってて気にするようになっただけで、使い込んでるユーザではないからなぁ…。

元はといえば、ワタシのこのサイトに限った話をすると、「何かをビデオで伝えたい」場合にこんなステキな方法に辿り着く前は、色々試行錯誤をしていたんである。その「すてきぃなやーつ」の一つ前が Google のハングオンで、その前が「Jing」だった。

Jing はとてつもなく満足、というものではなかったものの、とりあえずの用を足せることは足せた。確か本来は直接 YouTube にアップロードする機能もあったかと思う。ただ、これを見つけた当時のワタシは「あたしが作ったビデオはお好きにダウンロードすればいいじゃん」ポリシーの兼ね合いもあって「hhsprings.pinoko.jp にビデオの実体があり、ダウンロード出来る」ようにするために、YouTube を採用しなかった。今はもうこれは(キリがないので)諦めてしまったけれど。ともあれ、ワタシのこのブログには、おそらく10個いくかいかないかくらいの「swf」が置かれてる。Jing で作ったヤツだ。

して当然ワタシのサイトを奇特にもご覧になるみなはまがたは「flash なんか使うんじゃねーよヴぁーかヴぁーか」という不当な不平を喰らうこととなる。つまり「あとちょっとで flash のサポートが終了する」ことによって、一般の人は悲しめばいいが、ワタシのように「ソレをお披露目してる(ヴぁーかな)やーつ」は移行に苦しむハメと相成るのであった。(今移行してみたのはこれ。)

つぅわけでそれらを延命させようと思うならば、あと一か月くらいで「flash でない動画化(して YouTube にアップロード)」しなければならないわけなんだけれど、これがまぁなかなかにどーしようもなくってな。「ちゃんとした flash プレイヤー」でない「flash 扱えまっせ」道具の多くは、flash の「インタラクティブ性」を無視して「ビデオたる何かしら断片」だけを無理やり拾って「なんちゃってビデオ」を作ろうとする。ffmpeg、vlc プレイヤーなどがそう。だから「ご気楽変換」は手ごろに見繕えるものでは出来ない。きっと「とっても製品」で可能なもんはあるんだろうけどね…。

んで、とりあえずはさ、「ブライザブラウザで実行出来なくなる」ことにまずは措置せねばならんわけね。どんなであってもとにかく「実行出来る状態にさえあれば」その実行を録画出来るわけで。なので「プレイヤー」を探そう、てわけだ。

なんかねぇ、「まぁちゃんと動く、動くけどさぁ」な、standalone flash player ね。使いにくいわ…。でもちゃんと、で、完全、何せアドビ純正なわけで。で、実際にやってみた:

入力が「インタラクティブ、なの?」な「ほぼただのビデオ」なのでわかりにくいけれど、フリーの flash エロゲーを動かしてみたらちゃんと動いたよ、だからおそらくどんなのでも大丈夫なんだろうと思う、何せ純正だし。


2020-11-20追記:
ワタシのサイトでの「swf撤廃祭り」は完了させた。祭りを完了させただけね、全廃したわけじゃない。

思ったより数が多かったわ。「10個いくかいかないかくらい」と思ってたが、swf の数だけだとその3倍くらいあった。一ページに複数置いてたのが割とあったんでページ数としては倍程度ではあったけれど。

「Jing がー」てのと「swf作るんぜ」て内容のネタはこれはもう、置いてるビデオを差し替えてしまうとワケわからんものになっつまうんで、それらは追記を追加しつつもビデオはそのまま維持。該当は2つだったか3つだったか。

それと、「Jing でビデオを作ってた」のがなんせ5年前なんで、そもそも延命する価値があるネタなのかどうかも結構グレーなのよね。ひょっとしたら廃れてるかもしれない、と思いつつもその確認まではしないままビデオだけ差し替えた、というのがほぼ全て。

そして。「延命する価値があるネタなのかどうか」で、そうでないのが2つあったので、これはね、もうページごと「ゴミ箱」へポイした。XEyes のネタと transfix のネタかな。後者は廃れたというよりは、なんかさらしとく意味ってあるのかなぁと今更疑問になって。まぁワタシがこのブログ本体で「捨てた」としてもこれはネット世界にはちゃんと残ってしまうのよね。消した二つをどうしても読みたい人は、読む手段はある。その価値は一つもないけれど、どうしてもそうしたいならね。やり方は教えないけど。

インターネットが普及して以降「黒歴史を隠蔽できない」事態が加速していて、本当にめんどうくさい世の中になってしまったなぁということを理解したうえでこのブログを書いてる。やらかしてしまったことは隠せない。たとえばワタシについてどういう印象を持ってるかわからんけれど、少なくとも「レベルは結構低いエンジニアである」ことは色んなネタで暴露しまくってるが、それをワタシは隠そうと思ってない。いや、隠せないからな。一度発信してしまったらそれは、半永久的に残ってしまうんだよな。弱るよねこれ。

…なーんてことを考えながら「swf→youtubeビデオ」置き換え作業をちまちまやってた。自分でそれをしない人は想像出来ないだろうけれど、実に手間なんだわな、いくら術があろうとも。というか術があるからこそ、か。ワタシの場合、流れでは全部でこんな作業だったわけなのだ:

  1. ワタシのブログから swf を検索、該当ページを探す。
  2. 該当ページを開く。
  3. 該当ページ「ソースの表示」して、貼り付けてあった swf を(ワタシは wget で)ダウンロード
  4. 録画準備のために、音声を「PCのスピーカー」に切り替える。普段は HDMI でテレビに繋いでモニタがわりに使っているため。テレビのままにしとくと録画時に音声が取り込めない。
  5. standalone flash player を開く。直接コマンドライン引数で対象 flash ビデオを与えることは出来ないので、ほんとに起動するだけ。
  6. standalone flash player の「Open flash…」メニューでダウンロードした swf を開く。
  7. 「すべて表示」に変更。
  8. 今相手にしてるのが「Jing がもたらしてくれるインタラクティブ性」なので、Jing の操作として「再生ボタンとか」を操作せねばならぬ、のだが、standalone flash player と Jing による UI との関係がなんかよくわからなくて、何が起こるかというと「勝手に再生が始まった挙句に中断の仕方がわからない」ことになる。これはやむなく「Jing の再生ボタンをとにかく押して、一度全部再生し終わるまで待つ」とし、終了後にあらわれる「replay」に賭けることに。
  9. 「replay」を押す前に デスクトップ録画開始
  10. 「replay」。待つだけ。「一倍速」ですから。そりゃそーでしょ。
  11. 再生が終わったら ffmpeg での録画を停止。
  12. 録画した結果のビデオは「不要部分」が時間軸方向にも二次元方向にもありまくる。開始直後と終了直前は standalone flash player とは無関係の部分を録画しちゃってるし、デスクトップ全体を録画してるので四隅はゴミだし。
  13. これの編集のために ffchopreview.py。trim の目的と、あとこの子、コンソールへの出力を Mako テンプレートで書き換え可能にしてあるので、その機能を利用して「crop」までまかなうやつを作ってる。後述。
  14. めでたくビデオのゴミ掃除が終わったら、studio.youtube なアップロード。「Unlisted」で。
  15. アップロードしたビデオが視聴可能な状態になったらブラウザでそれをとにかく開いて「再生」。右クリックして「Copy embed code」。
  16. 「ワタシのブログの該当ページ」の編集画面に入り、flash ビデオを貼り付けていた部分を youtube な「「Copied embed code」」スクリプトに差し替え。
  17. ただし、そのまま 1280×720 のまま貼り付けるとワタシのブログページにフィットしないので、960×540 に書き換えつつ。
  18. 「更新」、作業完了、めでてーな。

ffchopreview.py の進化とそこで使う Mako テンプレートの進化があって、一つ一つの作業時間は後半は結構短くはなったものの、所詮は「一倍速」作業。加護受けまくりの騎士ラインハルトが目にもとまらぬ速さで作業したとしても、作業時間を「元のビデオの録画時間」より短くすることは絶対に出来ない。3分のビデオなら、必ず3分以上の作業時間が必要。実際は、一つ当たり短くて10分くらいずつだったかな。まぁダルいよ。かなり精神力がいるし。だから一気にやらずに少しずつ一個ずつやってた。

あ、「後述」ね。これ:

 1 #! /bin/sh
 2 trap 'rm -f .tmp.out-*.mkv' 0 1 2 3 15
 3 cx1=40
 4 cx2=40
 5 cy1=50
 6 cy2=100
 7 #
 8 % for i, (ss, to) in enumerate(ranges):
 9 % if len(ranges) == 1:
10 out=${pipes.quote(args.video)}-out.mkv
11 % else:
12 out=".tmp.out-${i}.mkv"
13 % endif
14 # "${to_tss(to - ss)}" secs
15 ffmpeg -y -ss "${to_tss(ss)}" -i ${pipes.quote(args.video)} -ss 0 -vf "<%text>crop=$((1920 - (${cx1} + ${cx2}))):$((1080 - (${cy1} + ${cy2}))):${cx1}:${cy1},scale=1920:1080,setsar=1</%text>" -t ${to - ss} <%text>"${out}"</%text>
16 % endfor
17 
18 % if len(ranges) > 1:
19 ffmpeg -y -filter_complex "
20 % for i, (ss, to) in enumerate(ranges):
21 movie=.tmp.out-${i}.mkv:s=dv+da[v${i}][a${i}];
22 % endfor
23 % for i, (ss, to) in enumerate(ranges):
24 [v${i}][a${i}]
25 % endfor
26 concat=n=${len(ranges)}:v=1:a=1
27 " ${pipes.quote(args.video)}-out.mkv
28 % endif

咄嗟に書いた、というかね、「今の用を足せればいい」というミニマルなノリで作ったテンプレートで、まぁ雑。ただ今回のワタシの作業には十分だった。最後の方は ffchopreview.py のコンソール出力を直接シェルにパイプしてたわ。