観賞用に4k動画をfullHDに変換

4Kテレビを購入したもののなかなか4Kのコンテンツがなかったということもあり、子供の成長を動画で撮るために4Kビデオカメラを購入しました。

ただ、いざ4K動画を4Kテレビで見ようとすると、ビデオを直接テレビ繋いだりしないと表示できず、かなり取り回しが悪いです。NASに4K動画を置いておいてそれをDLNAでテレビで閲覧ということは自分の環境ではできませんでした。

そこで、4K動画は念のため保存しておくとして、観賞用にFullHDに解像度を落とした動画を用意しておくことにしました。基本NASに置きDLNAで鑑賞することを念頭に置いているので、ファイル名から中身がわかると取り回しやすいので、ファイル名を撮影日時に変更することにします。

以下、ASUSTOR NAS AS3102Tで変換した際の手順の覚書になります(詳しい解説は省略)。ASUSTOR NASではデフォルトでffmpegが入っているようで、バージョンは2.8.3のようです。

まず4K動画をASUSTOR NASのフォルダに全部放り込みます。

その後sloginでASUSTOR NASにログインして、対象のフォルダに移動して、以下のようなシェルスクリプトのファイルを作成します。

timestamp.sh

#/bin/sh

ffmpeg -i $1 2>&1 | grep -B 1 "Video" | grep "creation_time" | sed -e "s/^.* \([0-9]*\)-\([0-9]*\)-\([0-9]*\) \([0-9]*\):\([0-9]*\):\([0-9]*\).*$/\1\2\3\4\5\6/"

 

conv.sh

for file in `\find . -name "*.MP4" -maxdepth 1 -type f`; do

    tstamp=`./timestamp.sh $file`

    if [ ! -e $1/$tstamp.mp4 ]; then

        echo $1/$tstamp.mp4

        ffmpeg -i $file -vf scale=-1:1080 -acodec aac -strict -2 $1/$tstamp.mp4

    fi

done

timestamp.shは、指定された動画の撮影日時をyyyymmddhhmmssの形式で出力するスクルプトになります。ffmpegで表示される動画の情報を利用しています。

conv.shは、カレントフォルダ内の拡張しがMP4のファイル全部を、変換するスクリプトです。引数で指定したフォルダに、撮影日時.mp4という形式で出力します。ただし、すでに同名の出力ファイルがある場合変換済みとみなして出力しません。

このうえで、

nohup conv.sh (出力フォルダ) > log.txt &

といったコマンドを打つと変換がはじまりますので、ログアウトして変換が終わるのを待ちます(結構な時間がかかります)

変換後のファイルをUPnP Media Serverで公開することで無事テレビから閲覧できるようになりました。