VLCで複数の動画ファイルを変換するスクリプト その1
サイズを小さくしたい、かつフォーマット(コンテナ形式)を変更したい動画ファイルが大量にあるので、フォルダーに置いておけば自動実行してくれるスクリプトを書いてみることにした。Linux でも Mac でも Bash on Windows でも動くように bash にしたが、いまのところ Bash on Windows のみで実行可能とする。とりあえず、スクリプト内で指定したディレクトリに未変換のファイルがあれば、名前降順に最大10個だけ変換させる仕様にした。Bash on Windows で Windows の VLC を実行させるとファイルシステム空間が 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
参考
- VLC command-line help - VideoLAN Wiki
- VideoLANドキュメント私訳 第八回 変換 - VLCを使った変換についての詳細情報: 白鳥は鳥にあらず
- vlcでMPEG4に変換する - 日々適当
- WSL (Bash on Windows) で Windows のプログラムが実行可能になったので遊んでみた - espresso3389の日記
- Bash on Ubuntu on Windowsからcmd / startを使う - Qiita
- GitHub - xilun/cbwin: Launch Windows programs from "Bash on Ubuntu on Windows" (WSL)
- bashスクリプトでディレクトリ内のファイル一覧とディレクトリ一覧を出力 | VPSサーバーでWebサイト公開 備忘録 ~Linux、MySQLからAJAXまで
- if 文と test コマンド | UNIX & Linux コマンド・シェルスクリプト リファレンス
- bash 例解: 第 2 回 bash による初歩のプログラミングの続編
- Bash 多重ループの抜け方 - ike-daiの日記
- bash 配列まとめ - Qiita
- シェルで変数のインクリメントに expr を使うと100倍遅い件 - Qiita
- ファイルのパスからファイル名を取得するには (basename) | hydroculのメモ
- ファイルパスからファイル名や拡張子を自由に取り出す - ザリガニが見ていた...。
- bashシェルスクリプトで空白がある場合のコマンドは変数にどう記述したらいいのでしょうか? - その他(プログラミング・Web制作) 解決済 | 教えて!goo