min117の日記

初期desireもち。趣味Mac,メインFedora,仕事xp。

macOS に ffmpeg をインストールして画像の切り出しを試す → エラーが出る時は「brew doctor」

macOSffmpeg をインストールしたい。

fukatsu.tech

 

brew install ffmpeg したらエラーになった。

f:id:min117:20200613155748p:plain

Warning: The following directories are not writable by your user: とのことで、権限の問題らしい。

qiita.com

 

brew doctor で原因調査できるようだ。

f:id:min117:20200613160122p:plain

権限付与して解消。

$ sudo chown -R $(whoami) /usr/local/share/man/man5

f:id:min117:20200613160245p:plain

$ brew install ffmpeg が無事に通った。

 

ffmpegのバージョンを見てみる。

f:id:min117:20200613173247p:plain

 

これで自作の「動画から画像を切り出すスクリプトが動く。

$ ./ffjpgTO3.sh

f:id:min117:20200613174754p:plain

内部でffjpegを使っている。動かしてみる。

$ ./ffjpgTO3.sh 動画名 開始秒 間隔 切り出す画像枚数 y/n

f:id:min117:20200613174933p:plain

 

バッチリ動いた。ほぼ一瞬で動画から10枚の静止画を切り出しできた。

f:id:min117:20200613175055p:plain

f:id:min117:20200613175648j:plain

f:id:min117:20200613175653j:plain

f:id:min117:20200613175658j:plain

f:id:min117:20200613175702j:plain

f:id:min117:20200613175707j:plain

f:id:min117:20200613175712j:plain

f:id:min117:20200613175717j:plain

f:id:min117:20200613175722j:plain

f:id:min117:20200613175726j:plain

f:id:min117:20200613175731j:plain

完璧。

 

参考

sipsコマンドを使って解像度を落とす

$ sips --resampleWidth 300 画像名 --out 出力名.jpg

f:id:min117:20200613175414p:plain

 

ソースはこれ。

f:id:min117:20200613180351p:plain

 

コピペ用

  1 #!/bin/bash

  2 

  3 shopt -s expand_aliases

  4 source ~/.bashrc

  5 

  6 mydate=`date +"%Y%m%d_%H%M%S"`

  7 mypath=`pwd`

  8 

  9 myLOG="$1.log"

 10 myIMGDIR='./'

 11 

 12 #if $# -lt 4

 13 if [[ $# -lt 5 ]]

 14 then

 15     #echo '引数不足 最低4個必要'

 16     echo '引数不足 最低5個必要'

 17     echo 'ffjpgTO 20170528.ts 0 3 10 y/n'

 18     echo '======================================================================'

 19     echo 'ffjpgTO $1の動画.ts の開始 $2秒 から $3秒間隔 で $4枚の画像を切り出す y/n'

 20     echo '======================================================================'

 21     echo 'ffjpgTO 20170528.ts 0 3 10 y ← 末尾$5がyで実行/それ以外は見るだけ'

 22     echo '======================================================================'

 23 

 24     exit

 25 fi

 26 

 27 echo `date` > "$myLOG"

 28 echo '======================================================================================='

 29 echo "$1 の開始 $2 から $3 秒間隔 $4 の画像を切り出します" | tee -a $myLOG

 30 echo '======================================================================================='

 31 

 32 ##### 関数化 #####

 33 # ★ コマンド引数は(いったん変数に入れないと)関数内に引き継がれない

 34 mov="$1"     # for文の中で使うためには一度変数に入れないといけないらしい

 35 sec=$2     # 録画開始秒

 36 itv=$3     # interval 録画の間隔

 37 trn=$4     # turn 何回切り出すか

 38 function ffjpgTO() {

 39     for i in `seq -w 01 $trn`

 40     do

 41         #PICNAME="$1"_"$sec"秒_"$i"枚目.jpg ← $1 とするとうまくいかない(関数内に$1は引き継がれない)

 42         PICNAME="$mov"_"$i"枚目_"$sec"秒.jpg

 43         #ffmpeg -ss 開始秒 -t 1 -r 1 -i "対象動画.ts" -vf scale=1920:1080 -f image2 ./"$i"_%02d.jpg

 44         ffmpeg -ss $sec -t 1 -r 1 -i "$mov" -vf scale=1920:1080 -f image2 "$PICNAME" && \

 45         echo "$PICNAME を切り出しました"

 46         # カウンタをアップ        

 47         ((sec=$sec+$itv))

 48     done

 49 }

 50 

 51 

 52 function ffshow() {

 53     echo ''

 54 }

 55 

 56 

 57 ############### 各フォルダに適用 ################

 58 echo '現在のフォルダ:'$(pwd)

 59 echo '-----------------'

 60 echo '実行:'"$5"

 61 echo '-----------------'

 62 if [[ "$5" = 'y' ]] # -eqは間違い

 63 then

 64     ffjpgTO

 65 else

 66     ffshow

 67 fi