毎日モザイク

White Room Layout Works

2016-02-25T07:34:20+09:00 [Thu]
--> [日常]

動画ファイルから等間隔にスクリーンショットを撮る

こちら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