TOC
何回も実行すると引数が多くて面倒だし間違えかねないffmpeg
動画関連の色々なことができるffmpegですが、何をするにも引数が多くてたまに引数の順序が決まってるものがあるので、繰り返し実行するのが面倒だなとなっており、aliasにすることにしました。弊blogで久々の小ネタです。
【小ネタ】mkdirした後にそのディレクトリにcdするエイリアスを作る
前提として、aptか何かでffmpegをインストールしてください。
ffmpegで180°回転させる方法は2種類ある
割と需要のあるコマンドのようで、回転させる方法は2つ見つかります(手元でエラーが出なかったもの)
$ ffmpeg -i input.mp4 -vf "hflip,vflip" -c:a copy output.mp4
$ ffmpeg -i input.mp4 -vf "transpose=2,transpose=2" -c:a copy output.mp4
前者は水平回転と垂直回転、後者は90°回転を2回繰り返すということのようです。後者は90°回転させたい場合はtranspose=2
を1回、270°回転なら3回にすれば良さそうです。今回は見た目のわかりやすさから前者を使っています。
再エンコードがかかっているかは不明(情報では再エンコードしないことになっている)
上記の2つの180°回転、書き方が違うけど結果に違いが出るのでは?と思ってどちらも試しましたが、どちらも実行結果のファイルサイズは変わりませんでしたので、2つのコマンドは等価であると判断しています。
ただ、ffmpegのビデオフィルタの仕組みをよく知らないんですが、元の動画ファイルと180°回転した動画ファイルでサイズは変わります。しかも
- mp4ファイルの場合、少し小さくなる(メタ情報を削除したのかな?)
- webmファイルの場合、結構大きくなる(??)
という事象に遭遇しており、手元の結果では再エンコードしないとは言い切れないと考えています。動画フォーマットによるのかもしれません。
aliasにする
~/.bash_aliases
に以下の内容を追記します。
rotate180() {
time nice ffmpeg -i "$1" -vf "hflip,vflip" -c:a copy _"$1"
}
alias rotate180="rotate180"
出力ファイル名を指定するのが面倒なので、引数の入力ファイル名の先頭に_を付けることで出力ファイル名にしています。出力ファイル名を実行時に指定する場合は_"$1"
を$2
に変更します。また、処理に結構時間がかかるので、timeで時間を計測するのとniceで他のコマンド実行の邪魔に極力ならないようにしています。
あとはこれが反映されるように別ターミナルを開くなり、bashを実行するなりしてrotate180
を実行するだけです。引数は入力動画ファイル名、出力ファイル名を$2にしている場合は出力ファイル名も必要です。
~/.bash_aliasesがないtermuxのための~/.bashrc
aliasとしての記述は終わりなのですが、便利なのでスマホでもやろうと思って~/.bash_aliasesを書いてみたところ、bashログインでも反映されずどうしたことかと思って確認したところtermuxでは~/.bashrc自体がなかったので、以下の内容で作成しました。
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
export PATH="/data/data/com.termux/files/home/bin:$PATH"
スポンサーリンク
comments powered by Disqus