Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What is going on with this article?
@r10auto

ffmpegであさがおの成長を見る

はじめに

コロナの影響で小学校が始まらない中、小学校からあさがおの種が届き、その観察をしましょうという課題が出された。
うちの子(小学校2年生)は喜んであさがおの種を植え始め、芽が出るのをその場を離れずにずっと見つめていた。
よし!どうせなら、ビデオカメラで撮影し続けて、それをffmpegで加工し、タイムラプスで再生させてみよう、ということをやったのだがハマりました・・・

機材

  • ビデオカメラ
  • WindowsPC

やったこと

  1. ffmpegのダウンロード
  2. あさがおの種を植えた鉢に向けて、ビデオカメラを設置し、録画する
  3. 録画データをパソコンに取り込み、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ファイルを結合する場合)。

mylist.txt
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配下に動画を置いている場合は、以下のように記載するのが正解。

mylist.txt
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では動画を添付できない・・・。

1
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
r10auto
大規模組み込み系のソフトウェアエンジニアです。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
1
Help us understand the problem. What is going on with this article?