kenkino’s diary

おそらく技術・グッズ・自転車系 ※当ブログは、Amazonアソシエイトやその他アフィリエイト等の収益メディアを表示しております。

デジタルビデオカメラの収録動画をMacのターミナルだけでmp4に変換する

内容

対面イベントが復活し始めた

これまで3年にわたって人の行動に制限を与えていたコロナの扱いがワクチンの開発や治療薬等の対症療法以外に効果的な手段が出てきたためインフルエンザと同じ扱い(勘違いしてはイケないのが、収束したのではなく対応方法が分かってきたからという点)となりそれに伴ってこれまで自粛気味だった対面イベントが復活し始めてきている、これまでオンラインばかりで、オンラインならではの良さもあったがやはり対面でないとという点もあり対面のイベントが行えるようになってきたというのはいいのだが、それに伴って元々あった問題も復活してきている。

収録動画どうしてます?

自分は、現在もいくつかのイベントでボランティアスタッフとして会場の設営やらセミナー会場の技術的トラブルの対応やセミナー動画の収録・配信をやっている。

その場合、問題になってくるのが収録した動画の公開である。

オンラインもしくはハイブリッド開催であった場合はオンラインミーティングシステムで動画を収録しておけば、イベント終了後に収録した動画を動画配信サービスにアップすればいいだけの話である。

しかし、諸々の事情(会場内に配信用のネットワークが引けなかったり、配信用の設備を持ち込めない)によりデジタルビデオに収録して収録した動画をPC等で編集してアップロードするのだが、これがかなり手間のかかかる作業となる。

具体的には

  1. デジタルビデオ内の記録媒体(SDカード等)を編集用PCに接続

  2. 動画編集ソフトを立ち上げて、収録した動画を取り込み・編集

3.動画配信サービスに対応した動画ファイル形式に変換してアップロード

という手順となるのだが、動画編集ソフトというのが曲者でGUIで操作ができて使いやすくはあるのだがかなりのマシンパワーを消費する上、動作が重いだけならまだしも時には動画の編集途中や変換途中で無反応となったりいきなりソフトが落ちたりして折角の作業が振り出しに戻るということも多いのである。

よく「動画編集は大変」というが、その理由のかなりの部分が動画編集ソフトに起因するのではないだろうか。

どうにかならないかというと

先に書いたように、デジタルビデオから収録動画を動画配信サービスにアップロードするのはかなり大変なのだが「何とかならないか?」かというと下記のような条件であればかなりアッサリと解決する方法がある、条件というのは

  • デジタルビデオに収録した動画を動画配信サービスに対応した動画ファイル形式に変換するだけ

  • 動画の切り出しは秒単位

という条件で、この場合であればかなりの手間を省ける方法があるのである。

これからその方法を説明していこうと思う。

macコマンドライン版動画変換アプリケーションのインストール

まずは、macのターミナルで動画変換を行うアプリケーションをインストールする使うソフトはオープンソースFFmpegというソフトである。

ffmpeg.org

インストール方法としてはいくつかあるのだが、今回はmacのパッケージ管理ソフトを使用してインストールを行う、例としてはHomebrewを使った方法であるが、MacPorts等のmacで使えるパッケージソフト管理アプリなら問題はないと思う

% brew install ffmpeg 

デジタルビデオの動画の実体を探す

次にデジタルビデオの動画ファイルを持ってくる。

動画編集ソフトで編集を行う際に「AVCHD」というものを探して読み込みと動画編集を行なっていると思うが実体はどういうものかはご存知だろうか?

Macに接続したSDカードをターミナルで開いてみてみるとこうなっている

% df -h
Filesystem          Size    Used   Avail Capacity iused ifree %iused  Mounted on
~~ 中略 ~~
/dev/disk4s1        29Gi    20Gi   9.0Gi    69%       1     0  100%   /Volumes/JVCCAM_SD

「/Volumes/JVCCAM_SD」というのが今回接続されたデジタルビデオカメラのSDカードである。 ここに移動して中を見てみよう。

% cd /Volumes/JVCCAM_SD
 % ls
DCIM    EXTMOV  PRIVATE

二つのディレクトリがあるがDCIMというディレクトリが動画関係を保管しているディレクトリになる。 そこに移動して中をみてみるとこういうのが見えてくる。

% ls -l
drwx------@ 1 hogeuser  staff  32768 11  3 09:27 AVCHD
-rwx------  1 hogeuser  staff      8  2 20  2015 AVCID.DAT
-rwx------  1 hogeuser  staff      8  2 20  2015 DCFID.DAT
drwx------  1 hogeuser  staff  32768  2 20  2015 JVC

ディレクトリとして「AVCHD」というディレクトリが出てくる、つまり動画編集ソフトで出てくる「AVCHD」というのは動画ファイルではなくディレクトリなのである。

そこから更にディレクトリを辿っていくとこうなってくる

% cd AVCHD 
% ls -l
drwx------  1 hogeuser  staff  32768  9  5  2015 AVCHDTN
drwx------@ 1 hogeuser  staff  32768  2 20  2015 BDMV
% cd AVCHDTN
% ls
BACKUP  CLIPINF INDEX.BDM   MOVIEOBJ.BDM  PLAYLIST  STREAM
% ls -l
drwx------  1 hogeuser  staff  32768  2 20  2015 BACKUP
drwx------  1 hogeuser  staff  32768  2 20  2015 CLIPINF
-rwx------  1 hogeuser  staff    614 10 31 12:27 INDEX.BDM
-rwx------  1 hogeuser  staff     82 10 31 12:27 MOVIEOBJ.BDM
drwx------  1 hogeuser  staff  32768  2 20  2015 PLAYLIST
drwx------  1 hogeuser  staff  32768  2 20  2015 STREAM
% cd STREAM 
 % ls -lh
-rwx------  1 hogeuser  staff   3.9G 8 20 13:14 00047.MTS
-rwx------  1 hogeuser  staff   3.9G 8 20 14:01 00048.MTS
-rwx------  1 hogeuser  staff    74M 8 20 14:01 00049.MTS
-rwx------  1 hogeuser  staff   3.9G 8 20 15:00 00050.MTS
-rwx------  1 hogeuser  staff   3.9G 8 20 15:46 00051.MTS
-rwx------  1 hogeuser  staff   3.9G 8 20 16:33 00052.MTS
-rwx------  1 hogeuser  staff   388M 8 20 16:37 00053.MTS

辿っていくと末尾が「*.MTS」という表記のファイルが入ったディレクトリがあると思うが、そこにある「 *.MTS」というファイルが動画ファイルの実体である。

これらをmac本体のストレージ、もしくは編集用の外付けSSDもしくはHDDにコピーする。 パフォーマンスを考えるならSSDにコピーすると良いだろう。

動画ファイルの結合

持ってきた動画ファイルだがサイズが3.9GBになっているファイルと、それ以下のファイルがあることにお気づきだろうか? 実はSDカードのフォーマット形式により一つのファイルサイズの上限は4GBまでと決まっており、収録中にファイルが上限に近づくと新しいファイルを作成してそこに動画データを保存するということを行なっている。

これを一続きの動画ファイルにする。先ほどの一覧を見ると

% ls -lh
-rwx------  1 hogeuser  staff   3.9G 8 20 13:14 00047.MTS
-rwx------  1 hogeuser  staff   3.9G 8 20 14:01 00048.MTS
-rwx------  1 hogeuser  staff    74M 8 20 14:01 00049.MTS ← 3.9GBより小さい
-rwx------  1 hogeuser  staff   3.9G 8 20 15:00 00050.MTS
-rwx------  1 hogeuser  staff   3.9G 8 20 15:46 00051.MTS
-rwx------  1 hogeuser  staff   3.9G 8 20 16:33 00052.MTS
-rwx------  1 hogeuser  staff   388M 8 20 16:37 00053.MTS ← 3.9GBより小さい

二つ3.9GBより小さいファイルがあり、これから考えると

動画1: 00047.MTS 00048.MTS 00049.MTS

動画2: 00050.MTS 00051.MTS 00052.MTS 00053.MTS

が一続きの動画ファイルと考えられるのでそれらを一つにする、どうするかというとcatコマンドで展開して出力をファイルに保存するだけで完了する。

※一つのコマンドの終了に時間がかかることがあるので注意

% cat 00047.MTS 00048.MTS 00049.MTS > movie_01.MTS
% cat 00050.MTS 00051.MTS 00052.MTS 00053.MTS > movie_02.MTS

そうすると下記のようになると思う

% ls -lh
-rwx------  1 hogeuser  staff   3.9G 8 20 13:14 00047.MTS
-rwx------  1 hogeuser  staff   3.9G 8 20 14:01 00048.MTS
-rwx------  1 hogeuser  staff    74M 8 20 14:01 00049.MTS
-rwx------  1 hogeuser  staff   3.9G 8 20 15:00 00050.MTS
-rwx------  1 hogeuser  staff   3.9G 8 20 15:46 00051.MTS
-rwx------  1 hogeuser  staff   3.9G 8 20 16:33 00052.MTS
-rwx------  1 hogeuser  staff   388M 8 20 16:37 00053.MTS
-rwx------  1 hogeuser  staff   7.9G 8 20 17:01 movie_01.MTS
-rwx------  1 hogeuser  staff   12G 8 20 17:06 movie_02.MTS

そして結合した動画ファイルを、動画のサイズが気になるのなら別の動画ファイル形式に変換していく

※ 追記:当初はここから先も必要だと思っていたのですが、この記事をアップした後「結合した状態だけでアップできますよ」との指摘があり、ただ動画共有サイトにアップしたいのでしたら上記作業のみで大丈夫な様です。Kさんありがとうございました。

結合ファイルの変換

動画共有サイトにアップロードできる動画ファイル形式への変換だが先にインストールしたffmpegを使っていく基本的には下記のようなコマンドになる

% ffmpeg -i movie_01.MTS -vcodec h264 movie_01.mp4

このコマンドはGPUを使用することも可能で、下記オプションを追加するとGPUを使った変換も可能となる、この場合通常と比べると3〜4倍くらいのスピードで変換が行われる。

% ffmpeg -i move_01.MTS -vcodec h264_videotoolbox movie_01.mp4

画質を落とさずに変換することも -c copyをついかすることで可能となる、この場合サイズは元の動画と同じサイズになるが、変換がかなり早くなる

% ffmpeg -i movie_01.MTS -vcodec h264 -c copy movie_01.mp4

また、動画の一部を切り出したいという場合、-ssオプションで切り出しを開始する秒数を-tオプションで切り出す部分の秒数を指定することで可能である

% ffmpeg -ss 3600 -i movie_01.MTS -t 900 -vcodec h264 -c copy movie_01_15min.mp4

※ 上記例は動画の開始1時間(3600秒)から15分(900秒)部分を切り出すという意味合いになる。

変換後は、変換した動画ファイルを動画教諭サービスにアップロードすればよい。

ターミナルで処理を行うことの利点

以上動画変換をコマンドラインで行う方法を書いてきたが「ただGUIでやっていたことをコマンドに置き換えただけなのでは?」と思う方もいるかもしれないが、これをするだけでかなり大きく違ってくるのだ。

変換ソフトが応答不能になったり落ちたりしない

まずは編集ソフトがほぼほぼ落ちたりしないということである。

GUIの動画編集ソフトを使っていた方は経験があるかと思うのだが、編集を行っている最中に編集ソフトが応答しなくなったり途中で落ちてしまうといったことがある、しかしコマンドラインベースで行った場合はほぼほぼ落ちることもなく変換が行える。

恐らくGUIの編集ソフトの場合、編集中の動画を表示する部分やその他の機能がかなりマシンに負担をかけているのではと考えられる。CUIだとそういった負担が存在しないため応答不能や落ちたりすることなく処理ができるためと考えられる。

変換中に編集を行っているマシンで別の作業ができる

負担が少ないということは別の利点がある。

通常GUIの動画編集ソフトで変換を行っているとそのマシンで別の作業を行おうとしても重くて作業が行えないことがあるのだが、この方法だとターミナルで変換コマンドを実行した後別の作業を行なっていても問題なく作業が行える。

なのでいままで編集用と作業用と分けていた場合は変換のみを行うのであれば一台で変換を行いつつ別の作業を行えるということで、空いたマシンを別の作業に使ったりすることも可能となる。

変換速度が早い

これは正確に時間を測っていたわけではないのだが、CUIで変換を行うと圧倒的に早く変換を行うことが可能になる。

感覚的にはGUI動画編集ソフトで2〜3時間かかっていた作業が大体30分〜1時間、もっと早い場合は10〜20分で終わる場合があったりで圧倒的に早く処理が終わる。 これまで1日がかりだった作業が2〜3時間で終わってしまうこともあったりで、作業の負担軽減等にかなり効果があると思う。

まとめ

ということでMacのターミナルでデジタルビデオカメラの動画を変換する方法を紹介したが、今回紹介したcatコマンドについてはLinuxffmpegコマンドはmacだけでなくLinuxwindowsでも使うことが可能である、LinuxWindowsであればもっと協力なCPUやGPUを搭載しているマシンもあったりするのでそちらを使えば更に早く作業を行えるのではと思う。

これまでデジタルビデオで収録した動画を動画共有サービスにアップロードするのに苦戦していた方がいたら試していただければと思う。