2018年2月9日金曜日

古い動画ファイルを整理した#2

昨日、mp4v2-utilsで.mp4のメタデータを変更できることがわかったので、早速やってみた。
Lubuntuでは、mp4v2-utilsがデフォルトでは入っていないので、まずはinstallする。

mp4infoで現在の情報が表示され、mp4tagsでメタデータを書き換える。
試しにいろいろ書き換えていると、ffprobeで表示される"encoder:"の値は、'-E'で書き換えられることがわかった。
ここまでできれば、あとは「えいやー」でやればいいだけだ。

まずは、それぞれの元ファイルから"encoder:"メタデータを取得する。
元データのディレクトリに移動して、以下を実行する(1行で書いている。かなり横に長い。)。
$ cd <元データのディレクトリ(squashfsのマウントポイント)>
$ find . -iname "*.AVI" -type f | while read n; do echo -e "$n\t$(ffprobe  $n 2>&1 | grep encoder | sed -e 's/ \+encoder \+: \+//g')"; done | tee >( sort | xz -T0 -0c > ~/video_encoder.txt.xz)

これで、video_encoder.txt.xz に、.AVIの相対パスと"encoder:"メタデータの内容が、タブ区切りで入る。
teeの後ろの">"と"("の間にスペースを入れてはいけない。これは自動パイプなので。
テキストファイルで作っても良いのだが、最近はなんとなくxz圧縮してしまう。大量のデータが出てくるとき書き込みがボトルネックになる事がある。プリセットレベル'-0'は最速だが、圧縮率は低い。しかし、テキストデータ、特に今回のようにパス名が同じになるようなデータは、圧縮が効きやすく充分に小さくなる。
出力をパイプで処理してしまうと、途中経過が把握できなくなってしまうので、teeで受けて、自動パイプを使ってxz圧縮している。
ちょっとした工夫だが、途中結果を見る事と結果の圧縮ファイル化を同時に行うことができる。

次にコピー(変換)先のディレクトリに移動して、以下を行う。
$ cd <変換先のディレクトリ>
$ xzcat ~/video_encoder.txt.xz | while read n; do file=$(echo "$n"| cut -f1 | sed -e "s/\.AVI$/.mp4/g"); encoder=$(echo "$n"| cut -f2); echo "$file"; mp4tags -E "$encoder" $file; done | tee >(xz -T0 -0c > ~/video_encoder_change_result.txt.xz)
これで、すべて書き換わる。454ファイルあったが、1分かからずに終わった。

以下のようにすれば確認できる。
$ xzcat ~/video_encoder.txt.xz | while read n; do file=$(echo "$n"| cut -f1 | sed -e "s/\.AVI$/.mp4/g"); encoder=$(echo "$n"| cut -f2); echo "$file"; mp4info "$file"; done | tee >( xz -0c > ~/video_encoder_changed.txt.xz)
結果がどんどん流れて、スクロールアウトしてしまうが、~/video_encoder_changed.txt.xz に書き出しているので、後からじっくり見ればいい。


話が前後するが、昨日のbashのshell-scriptも、あれだけでは複数のファイルを処理することはできない。
今回と同じように、.AVIファイルの相対パスを取得し、パスや拡張子をsed等で加工して、あのshell-scriptの引数を動的に作成して処理した。


全部うまく行ったように思えるが、実は問題がある。

ファイルのタイムスタンプだ。メタデータを書き換えたために書き換わってしまう。
動画データには、"creation_time"があるので、それで書き換えれば良いのだが、どういうわけか動画データの時刻がJST(日本標準時)だったりUTC(協定世界時)だったりしている。
そのため、馬鹿の一つ覚えで一気に処理できない。

なぜこんなことになったのか、今のところよくわかっていない。
とりあえず、JSTとして全部処理したが、原因をよく調べてから処理し直す。
.mp4にcreation_time:も書き込んであるので、情報が一元管理されており、古いファイルから情報を引き出す必要はない。多少は楽だ。また、古いファイルが失われたとしても、問題ない。

一応、古い写真や動画の移行が終わった。TVでもそれらを見ることができるようになった。

0 件のコメント:

コメントを投稿