動画ファイルから等間隔にスクリーンショットを撮る
こちらhttp://askubuntu.com/questions/684834/need-help-with-mpv-bash-scriptのUbuntu用の回答をOSXで使う。
使うもの
bash –本体
mplayer –動画の尺とかを取る
mpv –主役
rename –無いとめんどくさい
入れるもの
home brewは入れといてください。
brew install mplayer
brew install mpv
brew install rename
使い方
下記のshで bash [下記のスクリプト] [動画ファイル] で、カレントディレクトリに等間隔に100枚撮れます。
下記のshの通り、mplayerだけでやったほうが合理的な気もしますが、mpvのほうが多少速いので、どうせ見えないなら速いほうがいいということでmvp。
エロ関係では非常に便利……でもない。速いし便利そうなんですが、動画も音声も一切の表示をせずにスクリーンショットを撮るので、見せたいカットが撮れている保証は全く無くありません。
もっと細かく割れば…。後からのセレクトの手間を考えると動画を見ながらスクリーンショットをとったほうが早い。
36枚撮りのポジでエロビデオ3本分を撮るのに2000円くらいかかっていた時代に、1本を12コマ(1コマ目はタイトルカット)にまとめる仕事で鍛えぬいたので、見ながら撮る作業は余裕ですし。
使いみちとしては、大雑把なカタログ的なものにしか使えません。
使い所が今ひとつありませんが、OSXで自動で大雑把な静止画リストを作りたいとかいうことが年に1回位はあるので、動いたところでメモ。
#!/usr/bin/env bash ### Global variables filename="$1" ### Error handling if [ -z "${filename}" ]; then echo "ERROR: No video file supplied. Please enter a video file as argument." exit 1; fi NUM_OF_SCREENSHOTS=100 ## 枚数 if [ ! -z "$2" ]; then NUM_OF_SCREENSHOTS=$2 echo "WARNING: Overwrite default number of screenshots to ${NUM_OF_SCREENSHOTS}." sleep 3s fi # Get the total length of the video in seconds. # Use mplayer to display the info of the video and then get the value of ID_LENGTH, the total number of seconds of the video. # 訳)Mplayerを使って、動画ファイルの尺を測るよ。 total_length=$(mplayer -identify -frames 0 -vc null -vo null -ao null "$filename" | grep ID_LENGTH | sed 's/ID_LENGTH=//' | sed 's/\..*//') # Reference https://github.com/mpv-player/mpv/blob/master/TOOLS/mpv_identify.sh # Remove 4 seconds from the video so that it doesn't take screenshot at the ends. # 末尾から4秒端折るよ let total_length-=4 # time_slice: At which time interval should mplayer take screenshots. # 間隔を決めるよ let time_slice=${total_length}/${NUM_OF_SCREENSHOTS} # time_at: When should mplayer take screenshots. time_at=${time_slice}; # Looping to take screenshots. # 等間隔スクリーンショット開始 for ((i=1; i <= NUM_OF_SCREENSHOTS ; i++)) do # Take the screenshot. #mplayer -loop 1 -nosound -frames 1 -ss ${time_at} -vo png:z=9 ${filename} #mplayerの人はこっち mpv --quiet --no-audio --vo=image --start=${time_at} --frames=1 "$filename" #mpvの人はこっち rename 's/^[0-9]+/out'"${time_at}"'/' 00000001.jpg # Increment to the next time slice. let time_at+=${time_slice} done exit 0