はじめに
コロナの影響で小学校が始まらない中、小学校からあさがおの種が届き、その観察をしましょうという課題が出された。
うちの子(小学校2年生)は喜んであさがおの種を植え始め、芽が出るのをその場を離れずにずっと見つめていた。
よし!どうせなら、ビデオカメラで撮影し続けて、それをffmpegで加工し、タイムラプスで再生させてみよう、ということをやったのだがハマりました・・・
機材
- ビデオカメラ
- WindowsPC
やったこと
- ffmpegのダウンロード
- あさがおの種を植えた鉢に向けて、ビデオカメラを設置し、録画する
- 録画データをパソコンに取り込み、ffmpegで加工
以下に記載の内容は全てコマンドプロンプト上での実行。
ffmpegのダウンロード
以下の公式サイトからffmpegをダウンロード
https://ffmpeg.org/download.html
インストール作業はなく、ダウンロードしたものを解凍するだけ。
今回はCドライブ直下に配置したので、バイナリファイルはcd c:\ffmpeg\bin
にある。
パスを通すのも面倒なので、作業はここで行うことにした。
ビデオカメラの設置
あさがおの前にビデオカメラを固定して撮影開始。
朝9時頃から録画し続け、暗くなったら撮影終了しようと思ったら、17時頃には容量不足で撮影が自動で止まってた。
でも、日が暮れるちょっと前だからそれはそれでOK。
録画データをffmpegで加工する
ビデオカメラから取り出した動画ファイルは .mp4 ファイル。
これが複数ファイルに分割され、16ファイル分出来上がってた。
あさがおの成長なので、数分で何か変わるわけでもない。1日かけて撮影したものを数秒で再生しないと何もわからないので、1ファイルずつ再生速度を上げる加工をffmpegで行う。
再生速度を上げる
取り出した動画ファイルの再生速度を上げて、タイムラプスにする
以下のページを参考にやってみる。
https://trac.ffmpeg.org/wiki/How%20to%20speed%20up%20/%20slow%20down%20a%20video
ffmpegが置かれている場所に動画ファイル00001.mp4を置き、以下の通りコマンドプロンプト上で実行
00001.mp4を1000倍速にし、a.mp4として出力する場合
ffmpeg -i 00001.mp4 -filter:v "setpts=PTS/1000" a.mp4
しかし、変換してみると、再生ファイルが変換前に比べて短くなってないし、再生される音声も通常のスピードで聞こえる。
先ほどのwikiをよく読むと以下の記載があった。
the audio stream is not changed, so it should ideally be disabled with -an.
どうやらデフォルトでは映像のみ変更されるが、音声はそのまま変更されないようだ。
タイムラプスとして見るには音声はいらないので、-an
オプションで音声を無効化してみた。
ffmpeg -i 00001.mp4 -filter:v "setpts=PTS/1000" -an a.mp4
これで1時間以上の動画ファイルが3秒程の動画ファイルになり、これだけでもしっかりとあさがおの成長がわかるようになった。ただ、3秒程度なので非常につまらない。
動画ファイルは16ファイルあるので、これらをバッチファイルで一気に変換開始。
その間にTVを見たり、子供と遊んだりで時を過ごす。
複数ファイルを結合
短くなった16ファイルを今度は結合して1つのファイルに。
以下のページを参考に試してみる。
https://trac.ffmpeg.org/wiki/Concatenate
mylist.txt というファイルを作り、そこに結合したいファイルを以下のように記載すればよいとのことでやってみる(以下は2ファイルを結合する場合)。
file '/path/to/a.mp4'
file '/path/to/b.mp4'
そして、以下のコマンドを実行で、mylist.txtに記載したファイル達が結合され、ひとつのall.mp4ファイルになる(はずだった)・・・
ffmpeg -safe -0 -f concat -i mylist.txt -c copy all.mp4
うまくいかない・・・。エラーが出て進まない。
いろいろ調べると、この/path/to/
というのが曲者で、パスをCドライブからの絶対パスでも、相対パスでもダメ、そのまま/path/to/
と記載してももちろんダメで、いろいろやっても、以下のようなエラーで先に進まない。
Unsafe file name
Impossible to open
結果的にはC:ffmpeg\bin
配下に動画を置いている場合は、以下のように記載するのが正解。
file /ffmpeg/bin/aaa.mp4
file /ffmpeg/bin/bbb.mp4
なんかよくわからないけど、Cドライブを示すC:
は不要らしい・・・
そして、\
(Windows上では円マーク)ではなく、/
を使用するらしい。
試してないけど、LinuxやMACでやってたらこんな苦労しなかったのかな?
2ファイルの結合がうまくいったので、mylist.txtに16ファイル分を列挙し、以下のコマンドを実行。
ffmpeg -safe -0 -f concat -i mylist.txt -c copy all.mp4
無事、1日分のあさがおの成長を見ることに成功!
あさがおの種って、1日でこんなに成長するのか!?
でも、Qiitaでは動画を添付できない・・・。