切り抜き作成に役立つツールの紹介

こんにちは。ヤドカリです。
前回は動画切り抜きツールの紹介をしましたが、今回は他のツールを紹介していこうと思います。

①4K Video Downloader (リンク)

一つ目は動画をダウンロードするためのフリーソフトです。画質やFPSを細かく設定でき、動画が対応していれば最大4K画質までダウンロードすることができます。さらにYoutubeだけでなく、SoundCloudやFacebookなどのサイトにも対応しています。ダウンロードもかなり早いので生放送のアーカイブを全部ダウンロードしてもそんなに時間はかかりませんでした(キャラ窓対抗戦で2分ぐらい)。

②時間指定メモ (リンク)

二つ目はタイムスタンプを簡単にメモ出来るようになるツールです。押すだけでタイムスタンプを記録してくれて、ちょっとした補足も残せます。放送見ててここ面白いな、って思ってもどの辺りだったか忘れてしまうことを防げると思います。ただちょっと導入方法が分かりにくいのでリンク先をしっかり読んでください。

③ギガファイル便 (リンク)

三つ目は切り抜き作成というか切り抜き動画の共有に役立つサービスです。DMとかで動画を送ってもダウンロード出来ませんが、このサービスを使うことで簡単に共有が出来ます。しかもこのサービスのいいところは会員登録が不要で利用出来て、アップロードしたファイルは任意のタイミングで削除できる、というところです。自分も日本トルマク連合botさんへのネタ提供にはこのサービスを使っています。

以上の三つがおすすめのツールです。他にも役立つツールがあれば教えてください。ここまで読んでいただきありがとうございました。

動画切り抜きツールYoutube Clipperの使い方

こんにちは。ヤドカリです。
最近日本トルマク連合botさん(https://twitter.com/YamiTaraMasaBot)が出来ましたね。そこで質問ですが、皆さんどうやって切り抜きを作っていますか?多くの人が動画編集ソフトなんかで作ってるんじゃないかなと思います。でもカットしてエンコードして・・・って作業地味に大変なんですよね。そこで簡単に切り抜きが作れるツールを作ったので使い方を解説していこうと思います。

まずはFFmpegという必要なツールをダウンロードするためにここにアクセスします。Versionの上が最新版、下が推奨版です。最新版はバグがある場合があるので推奨版をダウンロードした方がいいと思いますが好きな方を選びましょう。Architectureは使っているパソコンの環境に合わせてください。LinkingはStaticのままで大丈夫です。Download Buildを押すとzipファイルのダウンロードが始まります。そのzipファイルをわかりやすいところに解凍してFFmpegに関する作業は完了です。

次にツール本体をここからダウンロードします。これもzipファイルなのでわかりやすいところに解凍してください。

二つのファイルのダウンロードが完了したらツールの設定をします。ツール本体のYoutubeClipperの中のsettings.propertiesをメモ帳などで開きます(ドラッグアンドドロップで開けます)。中の「ffmpeg=」のところにさっきダウンロードしたffmpeg.exeのパスを追記します。この時にバックスラッシュ(円マーク)をスラッシュに書き換えてください。同様に「ffprobe=」にも追記します。
例:
ffmpeg=C:/Users/Name/Desktop/ffmpeg-4.2.2-win64-static/bin/ffmpeg.exe
ffprobe=C:/Users/Name/Desktop/ffmpeg-4.2.2-win64-static/bin/ffprobe.exe

次に切り抜く動画を準備します。ダウンロード機能は付けられなかったのでフリーソフトでダウンロードしてください。もしJavaをインストールしていない人はJavaもインストールしてください。

これで切り抜く準備が出来たので、YoutubeClipper.jarを起動します。この時に「ffmpegの読み込みに失敗しました。」というメッセージが出た人は上のsetting.propertiesの設定がうまくできていないのでもう一度見直してください。起動するとこんな感じの画面が出ます。

ファイルパスには動画のパスを入れます。開始時間、終了時間は左から時、分、秒です。必ず二桁になるように半角で数字を入力してください。
例:
開始時間 00:00:20
終了時間 00:00:30
パスと時間を入力したら「切り抜き」ボタンを押します。しばらくして「完了しました。」とメッセージが出たら完了です。YoutubeClipperファイルの中のclipsの中に元動画ファイルと同じ名前のファイルが生成されており、その中に切り抜いた時間が名前になっている動画ファイルが切り抜き後のファイルです。
生成後のファイル名の例:00-00-20~00-00-30.mp4

これで切り抜きの作成は完了です。何か質問があったらTwitterまでお願いします。いつものごとくおまけを書いておきますが感想とかなので読みたい人だけ読んでください。ここまで読んでくださりありがとうございました。

おまけ

上でダウンロード機能を付けられなかったと書きましたが、実はその機能も作ったんですよね。ただ動画ファイルと音声ファイルを別々にダウンロードしてそれをくっつけるのでかなり時間がかかってしまいました。他のフリーソフトはどうやってるんですかね?もしいいライブラリを知っている人がいたら教えていただきたいです・・・

Javaにおいてgetter/setterは必要なのか?

2年半前ぐらいの話になるので少し記憶が曖昧なのですが、確か初心者向けのJavaの本に
「メンバ変数はprivateにしてgetter/setterを作れ」と書いてあったのを読んだ覚えがあります。それからはその通りにしていたのですが、だんだんとJavaに慣れていくにつれ「getter/setterは本当に必要なのか?」と思うようになりました。その後自分なりにいろいろと調べたり考えたりした結果、一つの結論にたどり着いたのでそれについて書こうと思います。

結論

まず結論から書きますが、必要な場合もあれば必要じゃない場合もあると思います。どっちだよ、と思った方もいると思いますがこれから解説していこうと思います。

必要な場合

①代入する値に制限をかけたいとき
②加工して値を渡したいとき
③読み取り専用にしたいとき
他にもあると思いますが、代表的なものはこの三つだと思います。それぞれ具体例を挙げて説明していこうと思います。

private int month;

public void setMonth(int month) {
    if (1 <= month && month <= 12) this.month = month;
    else throw new IllegalArgumentException();
}

public int getMonth() {
    return month;
}

月の変数が一番わかりやすいと思います。月なので、1~12以外の値が代入されたら困りますよね。そこでsetterでチェックすることで正しい値以外の代入を防ぐことができます。


private int id;

public void setId(int id) {
    this.id = id;
}

public String getId() {
    if (id < 10) return "0" + id;
    else "" + id;
}

ちょっとわかりにくいかもしれませんがIDをStringとして返す時に必ず2桁になるようにしています(この場合は普通にintで返してその後加工するのがいいような気もします)。


private int id;

public int getId() {
    return id;
}

setterを作らないことで読み取り専用にできます。ただこれはfinalを使っても全く同じことができるのでどっちを使うかは個人の好みですね。


以上が私の考える必要な場合です。

必要がない場合

これは一つだけだと思っていますが、そのまま値を代入したり返したりする場合です。

private int id;

public void setId(int id) {
    this.id = id;
}

public int getId(int id) {
    return id;
}

このようなgetter/setterだったらpublicでいいんじゃないかと思います。

まとめ

getter/setterは実装することでバグを防いだり便利になったりする場合も多くあると思います。しかし今までの例を見てもらえばわかると思いますが、ただ値を代入したり返したりするだけならいらないんじゃないかなー、というのが私の結論です。さらにgetter/setterが使われるようになった簡単な経緯についても調べてみましたがそれはおまけに書くので、とりあえず本文はここで終わりにしようと思います。読んでくださりありがとうございました。

おまけ

参考:
https://nagise.hatenablog.jp/entry/20141010/1412930502
https://www.eisbahn.jp/yoichiro/2014/10/java_property_for_gui.html

JBuilder2や3の頃(2000年前後?)にコーディングなしで視覚的にGUIを作れるようにしようとした結果JavaBeans規格が生まれ、その規格内でgetter/setterが使われていた、ということですね。その影響が強く今でも使われている、という説が強いらしいです。ただやはり完全にgetter/setterを使わない、というのは無理があると思いますし、私も上記のサイトに書かれていたこの言葉に共感します。

getter/setterは古いプログラミングスタイルのひとつの象徴かもしれない。しかし、それを捨て去るには、そもそもなぜそうしたのかを考える必要がある。なぜフェンスが立っているのかを知ることで初めてフェンスを撤去する決断が下せる。根拠もなくフェンスの中に飛び込むのは蛮勇でしかない。