C#からffmpegを使ってジェットカットな動画を自動で作るwpfアプリを作った

2019年11月5日

アプリのダウンロードは こちらから
ダウンロードして、CutMovies.exeを実行する。

wpfで作ったけど、MVVMで作らず、コードビハインドでゴリゴリ書いていった。
言い訳すると、小さいアプリだし、個人用だし、・・・といくらでも出てくるわこれ。。ダサいでしょ?テヘペロ

そんな前置きしたうえで、ソースを晒す。
GitHubへのリンク

こちら参考にさせてもらいました。

使い方

UIもクソだし、バグもあるけど、とりあえずリリースしたよ。
これはね、今まで色々自分で開発してる時に凝ってコードを綺麗にしたり、デザイン見直したりしてる内に、熱が冷めて結局リリースできなかった教訓を生かしたんです。
おっさん、学びました。

さて、このツールですが
個人的なニーズは既に満たしているので、修正するかはわからんです。
誰かダウンロードして使ってくれるなら修正する!がんばる!

タイトルはジェットカッターなのに、CutMoviesって何やと突っ込みどころ満載なアプリが以下。

.NET Coreで作ってるからMacとかLinuxでも動くんかね?
動作確認もしてないから知らないけど。。

さて、そんな誰も使ってくれないかもしれないアプリの使い方について

パス設定

フォルダーを指定する。
これ絶対指定してください。
ちょっとなんでか忘れたけど、指定しないと使えないようにしてた気がするから。

パラメータを設定する。


無音継続が設定秒数続いたら、その部分を排除。
排除判定の秒数が有音区間の生成対象とする最低秒数。
一本の動画から複数の有音区間を分離していっているイメージで、その際に生成するかどうかの判定するための秒数。 (ちょっと何言ってるかわからんかなぁ。。日本語むず)
無音判定は、無音と判定する音量を設定するところ。

個人的に、自分でぴったりな設定をハードコーディングでゴリゴリやってる。
本当はここで設定した値をconfigなり何なりに保存したいけど。
ま、わし以外使わないだろうから、いいやと。

動画結合は、 分離した有音区間を結合する機能。
分離してないと使えない。
っというのも、分離時にsummary.txtっていう生成データについて記述したものを作成してて、結合でそれを使うわけです。
結合してできるのは、complete.mp4ってファイルです。

サムネイル作成は、動画から設定秒数ごとにサムネイルを作成する。
動画から写真を!という個人的なニーズから生まれた。
主に子供たちの写真を動画から抽出してぇわ。。。ってニーズ。

最後に、全実行。
これは分離、結合、サムネイル作成を全部実行するやつ。

作った経緯

これが欲しい!と思ったのは、私個人が中国のYoutubeっぽいところで動画UPしており、何度か動画編集をしてる時でした。
っで、その際に動画編集の大変さを感じ、というか単調な作業で続けるのムリゲーってなったので、何か自動化したいなと思ったのがきっかけ。

はまったところ

その一

今もあまり原因がわかってないけど、ffmpegで出力される結果がprocess.StandardErrorに格納されているという部分。
ずっと process. StandardOutputに内容がなく(string.Empty的な)どこに問題があるのかわからなかった。

その二

なぜだかよくわからないけど、WaitForExit()する前に、出力を受け取らないといけない。しかも、出力はその一で挙げたように、 process.StandardError に入っている。
これをしないと、なぜか WaitForExit がきかない。
いや、意味が分からない。

process.Start();
var tmp = process.StandardError.ReadToEnd();
process.WaitForExit();

C#C#, ffmpeg, wpf

Posted by takumioda