Matthewの備忘録

忘れたときはここを見ろ。何か書いてある。

VLCで複数の動画ファイルを変換するスクリプト その1

 サイズを小さくしたい、かつフォーマット(コンテナ形式)を変更したい動画ファイルが大量にあるので、フォルダーに置いておけば自動実行してくれるスクリプトを書いてみることにした。Linux でも Mac でも Bash on Windows でも動くように bash にしたが、いまのところ Bash on Windows のみで実行可能とする。とりあえず、スクリプト内で指定したディレクトリに未変換のファイルがあれば、名前降順に最大10個だけ変換させる仕様にした。Bash on WindowsWindowsVLC を実行させるとファイルシステム空間が Windows であるので、ファイルシステムを跨ぐ工夫が必要である。また、この仕様では、一度変換後、変換元のファイルを削除しなければ同じファイルを変換してしまう。出来ればプログレスバーかパーセンテージが欲しいが、後日検討にする。とりあえず mp4(H264) に変換する。

スクリプト

#!/bin/bash

vlc="/mnt/c/Program\ Files/VideoLAN/VLC/vlc.exe"
# win_directory は Windows 上の動画が置いてあるディレクトリ。例えば d:\rec など
win_directory="hoga:\hoge"
src_ext="お好みの変換元拡張子"
dst_ext="mp4"
files="/mnt/f/tvrec/*."$src_ext
filearr=()
MAX_FILES=10
file_counter=0

for file_path in $files ; do
        if [ -f $filepath ] ; then
                file_name="${file_path##*/}"
                filearr+=("${file_name%.*}")
                file_counter=$((file_counter + 1))
        fi
        if [ $file_counter -ge $MAX_FILES ] ; then
                break
        fi
done

for i in ${filearr[@]} ; do
        command=$vlc" -I dummy \"$win_directory\\$i.$src_ext\" --sout='#transcode{vcodec=h264,vb=1024,scale=1,deinterlace,audio-sync}:standard{access=file,mux="$dst_ext",dst=\""$win_directory\\$i.$dst_ext\""}' vlc://quit"
        eval $command
done

感想

 久々に sh/bash スクリプトを組んだら、忘れているし、調べなきゃならないしで、疲れた。