動画 : してログ

iPhone によるスクリーンキャプチャ

機種替えなどで余っている iOS 端末があれば、標準機能である画面収録(スクリーンキャプチャ)をいつでも開始できるようにしておくと便利です。コントロールセンターに画面収録が無い場合は、設定>コントロールセンターから画面収録を表示アイコンに加えましょう。

画面の表示がそのままキャプチャされるため、お休みモードをオンにして、録画中は画面の向きが変わらないよう注意します。また、音量を完全にミュートしてしまうと無音になるので、周囲に音が聞こえないようにしたい場合でも最低レベルまでにします(この状態でも動画の音量は通常の大きさです)。

youtube-dl + FFmpeg の組み合わせ

コマンドラインプログラムであり、うまく使えば強力なツールです。そのためには、ある程度 YouTube の仕様と動画のフォーマットの知識が必要になります。

YouTube の場合、ライブ配信中 → 終了直後 → アーカイブ完了 の各段階で対応が変わってきます。ライブ配信中~終了直後は、HLS (HTTP Live Streaming) になっており、この段階でストリームキャプチャした場合が最も画質が高くなります。

ライブ配信中

ライブ中は HLS ストリームデータのみになります。ライブはアーカイブにならない可能性もあり、保険の意味でこの段階の早いうちにストリームキャプチャを開始したいところです。

なお、オプションで --hls-use-mpegts を使ってください。理由は、正常に終了しなかったライブなどで Ctrl+C で中断すると mp4 にリネームしても再生不能な動画になってしまう可能性が高いためです。

format code  extension  resolution note
91           mp4        256x144    HLS  197k , avc1.4d400c, 30.0fps, mp4a.40.5@ 48k
92           mp4        426x240    HLS  338k , avc1.4d4015, 30.0fps, mp4a.40.5@ 48k
93           mp4        640x360    HLS  829k , avc1.4d401e, 30.0fps, mp4a.40.2@128k
94           mp4        854x480    HLS 1380k , avc1.4d401f, 30.0fps, mp4a.40.2@128k
95           mp4        1280x720   HLS 2593k , avc1.4d401f, 30.0fps, mp4a.40.2@256k (best)

具体的なコマンドは下記のとおりになります。

youtube-dl.exe --hls-use-mpegts https://www.youtube.com/watch?v=xxxxxxxxxxx

ライブ終了直後

ライブ終了直後から MPEG-DASH も選択可能になりますが、これは HLS とほぼ同等のデータと思われます。頭から保存したい場合で画質の劣化を抑えたい場合は、この段階が終了する前にダウンロードを開始しなければなりません。なお、ダウンロード開始していれば動画が削除されても最後まで受信できる可能性があります(たぶん)。

format code  extension  resolution note
139          m4a        audio only DASH audio   64k , m4a_dash container, mp4a.40.5@ 48k (24000Hz)
140          m4a        audio only DASH audio  144k , m4a_dash container, mp4a.40.2@128k (48000Hz)
160          mp4        256x144    DASH video  124k , mp4_dash container, avc1.4d400c, 30fps, video only
133          mp4        426x240    DASH video  258k , mp4_dash container, avc1.4d4015, 30fps, video only
134          mp4        640x360    DASH video  646k , mp4_dash container, avc1.4d401e, 30fps, video only
135          mp4        854x480    DASH video 1171k , mp4_dash container, avc1.4d401f, 30fps, video only
136          mp4        1280x720   DASH video 2326k , mp4_dash container, avc1.4d401f, 30fps, video only
91           mp4        256x144    HLS  197k , avc1.4d400c, 30.0fps, mp4a.40.5@ 48k
92           mp4        426x240    HLS  338k , avc1.4d4015, 30.0fps, mp4a.40.5@ 48k
93           mp4        640x360    HLS  829k , avc1.4d401e, 30.0fps, mp4a.40.2@128k
94           mp4        854x480    HLS 1380k , avc1.4d401f, 30.0fps, mp4a.40.2@128k
95           mp4        1280x720   HLS 2593k , avc1.4d401f, 30.0fps, mp4a.40.2@256k (best)

コマンドでは --hls-use-mpegts を付けない方が良いと思います。付けた場合の MPEG-TS は再生時にシークなどが重くなる(ストリーミング再生に適したフォーマットでシークは苦手な)ためです。付けない場合 DASH が選択され(なぜか best が付くのは HLS ですが)ますし、HLS が選択された場合でも MPEG-4 AVC になります。

youtube-dl.exe https://www.youtube.com/watch?v=xxxxxxxxxxx

また、ライブ配信中はどうしても途中からの録画になってしまいますので、配信終了直後に再度ダウンロードするようなバッチファイルを作成しておくと便利です。

ytlive-dl.bat
youtube-dl.exe --hls-use-mpegts -o "[%(upload_date)s] %(title)s - %(id)s onlive.%(ext)s" https://www.youtube.com/watch?v=%1
youtube-dl.exe -o "[%(upload_date)s] %(title)s - %(id)s complete.%(ext)s" https://www.youtube.com/watch?v=%1

アーカイブ完了後

その後アーカイブ処理が行われ通常の動画扱いになりますが、この際に再エンコードが行われ画質低下があります。また HLS データは削除され MPEG-DASH は残ったように見えますが、これは再エンコードされたもののようです。再エンコード時には、解像度が標準と異なる場合はリサイズされ、最悪のケースでは黒ベタが付いて更に解像度が落ちるようです。

ちなみに、アーカイブ処理が終わるとデータコピーが行われるためか、YouTube サイト上で動画が2個あるような表示になります。この状態を目安にすれば、間もなくアーカイブ処理が終了することが判断できます。

format code  extension  resolution note
139          m4a        audio only DASH audio   51k , m4a_dash container, mp4a.40.5@ 48k (22050Hz), 3.72MiB
140          m4a        audio only DASH audio   98k , m4a_dash container, mp4a.40.2@128k (44100Hz), 7.42MiB
160          mp4        256x144    DASH video  108k , mp4_dash container, avc1.4d400b, 30fps, video only
133          mp4        426x240    DASH video  242k , mp4_dash container, avc1.4d400c, 30fps, video only
134          mp4        640x360    DASH video  637k , mp4_dash container, avc1.4d401e, 30fps, video only, 21.66MiB
135          mp4        854x480    DASH video 1155k , mp4_dash container, avc1.4d4014, 30fps, video only
136          mp4        1280x720   DASH video 2320k , mp4_dash container, avc1.4d401f, 30fps, video only, 86.31MiB
17           3gp        176x144    small , mp4v.20.3, mp4a.40.2@ 24k, 6.62MiB
36           3gp        320x180    small , mp4v.20.3, mp4a.40.2, 18.95MiB
18           mp4        640x360    medium , avc1.42001E, mp4a.40.2@ 96k, 36.35MiB
22           mp4        1280x720   hd720 , avc1.64001F, mp4a.40.2@192k (best)

アーカイブ後は通常の動画と同じコマンドです。

youtube-dl.exe https://www.youtube.com/watch?v=xxxxxxxxxxx

補足情報

youtube-dl はデフォルトでベストな動画を選択してダウンロードしようとしますが、必ずしもベスト(様々な要求があるので仕方ありませんが)ではありません。特に縦長の動画に対しては、解像度の低いフォーマットが選択されてしまう場合があるので注意が必要です。

自分でフォーマットを選択したい場合は、まず -F オプションを付けてフォーマットリストを取得します。その中から、ダウンロードしたいフォーマットの番号を確認して -f <フォーマット番号> と指定してダウンロードさせます。注意点としては、video only になっているフォーマットは、-f "137+140" のように audio only になっている音声フォーマットも選んでください。この時フォーマットを合わせないと mkv になりますので、mp4 なら m4a、webm なら揃えて選ぶと良いと思います。

毎回手動でフォーマットを選ぶのは現実的では無いので、アッパースクリプトで制御して自分にとって適切なフォーマットが選ばれるような対応した方がいいでしょう。フォーマットの選び方は、人それぞれ好みがあると思いますので、ここでは私の使っているロジックのみ紹介しておきます。

  1. youtube-dl -F でフォーマットリストを取得する
  2. ビデオフォーマットで面積を計算して一番大きいものを選択(mp4 や webm はどちらでもよいが、同じ解像度は mp4 を優先する)
  3. ビデオフォーマットが video only の場合は、オーディオフォーマットを選ぶ
  4. オーディオフォーマットはビットレートが一番大きいものを選択(ただしビデオフォーマットに合わせて mp4 / m4a、もしくは webm / webm の組み合わせ)
  5. 選定したフォーマットを指定してダウンロードを実行する

解像度を何よりも優先するのがポイントです。これで今のところ最高画質の動画が選ばれるはずです。ただし、アップロード者が YouTube の再エンコード処理の終了を待たずに動画を公開した場合、すべての解像度が揃っていない場合があります。これは判定が難しいので、アップロードして間もない動画で解像度が低い場合は、時間を置いてもう一度ダウンロードしてみることをお勧めします。

テレビの録画をニコニコ実況入れて保存するようにしてから、地上波見るの結構楽しくなってきました。つまらない番組でも実況あると、なんとなく面白く見えてくるので不思議です。もしかしたら地上波が生き残るチャンスかもしれませんよ~。

ただ、どの番組にも必ず荒らすバカはいるものです。そういったユーザーのコメントを消すのに NG ユーザ設定があるのですが、これが XML に出力するとき効いてないんですよね。XML って言ってもテキストファイルなので、今回はエディタなどを使って除去してみようと思います。

せっかくコメント入りの動画を作っても、しつこい卑猥なコメント野郎や意味不明な連投をするユーザがいると台無しです。そういったコメントに毎回反応する「○○○消えろ」とかいったコメントも迷惑。まとめて排除してしまいましょう。

正規表現を考えてみる

いきなりですが、特定のユーザ ID のコメントにヒットする正規表現を紹介します。正規表現が何なのか知らない人は申し訳ありませんがググってください(ここからはプログラミングの知識が必要です)。"NG-USER-ID-HERE" には消去したい NG ユーザの ID を調べて入れてください。また、正規表現は PHP の PCRE 用に書いたものですので、他の処理系では変更が必要かも知れません。

/<chat[^>]+?user_id="NG-USER-ID-HERE".+?<\/chat>/s

実際に除去してみる

正規表現が使えて UTF-8 が扱えるテキストエディタがあれば、上記正規表現を空文字に置き換えれば良いだけです。ただし、エディタによっては絵文字などが化けてしまうのでご注意ください(私が愛用している TeraPad は化けてしまうんですよね)。

プログラムができる人は、シェルスクリプトや PHP などを使ってバッチコマンドを作ると便利です。NG ユーザリストを外部ファイルで供給したり、キーワードによるフィルタなんかも作れば不快なコメントの問題はほぼ解決でしょう。

サンプルコード

私が作った PHP のコードを下記に示します。$xml にコメントデータを読み込み、$nguid にユーザーの ID が入っているものとします。

$reg = '/<chat[^>]+?user_id="'.$nguid.'".+?<\/chat>/s';
$xml = preg_replace($reg,'',$xml);

今回はニコニコ実況のコメントを埋め込んだMKV動画の作成方法を紹介します。特に難しいことはなく、順番にツールを使用していく単純作業でできます。そうは言っても、若干注意点もあるので私が保存に使っているお勧めの設定と手順をご紹介します。

必要なツール

録画(TS抜き)や動画エンコードについてはできるものとして、その他に下記のツールを準備しておいて下さい。いずれもインストール不要で私の環境ではそのまま動きました。

  • jkcommentviewer
    ニコニコ実況のコメント(過去ログ)をダウンロードするためのツール。これでコメントログをXMLファイルに保存する。
  • NicoConvAss
    kcommentviewerでダウンロードしたコメントログ(XML)を字幕ファイル(ASS)に変換するツール。下の方の「おまけ」という所に置いてあると思う。
  • MKVToolNix
    動画及び字幕(コメントログ)を結合したMKVファイルを作るツール。MKVの汎用編集ツールなので、結合・分解・再結合などもできる。

動画の準備

録画時に、自分と分かるコメントを放送開始直後に打っておくと、動画とコメントを同期しやすいです。録画開始時間が分かっていてもズレているように感じることもあるので、客観的な目印になります。

エンコードの設定ですが、品質重視の保存版は1440x1080(DAR16:9)、インタレース維持(60i)にしています。そうでないものについては、1280x720(PAR1:1)、プログレッシブ化(24p/30p)にしています。なお、CMについてはカットしません(実況付きの場合CMの導入や内容についてのコメントも楽しいものです)。

また、私はエンコードに市販の TMPGEnc VMW6 を使っています。フリーソフトだけでもエンコードは可能ですが、使い勝手も良く仕上がりも綺麗なので持っていて損は無いと思います。実際に使っているエンコード設定を下記表に示します。

画質 形式 インタレース除去 解像度 ビットレート 容量縮小率 感覚的な画質
最高 mp4 60i インタレース除去を行わない 1440x1080 (SAR16:9) 2Mbps 15% 放送画質と遜色なし
mp4 24p 24fps 化(コーミング除去優先) 1280x720 (PAR1:1) 1.5Mbps 12% アクションシーンでも画質低下に気づき難い
mp4 24p 24fps 化(コーミング除去優先) 1280x720 (PAR1:1) 1Mbps 8% アクションシーンや細かい文字周辺で言われれば気づく程度の低下が見られる
mp4 24p 24fps 化(コーミング除去優先) 1280x720 (PAR1:1) 0.8Mbps 6% シャープさが無くなり、書換遅延部分が見分けられるが、コメントが流れれば気にならない

コメントログのダウンロード

jkcommentviewer を使い、放送時間に掛かるコメントログをダウンロードし、XMLファイルに保存する手順です。時間の範囲が2時間以内は「ツール>過去ログをダウンロード」からできますが、それを超える場合は「過去ログに接続」(チャンネルを選択するプルダウンメニューの中にあります)で取得してください。後者の場合は、コメントをスクロールしてみて最後まで読み込んだのを確認してから保存するようにしてください。

過去ログに接続の設定
過去ログに接続の設定

ここで開始時間は厳密に動画と合わせる必要はありません。字幕ファイル(ASS)を作る際、もしくはMKVに結合させる際にディレイ(マイナス方向も可)で調節できます。なお、録画のファイル名をカスタマイズしておき、放送局、開始時間、終了時間が分かるようにしておくと、取得範囲の設定が簡単になります。

取得したコメントログ
取得したコメントログ

字幕データに変換する

NicoConvAss を使い、コメントログ(XML)から字幕ファイル(ASS)に変換する手順です。動画の解像度に合わせて、フォントサイズ、フォント倍率を設定し、ディレイにて表示タイミングのずれを調整します。設定済みのウィンドウに、コメントログ(XML)をドラッグ&ドロップするだけで、同名の字幕ファイル(ASS)が出来上がります。

解像度 フォントサイズ フォント倍率
1440 x 1080 28 横:168%/縦:255%
1280 x 720 28 横:150%/縦:150%
TSファイルはドロップしなくても大丈夫です
TSファイルはドロップしなくても大丈夫です
“下コメ”はチェック入れておきましょう
“下コメ”はチェック入れておきましょう

MKVに結合して完成

最後に MKVToolNix を使い、動画ファイルと字幕ファイルをMKVファイルに結合します。他にもたくさん機能がありますが、今回は動画と字幕の2ファイルをドラッグ&ドロップして、「Start multiplexing」ボタンを押すだけの作業になります。

動画と字幕をドロップして Start 押すだけ!
動画と字幕をドロップして Start 押すだけ!

コメントのずれの調整

録画開始時間とコメントログの時間をぴったり合わせて(30秒前とかに録画開始されている場合はそれも計算に入れ)、最初と最後のCMもカットしないようにすれば、この手間は省け(ディレイは常にゼロになり)ます。

訂正追記しますが、最初のコメント時刻が起点になるようなので、コメが少ない番組とかだと何秒もズレます。 最初のコメント時刻を確認して、録画開始時刻との差からディレイ値を決めるとだいたいタイミングが合うと思います。

もし、ずれているコメントを調整するときは、NicoConvAss もしくは MKVToolNix のどちらかお好みの方で行ってください。NicoConvAss の場合は、設定値が保存されるので便利かも知れません。また、コメントは数秒早めに調整してラグを無くすのもいいかと思います。

最後に

ニコニコ実況を埋め込んで保存しておくと、同じ映画でももう一度観たくなるし、放送される度に別バージョンを保存しておきたくなります。実況があるだけで同じシーンでも印象が違ってくるし、放送されたときの時事ネタも流れていたりするので、新しい映画の楽しみ方としてアリだなと思います。もしかしたら、レンタルやオンデマンドが普及した今、地上波を見直すきっかけになるかも知れません。毎回祭りになるアレなんかは、放送回によってはサーバーがダウンしたり、大量コメントで処理落ちしたり、別バージョンを観るのが非常に楽しくなります。どこで買っても同じ内容では何度も観たりしませんからね。

今までインタレース除去のフィルターで“常にインタレース除去を行う(2倍 fps 化)”をした後、出力設定で 24fps をすればいいと思っていました。これは多くの場合うまく行きますが、CM入りで出力するような場合はそうでない場合があるようです。同じソースでも、CMカットした場合はうまく行き、CMを残した場合は(本編の)カットによっては半分のフレームレートになります。インタレース除去の方法を変更して“Weave”などにしても、ブレンドされてブラーが掛かったような動画になり、この組み合わせではうまく 24fps になりません。また、エンコード時間も2倍(2倍 fps 化すると処理するフレームが倍になるため)掛かってしまいます。

インタレース除去は“24fps化”を選ぶ
インタレース除去は“24fps化”を選ぶ

すべての場合でうまく行くかは分かりませんが、このような場合はインタレースの除去は“24fps 化(コーミング除去優先)”などを選んだ方が良いようです。それから、出力のプレビューでコマ送りして必ず確認し、更に複数の異なるカットで確認した方が良いと思います。

前に どこかのサイトで60fpsの出力プレビューで「2回に1回更新だったら30fps、2回に1回→3回に1回更新の繰り返しだったら24fps、毎回更新だったら60fpsで出力する」みたいな情報を見て「インタレース除去は“2倍 fps 化”を選んでおけば良い」というようなクセが付いておりました。しかし、これだと(本編の)カットによっては30fpsに見えたり、24fpsに見えたりするのであまり鵜呑みにしない方が良いと思いました。

例えばNAS上にある、2時間越えのMKVファイル(2.4GB)を開こうとすると、上の通り4分も待たされます。同じファイルを別PC(Windows7)の共有フォルダに置いた場合は30秒くらい、ローカルに置いた場合は2秒です。HDDのランプの点き方からすると、ローカルにコピーしている感じは無く、サーバー側でのみ何か処理されているような感じがします。

海外のフォーラムを見ると、VLC 3.0(正式版ではない)を試せとあるけど、やってみても結果は同じです。設定項目にも該当しそうなものは無いし、結局これらのスレでも解決してないみたいだし、今のところVLCでは仕方ない問題っぽい。

NASとPCで待ち時間が違うのは、プロトコルのバージョン違いか、サーバー性能の違いじゃないかと思います。iSCSIにしてローカルにマウントすれば解決しそうな気がしてますが、面倒なので試しておりません。今のところは、ローカルにコピーしてから再生するか、MKVを使わないようにする、というのが現実的な解決策となります。

追記

iPhoneにVLCアプリ入れて同じMKVを再生してみたら一瞬で開始されました。Windows版に特有のバグで確定でしょうかね、早く修正されることを望みます。

追記

VLC 3.0 以降で修正されました。



裸眼で確認できるほどのグリーンフラッシュは珍しいが、小さいものはそれほど珍しくないということだろうか…。ちょっと自信が揺らぐなあ。

10/14 新潟市西区 内野浜
Canon EOS Kiss X4 / ミラーレンズ800mm F8 DX
MOV×1→TMPGEnc VMW6
Tags #大気光学現象 #グリーンフラッシュ #だるま夕陽 #夕陽 #動画 #GFC
※この記事は「Yahoo!ブログ - HDRp」からの転載です

だるま夕陽から、沈むときにはグリーンフラッシュ(5:50くらい)します。今回のグリーンフラッシュは、少し青みがかってみえます。もしかしたら、日本でもブルーフラッシュは見れるのかも知れません。



グリーンフラッシュ部分のGIFアニメ



太陽の下側が垂れ下がってきました


海面下からもう一つの太陽が現れます


ふたつの太陽が繋がって“Ω”の形に
(The Omega Sun)


首が太く繋がり、人のシルエットのように
(だるま夕陽)


千切れそうな上端に緑色が見えてきます


沈む瞬間に緑の閃光が走ります


少し青みがかっているようにも見えました


<BGM>
無料音楽素材 煉獄庭園
http://www.rengoku-teien.com/


10/02 新潟市西蒲区 角田浜
Canon EOS Kiss X4 / ミラーレンズ800mm F8 DX
MOV×1→TMPGEnc VMW5
Tags #大気光学現象 #グリーンフラッシュ #だるま夕陽 #夕陽 #動画 #GFC
※この記事は「Yahoo!ブログ - HDRp」からの転載です

はい本日、僅かなグリーンフラッシュが見られました。撮影回数にして9回目です(通った回数はもっとありますが)。まだまだ満足していないので、明日からの秋晴れに期待しています。

動画で見たい人は、こちらのYoutubeでどうぞ。お急ぎの方は、沈む間際(6:00)からご覧ください。


<BGM>
無料音楽素材 煉獄庭園
http://www.rengoku-teien.com/


09/29 新潟市西区
Canon EOS Kiss X4 / ミラーレンズ800mm F8 DX
MOV×1→TMPGEnc VMW5
Tags #大気光学現象 #グリーンフラッシュ #風景 #夕陽 #動画 #GFC #佐渡

※この記事は「Yahoo!ブログ - HDRp」からの転載です

粟島は完全に、佐渡は両端が浮いているように見えました。もうちょっとで夕陽の沈む位置が佐渡を外れるので、このような日には、だるま夕陽になると思います。

音楽素材:無料音楽素材 煉獄庭園
http://www.rengoku-teien.com/index.html

09/21 新潟市西区
Canon EOS Kiss X4 / ミラーレンズ800mm F8 DX
MOV×1→VirtualDub + Deshaker / TMPGEnc VMW5
Tags #動画 #蜃気楼 #浮島現象 #佐渡 #粟島 #佐渡汽船
※この記事は「Yahoo!ブログ - HDRp」からの転載です