-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmake_movie
More file actions
executable file
·85 lines (65 loc) · 1.63 KB
/
Copy pathmake_movie
File metadata and controls
executable file
·85 lines (65 loc) · 1.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#!/usr/bin/bash
set -e
EXEC="./build/examples/basic_euclidean"
# executable specific args
EXEC_ARGS=""
OUT_DIR="./out/movie"
FPS=30 # frames per second
EXPOSURE_TIME=$(echo "0.8/${FPS}" | bc -l)
TOTAL_LINE_EXPOSURE_TIME=$(echo "${EXPOSURE_TIME} / 5.0" | bc -l)
SAMPLES=10
SAVE_FREQUENCY=100
RAY_DEPTH=100
RESOLUTION_FACTOR=2 # >= 2 (for ffmpeg to work)
# time/frame independent parameters
FIXED_ARGS="--exposure_time ${EXPOSURE_TIME} --total_line_exposure_time ${TOTAL_LINE_EXPOSURE_TIME} --samples ${SAMPLES} --save_frequency ${SAVE_FREQUENCY} --ray_depth ${RAY_DEPTH} --resolution_factor ${RESOLUTION_FACTOR} ${EXEC_ARGS}"
FRAME_START=0
FRAME_STOP=60
function timestamp {
echo " $(date +%H:%M:%S)"
}
function out {
FRAME=$1
echo "${OUT_DIR}/${FRAME}"
}
function ppm {
FRAME=$1
echo "${OUT_DIR}/${FRAME}.ppm"
}
function png {
FRAME=$1
echo "${OUT_DIR}/${FRAME}.png"
}
function convert2png {
FRAME=$1
pnmtopng $(ppm ${FRAME}) > $(png ${FRAME}) \
&& rm $(ppm ${FRAME})
}
function render_frame {
FRAME=$1
TIME=$(echo "${FRAME}/${FPS}" | bc -l)
echo "frame = ${FRAME}, time = ${TIME}"
${EXEC} \
--out $(out ${FRAME}) \
--time ${TIME} \
${FIXED_ARGS} \
> /dev/null
}
function make_frames {
timestamp
for FRAME in $(seq -f "%05g" ${FRAME_START} ${FRAME_STOP})
do
render_frame ${FRAME}
convert2png ${FRAME}
timestamp
done
}
function make_mp4 {
ffmpeg -r 60 -i $(png "%05d") -vcodec libx264 -pix_fmt yuv420p "${OUT_DIR}/mov.mp4"
}
# ENTRY POINT
make "${EXEC}"
mkdir -p "${OUT_DIR}"
echo "make movie for ${EXEC}:"
make_frames
make_mp4