Last active 1629393043

Code to make your own Black Mirror: Bandersnatch

Alyssa Smith revised this gist 1629429043. Go to revision

1 file changed, 250 insertions

timestamps.sh(file created)

@@ -0,0 +1,250 @@
1 + ffmpeg -i bandersnatch.mkv -ss 5 -t 153.52 1A.mkv 2>/dev/null
2 + ffmpeg -ss 00:02:28.560 -i bandersnatch.mkv -ss 5 -t 53.72 1E.mkv 2>/dev/null
3 + ffmpeg -ss 00:03:22.280 -i bandersnatch.mkv -ss 5 -t 274.12 1H.mkv 2>/dev/null
4 + ffmpeg -ss 00:07:56.400 -i bandersnatch.mkv -ss 5 -t 89.96 8A.mkv 2>/dev/null
5 + ffmpeg -ss 00:09:26.360 -i bandersnatch.mkv -ss 5 -t 139.92 1HA.mkv 2>/dev/null
6 + ffmpeg -ss 00:11:46.280 -i bandersnatch.mkv -ss 5 -t 317.36 1Qtt.mkv 2>/dev/null
7 + ffmpeg -ss 00:17:03.640 -i bandersnatch.mkv -ss 5 -t 196.6 2B.mkv 2>/dev/null
8 + ffmpeg -ss 00:20:20.240 -i bandersnatch.mkv -ss 5 -t 189.84 1R.mkv 2>/dev/null
9 + ffmpeg -ss 00:23:30.080 -i bandersnatch.mkv -ss 5 -t 10.28 3B.mkv 2>/dev/null
10 + ffmpeg -ss 00:23:40.360 -i bandersnatch.mkv -ss 5 -t 31.64 SS13.mkv 2>/dev/null
11 + ffmpeg -ss 00:24:12.000 -i bandersnatch.mkv -ss 5 -t 30.0 3Ax.mkv 2>/dev/null
12 + ffmpeg -ss 00:24:42.000 -i bandersnatch.mkv -ss 5 -t 22.12 3C.mkv 2>/dev/null
13 + ffmpeg -ss 00:25:04.120 -i bandersnatch.mkv -ss 5 -t 68.04 3J.mkv 2>/dev/null
14 + ffmpeg -ss 00:26:12.160 -i bandersnatch.mkv -ss 5 -t 68.68 3R.mkv 2>/dev/null
15 + ffmpeg -ss 00:27:20.840 -i bandersnatch.mkv -ss 5 -t 52.36 3U.mkv 2>/dev/null
16 + ffmpeg -ss 00:28:13.200 -i bandersnatch.mkv -ss 5 -t 40.72 3X.mkv 2>/dev/null
17 + ffmpeg -ss 00:28:53.920 -i bandersnatch.mkv -ss 5 -t 64.12 8B.mkv 2>/dev/null
18 + ffmpeg -ss 00:29:58.040 -i bandersnatch.mkv -ss 5 -t 31.64 SS15.mkv 2>/dev/null
19 + ffmpeg -ss 00:30:29.680 -i bandersnatch.mkv -ss 5 -t 30.0 3Xxa.mkv 2>/dev/null
20 + ffmpeg -ss 00:30:59.680 -i bandersnatch.mkv -ss 5 -t 244.96 3Vfs.mkv 2>/dev/null
21 + ffmpeg -ss 00:35:04.640 -i bandersnatch.mkv -ss 5 -t 19.52 3Y.mkv 2>/dev/null
22 + ffmpeg -ss 00:35:24.160 -i bandersnatch.mkv -ss 5 -t 31.64 SS17.mkv 2>/dev/null
23 + ffmpeg -ss 00:35:55.800 -i bandersnatch.mkv -ss 5 -t 32.96 3Vx.mkv 2>/dev/null
24 + ffmpeg -ss 00:36:28.760 -i bandersnatch.mkv -ss 5 -t 54.24 3Z.mkv 2>/dev/null
25 + ffmpeg -ss 00:37:23.000 -i bandersnatch.mkv -ss 5 -t 153.44 3AH.mkv 2>/dev/null
26 + ffmpeg -ss 00:39:56.440 -i bandersnatch.mkv -ss 5 -t 43.2 4C2.mkv 2>/dev/null
27 + ffmpeg -ss 00:40:39.640 -i bandersnatch.mkv -ss 5 -t 30.2 7A.mkv 2>/dev/null
28 + ffmpeg -ss 00:41:09.840 -i bandersnatch.mkv -ss 5 -t 24.64 7B.mkv 2>/dev/null
29 + ffmpeg -ss 00:41:34.480 -i bandersnatch.mkv -ss 5 -t 14.08 7C.mkv 2>/dev/null
30 + ffmpeg -ss 00:41:48.560 -i bandersnatch.mkv -ss 5 -t 145.76 7D.mkv 2>/dev/null
31 + ffmpeg -ss 00:44:14.320 -i bandersnatch.mkv -ss 5 -t 59.76 7L.mkv 2>/dev/null
32 + ffmpeg -ss 00:45:14.080 -i bandersnatch.mkv -ss 5 -t 31.6 SS51.mkv 2>/dev/null
33 + ffmpeg -ss 00:45:45.680 -i bandersnatch.mkv -ss 5 -t 26.16 R4.mkv 2>/dev/null
34 + ffmpeg -ss 00:46:11.840 -i bandersnatch.mkv -ss 5 -t 207.04 3M.mkv 2>/dev/null
35 + ffmpeg -ss 00:49:38.880 -i bandersnatch.mkv -ss 5 -t 269.68 3N.mkv 2>/dev/null
36 + ffmpeg -ss 00:54:08.560 -i bandersnatch.mkv -ss 5 -t 74.28 8L.mkv 2>/dev/null
37 + ffmpeg -ss 00:55:22.840 -i bandersnatch.mkv -ss 5 -t 31.64 SS20.mkv 2>/dev/null
38 + ffmpeg -ss 00:55:54.480 -i bandersnatch.mkv -ss 5 -t 31.24 3Nx.mkv 2>/dev/null
39 + ffmpeg -ss 00:56:25.720 -i bandersnatch.mkv -ss 5 -t 58.52 3Q.mkv 2>/dev/null
40 + ffmpeg -ss 00:57:24.240 -i bandersnatch.mkv -ss 5 -t 19.16 3S.mkv 2>/dev/null
41 + ffmpeg -ss 00:57:43.400 -i bandersnatch.mkv -ss 5 -t 83.0 ZHw6.mkv 2>/dev/null
42 + ffmpeg -ss 00:59:06.400 -i bandersnatch.mkv -ss 5 -t 81.52 3AC2.mkv 2>/dev/null
43 + ffmpeg -ss 01:00:27.920 -i bandersnatch.mkv -ss 5 -t 51.84 5A.mkv 2>/dev/null
44 + ffmpeg -ss 01:01:19.760 -i bandersnatch.mkv -ss 5 -t 17.36 5H.mkv 2>/dev/null
45 + ffmpeg -ss 01:01:37.120 -i bandersnatch.mkv -ss 5 -t 45.56 5V.mkv 2>/dev/null
46 + ffmpeg -ss 01:02:22.680 -i bandersnatch.mkv -ss 5 -t 47.76 5QA.mkv 2>/dev/null
47 + ffmpeg -ss 01:03:10.440 -i bandersnatch.mkv -ss 5 -t 35.88 5UA.mkv 2>/dev/null
48 + ffmpeg -ss 01:03:46.320 -i bandersnatch.mkv -ss 5 -t 72.64 5AD.mkv 2>/dev/null
49 + ffmpeg -ss 01:04:58.960 -i bandersnatch.mkv -ss 5 -t 78.52 5AF.mkv 2>/dev/null
50 + ffmpeg -ss 01:06:17.480 -i bandersnatch.mkv -ss 5 -t 102.4 8Q.mkv 2>/dev/null
51 + ffmpeg -ss 01:07:59.880 -i bandersnatch.mkv -ss 5 -t 31.6 SS52.mkv 2>/dev/null
52 + ffmpeg -ss 01:08:31.480 -i bandersnatch.mkv -ss 5 -t 38.92 Z7c.mkv 2>/dev/null
53 + ffmpeg -ss 01:09:10.400 -i bandersnatch.mkv -ss 5 -t 26.72 5VA.mkv 2>/dev/null
54 + ffmpeg -ss 01:09:37.120 -i bandersnatch.mkv -ss 5 -t 157.8 5Mp.mkv 2>/dev/null
55 + ffmpeg -ss 01:12:14.920 -i bandersnatch.mkv -ss 5 -t 125.84 8K.mkv 2>/dev/null
56 + ffmpeg -ss 01:14:20.760 -i bandersnatch.mkv -ss 5 -t 60.24 S37A.mkv 2>/dev/null
57 + ffmpeg -ss 01:15:21.000 -i bandersnatch.mkv -ss 5 -t 33.68 R2.mkv 2>/dev/null
58 + ffmpeg -ss 01:15:54.680 -i bandersnatch.mkv -ss 5 -t 118.48 3AD3.mkv 2>/dev/null
59 + ffmpeg -ss 01:17:53.160 -i bandersnatch.mkv -ss 5 -t 113.0 8J.mkv 2>/dev/null
60 + ffmpeg -ss 01:19:46.160 -i bandersnatch.mkv -ss 5 -t 78.4 8JA.mkv 2>/dev/null
61 + ffmpeg -ss 01:21:04.560 -i bandersnatch.mkv -ss 5 -t 31.6 SS57.mkv 2>/dev/null
62 + ffmpeg -ss 01:21:36.160 -i bandersnatch.mkv -ss 5 -t 48.36 R6.mkv 2>/dev/null
63 + ffmpeg -ss 01:22:24.520 -i bandersnatch.mkv -ss 5 -t 229.88 3AF1.mkv 2>/dev/null
64 + ffmpeg -ss 01:26:14.400 -i bandersnatch.mkv -ss 5 -t 129.84 6A.mkv 2>/dev/null
65 + ffmpeg -ss 01:28:24.240 -i bandersnatch.mkv -ss 5 -t 87.96 6C.mkv 2>/dev/null
66 + ffmpeg -ss 01:29:52.200 -i bandersnatch.mkv -ss 5 -t 45.32 8D.mkv 2>/dev/null
67 + ffmpeg -ss 01:30:37.520 -i bandersnatch.mkv -ss 5 -t 54.4 1D.mkv 2>/dev/null
68 + ffmpeg -ss 01:31:31.920 -i bandersnatch.mkv -ss 5 -t 276.12 1G.mkv 2>/dev/null
69 + ffmpeg -ss 01:36:08.040 -i bandersnatch.mkv -ss 5 -t 140.6 1GA.mkv 2>/dev/null
70 + ffmpeg -ss 01:38:28.640 -i bandersnatch.mkv -ss 5 -t 317.36 1Qnw.mkv 2>/dev/null
71 + ffmpeg -ss 01:43:46.000 -i bandersnatch.mkv -ss 5 -t 40.72 3Xcd.mkv 2>/dev/null
72 + ffmpeg -ss 01:44:26.720 -i bandersnatch.mkv -ss 5 -t 272.72 3Wff.mkv 2>/dev/null
73 + ffmpeg -ss 01:48:59.440 -i bandersnatch.mkv -ss 5 -t 154.68 3AB.mkv 2>/dev/null
74 + ffmpeg -ss 01:51:34.120 -i bandersnatch.mkv -ss 5 -t 32.92 7H.mkv 2>/dev/null
75 + ffmpeg -ss 01:52:07.040 -i bandersnatch.mkv -ss 5 -t 15.4 7K.mkv 2>/dev/null
76 + ffmpeg -ss 01:52:22.440 -i bandersnatch.mkv -ss 5 -t 31.6 SS56.mkv 2>/dev/null
77 + ffmpeg -ss 01:52:54.040 -i bandersnatch.mkv -ss 5 -t 20.68 8Aa.mkv 2>/dev/null
78 + ffmpeg -ss 01:53:14.720 -i bandersnatch.mkv -ss 5 -t 31.6 SS10.mkv 2>/dev/null
79 + ffmpeg -ss 01:53:46.320 -i bandersnatch.mkv -ss 5 -t 38.12 1PA.mkv 2>/dev/null
80 + ffmpeg -ss 01:54:24.440 -i bandersnatch.mkv -ss 5 -t 37.4 1QA.mkv 2>/dev/null
81 + ffmpeg -ss 01:55:01.840 -i bandersnatch.mkv -ss 5 -t 116.6 1GB.mkv 2>/dev/null
82 + ffmpeg -ss 01:56:58.440 -i bandersnatch.mkv -ss 5 -t 22.52 1QB.mkv 2>/dev/null
83 + ffmpeg -ss 01:57:20.960 -i bandersnatch.mkv -ss 5 -t 26.56 3L.mkv 2>/dev/null
84 + ffmpeg -ss 01:57:47.520 -i bandersnatch.mkv -ss 5 -t 31.76 ZP.mkv 2>/dev/null
85 + ffmpeg -ss 01:58:19.280 -i bandersnatch.mkv -ss 5 -t 34.24 ZJ.mkv 2>/dev/null
86 + ffmpeg -ss 01:58:53.520 -i bandersnatch.mkv -ss 5 -t 118.48 3AD.mkv 2>/dev/null
87 + ffmpeg -ss 02:00:52.000 -i bandersnatch.mkv -ss 5 -t 53.92 3AK.mkv 2>/dev/null
88 + ffmpeg -ss 02:01:45.920 -i bandersnatch.mkv -ss 5 -t 43.2 4C1.mkv 2>/dev/null
89 + ffmpeg -ss 02:02:29.120 -i bandersnatch.mkv -ss 5 -t 16.12 ZMC.mkv 2>/dev/null
90 + ffmpeg -ss 02:02:45.240 -i bandersnatch.mkv -ss 5 -t 62.52 6B.mkv 2>/dev/null
91 + ffmpeg -ss 02:03:47.760 -i bandersnatch.mkv -ss 5 -t 72.68 6D.mkv 2>/dev/null
92 + ffmpeg -ss 02:05:00.440 -i bandersnatch.mkv -ss 5 -t 45.32 8Da.mkv 2>/dev/null
93 + ffmpeg -ss 02:05:45.760 -i bandersnatch.mkv -ss 5 -t 174.36 2Bt1.mkv 2>/dev/null
94 + ffmpeg -ss 02:08:40.120 -i bandersnatch.mkv -ss 5 -t 169.84 2Bp2.mkv 2>/dev/null
95 + ffmpeg -ss 02:11:29.960 -i bandersnatch.mkv -ss 5 -t 31.08 2GA.mkv 2>/dev/null
96 + ffmpeg -ss 02:12:01.040 -i bandersnatch.mkv -ss 5 -t 174.36 2Bp1.mkv 2>/dev/null
97 + ffmpeg -ss 02:14:55.400 -i bandersnatch.mkv -ss 5 -t 169.84 2Bt2.mkv 2>/dev/null
98 + ffmpeg -ss 02:17:45.240 -i bandersnatch.mkv -ss 5 -t 9.96 3LA.mkv 2>/dev/null
99 + ffmpeg -ss 02:17:55.200 -i bandersnatch.mkv -ss 5 -t 244.96 3Vff.mkv 2>/dev/null
100 + ffmpeg -ss 02:22:00.160 -i bandersnatch.mkv -ss 5 -t 242.28 3Vbf.mkv 2>/dev/null
101 + ffmpeg -ss 02:26:02.440 -i bandersnatch.mkv -ss 5 -t 242.28 3Vbs.mkv 2>/dev/null
102 + ffmpeg -ss 02:30:04.720 -i bandersnatch.mkv -ss 5 -t 269.52 3Wbf.mkv 2>/dev/null
103 + ffmpeg -ss 02:34:34.240 -i bandersnatch.mkv -ss 5 -t 269.52 3Wbs.mkv 2>/dev/null
104 + ffmpeg -ss 02:39:03.760 -i bandersnatch.mkv -ss 5 -t 272.72 3Wfs.mkv 2>/dev/null
105 + ffmpeg -ss 02:43:36.480 -i bandersnatch.mkv -ss 5 -t 87.04 3AC.mkv 2>/dev/null
106 + ffmpeg -ss 02:45:03.520 -i bandersnatch.mkv -ss 5 -t 36.12 ZK1.mkv 2>/dev/null
107 + ffmpeg -ss 02:45:39.640 -i bandersnatch.mkv -ss 5 -t 55.24 3AL.mkv 2>/dev/null
108 + ffmpeg -ss 02:46:34.880 -i bandersnatch.mkv -ss 5 -t 36.12 ZK2.mkv 2>/dev/null
109 + ffmpeg -ss 02:47:11.000 -i bandersnatch.mkv -ss 5 -t 118.48 3AD1.mkv 2>/dev/null
110 + ffmpeg -ss 02:49:09.480 -i bandersnatch.mkv -ss 5 -t 81.52 3AC1.mkv 2>/dev/null
111 + ffmpeg -ss 02:50:31.000 -i bandersnatch.mkv -ss 5 -t 149.16 3AB1.mkv 2>/dev/null
112 + ffmpeg -ss 02:53:00.160 -i bandersnatch.mkv -ss 5 -t 149.16 3AB2.mkv 2>/dev/null
113 + ffmpeg -ss 02:55:29.320 -i bandersnatch.mkv -ss 5 -t 101.8 3AJ1.mkv 2>/dev/null
114 + ffmpeg -ss 02:57:11.120 -i bandersnatch.mkv -ss 5 -t 101.8 3AJ2.mkv 2>/dev/null
115 + ffmpeg -ss 02:58:52.920 -i bandersnatch.mkv -ss 5 -t 147.92 3AH2.mkv 2>/dev/null
116 + ffmpeg -ss 03:01:20.840 -i bandersnatch.mkv -ss 5 -t 22.32 ZMB.mkv 2>/dev/null
117 + ffmpeg -ss 03:01:43.160 -i bandersnatch.mkv -ss 5 -t 78.92 3VB.mkv 2>/dev/null
118 + ffmpeg -ss 03:03:02.080 -i bandersnatch.mkv -ss 5 -t 107.32 3AJ.mkv 2>/dev/null
119 + ffmpeg -ss 03:04:49.400 -i bandersnatch.mkv -ss 5 -t 42.2 4D1.mkv 2>/dev/null
120 + ffmpeg -ss 03:05:31.600 -i bandersnatch.mkv -ss 5 -t 147.92 3AH1.mkv 2>/dev/null
121 + ffmpeg -ss 03:07:59.520 -i bandersnatch.mkv -ss 5 -t 36.12 ZK.mkv 2>/dev/null
122 + ffmpeg -ss 03:08:35.640 -i bandersnatch.mkv -ss 5 -t 48.4 3AK2.mkv 2>/dev/null
123 + ffmpeg -ss 03:09:24.040 -i bandersnatch.mkv -ss 5 -t 65.16 ZH.mkv 2>/dev/null
124 + ffmpeg -ss 03:10:29.200 -i bandersnatch.mkv -ss 5 -t 48.76 2Gp1.mkv 2>/dev/null
125 + ffmpeg -ss 03:11:17.960 -i bandersnatch.mkv -ss 5 -t 48.76 2Gt1.mkv 2>/dev/null
126 + ffmpeg -ss 03:12:06.720 -i bandersnatch.mkv -ss 5 -t 44.24 2Gp2.mkv 2>/dev/null
127 + ffmpeg -ss 03:12:50.960 -i bandersnatch.mkv -ss 5 -t 44.24 2Gt2.mkv 2>/dev/null
128 + ffmpeg -ss 03:13:35.200 -i bandersnatch.mkv -ss 5 -t 71.44 2G.mkv 2>/dev/null
129 + ffmpeg -ss 03:14:46.640 -i bandersnatch.mkv -ss 5 -t 188.28 1S.mkv 2>/dev/null
130 + ffmpeg -ss 03:17:54.920 -i bandersnatch.mkv -ss 5 -t 49.72 3AL1.mkv 2>/dev/null
131 + ffmpeg -ss 03:18:44.640 -i bandersnatch.mkv -ss 5 -t 48.4 3AK1.mkv 2>/dev/null
132 + ffmpeg -ss 03:19:33.040 -i bandersnatch.mkv -ss 5 -t 229.88 3AF2.mkv 2>/dev/null
133 + ffmpeg -ss 03:23:22.920 -i bandersnatch.mkv -ss 5 -t 49.72 3AL2.mkv 2>/dev/null
134 + ffmpeg -ss 03:24:12.640 -i bandersnatch.mkv -ss 5 -t 42.2 4D2.mkv 2>/dev/null
135 + ffmpeg -ss 03:24:54.840 -i bandersnatch.mkv -ss 5 -t 235.4 3AF.mkv 2>/dev/null
136 + ffmpeg -ss 03:28:50.240 -i bandersnatch.mkv -ss 5 -t 34.64 3Xac.mkv 2>/dev/null
137 + ffmpeg -ss 03:29:24.880 -i bandersnatch.mkv -ss 5 -t 68.68 3VA.mkv 2>/dev/null
138 + ffmpeg -ss 03:30:33.560 -i bandersnatch.mkv -ss 5 -t 30.52 3Xa.mkv 2>/dev/null
139 + ffmpeg -ss 03:31:04.080 -i bandersnatch.mkv -ss 5 -t 54.2 ZQ.mkv 2>/dev/null
140 + ffmpeg -ss 03:31:58.280 -i bandersnatch.mkv -ss 5 -t 118.48 3AD2.mkv 2>/dev/null
141 + ffmpeg -ss 03:33:56.760 -i bandersnatch.mkv -ss 5 -t 56.56 ZG.mkv 2>/dev/null
142 + ffmpeg -ss 03:34:53.320 -i bandersnatch.mkv -ss 5 -t 115.92 1HB.mkv 2>/dev/null
143 + ffmpeg -ss 03:36:49.240 -i bandersnatch.mkv -ss 5 -t 31.96 8JB1.mkv 2>/dev/null
144 + ffmpeg -ss 03:37:21.200 -i bandersnatch.mkv -ss 5 -t 31.96 8JB2.mkv 2>/dev/null
145 + ffmpeg -ss 03:37:53.160 -i bandersnatch.mkv -ss 5 -t 147.24 5Mpc.mkv 2>/dev/null
146 + ffmpeg -ss 03:40:20.400 -i bandersnatch.mkv -ss 5 -t 147.24 5Mtc.mkv 2>/dev/null
147 + ffmpeg -ss 03:42:47.640 -i bandersnatch.mkv -ss 5 -t 157.16 5Mt.mkv 2>/dev/null
148 + ffmpeg -ss 03:45:24.800 -i bandersnatch.mkv -ss 5 -t 49.96 5Q.mkv 2>/dev/null
149 + ffmpeg -ss 03:46:14.760 -i bandersnatch.mkv -ss 5 -t 29.6 5U.mkv 2>/dev/null
150 + ffmpeg -ss 03:46:44.360 -i bandersnatch.mkv -ss 5 -t 38.0 5R.mkv 2>/dev/null
151 + ffmpeg -ss 03:47:22.360 -i bandersnatch.mkv -ss 5 -t 44.28 5RA.mkv 2>/dev/null
152 + ffmpeg -ss 03:48:06.640 -i bandersnatch.mkv -ss 5 -t 27.68 5S.mkv 2>/dev/null
153 + ffmpeg -ss 03:48:34.320 -i bandersnatch.mkv -ss 5 -t 41.08 5SA.mkv 2>/dev/null
154 + ffmpeg -ss 03:49:15.400 -i bandersnatch.mkv -ss 5 -t 41.16 5TA.mkv 2>/dev/null
155 + ffmpeg -ss 03:49:56.560 -i bandersnatch.mkv -ss 5 -t 79.16 5AG2.mkv 2>/dev/null
156 + ffmpeg -ss 03:51:15.720 -i bandersnatch.mkv -ss 5 -t 47.8 5AH.mkv 2>/dev/null
157 + ffmpeg -ss 03:52:03.520 -i bandersnatch.mkv -ss 5 -t 102.36 8M.mkv 2>/dev/null
158 + ffmpeg -ss 03:53:45.880 -i bandersnatch.mkv -ss 5 -t 92.4 5AC.mkv 2>/dev/null
159 + ffmpeg -ss 03:55:18.280 -i bandersnatch.mkv -ss 5 -t 94.08 8V.mkv 2>/dev/null
160 + ffmpeg -ss 03:56:52.360 -i bandersnatch.mkv -ss 5 -t 50.44 5AC2.mkv 2>/dev/null
161 + ffmpeg -ss 03:57:42.800 -i bandersnatch.mkv -ss 5 -t 94.08 8Va.mkv 2>/dev/null
162 + ffmpeg -ss 03:59:16.880 -i bandersnatch.mkv -ss 5 -t 48.96 R2cd.mkv 2>/dev/null
163 + ffmpeg -ss 04:00:05.840 -i bandersnatch.mkv -ss 5 -t 36.12 ZK3.mkv 2>/dev/null
164 + ffmpeg -ss 04:00:41.960 -i bandersnatch.mkv -ss 5 -t 42.64 5AD2.mkv 2>/dev/null
165 + ffmpeg -ss 04:01:24.600 -i bandersnatch.mkv -ss 5 -t 104.4 5AE.mkv 2>/dev/null
166 + ffmpeg -ss 04:03:09.000 -i bandersnatch.mkv -ss 5 -t 102.4 8Qa.mkv 2>/dev/null
167 + ffmpeg -ss 04:04:51.400 -i bandersnatch.mkv -ss 5 -t 109.16 5AG.mkv 2>/dev/null
168 + ffmpeg -ss 04:06:40.560 -i bandersnatch.mkv -ss 5 -t 56.48 5AJ.mkv 2>/dev/null
169 + ffmpeg -ss 04:07:37.040 -i bandersnatch.mkv -ss 5 -t 85.8 8S.mkv 2>/dev/null
170 + ffmpeg -ss 04:09:02.840 -i bandersnatch.mkv -ss 5 -t 85.8 8Sa.mkv 2>/dev/null
171 + ffmpeg -ss 04:10:28.640 -i bandersnatch.mkv -ss 5 -t 274.4 3P.mkv 2>/dev/null
172 + ffmpeg -ss 04:15:03.040 -i bandersnatch.mkv -ss 5 -t 102.36 8Ma.mkv 2>/dev/null
173 + ffmpeg -ss 04:16:45.400 -i bandersnatch.mkv -ss 5 -t 16.72 7J.mkv 2>/dev/null
174 + ffmpeg -ss 04:17:02.120 -i bandersnatch.mkv -ss 5 -t 52.96 3T.mkv 2>/dev/null
175 + ffmpeg -ss 04:17:55.080 -i bandersnatch.mkv -ss 5 -t 17.32 5G.mkv 2>/dev/null
176 + ffmpeg -ss 04:18:12.400 -i bandersnatch.mkv -ss 5 -t 40.76 5T.mkv 2>/dev/null
177 + ffmpeg -ss 04:18:53.160 -i bandersnatch.mkv -ss 5 -t 46.36 ZB.mkv 2>/dev/null
178 + ffmpeg -ss 04:19:39.520 -i bandersnatch.mkv -ss 5 -t 48.36 Z1.mkv 2>/dev/null
179 + ffmpeg -ss 04:20:27.880 -i bandersnatch.mkv -ss 5 -t 25.84 Z2.mkv 2>/dev/null
180 + ffmpeg -ss 04:20:53.720 -i bandersnatch.mkv -ss 5 -t 26.32 Z3.mkv 2>/dev/null
181 + ffmpeg -ss 04:21:20.040 -i bandersnatch.mkv -ss 5 -t 30.12 Z3cd.mkv 2>/dev/null
182 + ffmpeg -ss 04:21:50.160 -i bandersnatch.mkv -ss 5 -t 37.64 Z4.mkv 2>/dev/null
183 + ffmpeg -ss 04:22:27.800 -i bandersnatch.mkv -ss 5 -t 47.04 Z4cd.mkv 2>/dev/null
184 + ffmpeg -ss 04:23:14.840 -i bandersnatch.mkv -ss 5 -t 59.12 ZD.mkv 2>/dev/null
185 + ffmpeg -ss 04:24:13.960 -i bandersnatch.mkv -ss 5 -t 61.12 ZE.mkv 2>/dev/null
186 + ffmpeg -ss 04:25:15.080 -i bandersnatch.mkv -ss 5 -t 31.64 SS1.mkv 2>/dev/null
187 + ffmpeg -ss 04:25:46.720 -i bandersnatch.mkv -ss 5 -t 31.6 SS2.mkv 2>/dev/null
188 + ffmpeg -ss 04:26:18.320 -i bandersnatch.mkv -ss 5 -t 32.88 R1.mkv 2>/dev/null
189 + ffmpeg -ss 04:26:51.200 -i bandersnatch.mkv -ss 5 -t 31.6 SS3.mkv 2>/dev/null
190 + ffmpeg -ss 04:27:22.800 -i bandersnatch.mkv -ss 5 -t 31.6 SS4.mkv 2>/dev/null
191 + ffmpeg -ss 04:27:54.400 -i bandersnatch.mkv -ss 5 -t 31.6 SS5.mkv 2>/dev/null
192 + ffmpeg -ss 04:28:26.000 -i bandersnatch.mkv -ss 5 -t 31.6 SS6.mkv 2>/dev/null
193 + ffmpeg -ss 04:28:57.600 -i bandersnatch.mkv -ss 5 -t 30.16 R3.mkv 2>/dev/null
194 + ffmpeg -ss 04:29:27.760 -i bandersnatch.mkv -ss 5 -t 31.6 SS7.mkv 2>/dev/null
195 + ffmpeg -ss 04:29:59.360 -i bandersnatch.mkv -ss 5 -t 31.6 SS8.mkv 2>/dev/null
196 + ffmpeg -ss 04:30:30.960 -i bandersnatch.mkv -ss 5 -t 31.6 SS9.mkv 2>/dev/null
197 + ffmpeg -ss 04:31:02.560 -i bandersnatch.mkv -ss 5 -t 31.64 SS11.mkv 2>/dev/null
198 + ffmpeg -ss 04:31:34.200 -i bandersnatch.mkv -ss 5 -t 31.68 SS12.mkv 2>/dev/null
199 + ffmpeg -ss 04:32:05.880 -i bandersnatch.mkv -ss 5 -t 31.64 SS14.mkv 2>/dev/null
200 + ffmpeg -ss 04:32:37.520 -i bandersnatch.mkv -ss 5 -t 30.84 3Xxc.mkv 2>/dev/null
201 + ffmpeg -ss 04:33:08.360 -i bandersnatch.mkv -ss 5 -t 31.64 SS16.mkv 2>/dev/null
202 + ffmpeg -ss 04:33:40.000 -i bandersnatch.mkv -ss 5 -t 31.64 SS18.mkv 2>/dev/null
203 + ffmpeg -ss 04:34:11.640 -i bandersnatch.mkv -ss 5 -t 31.64 SS19.mkv 2>/dev/null
204 + ffmpeg -ss 04:34:43.280 -i bandersnatch.mkv -ss 5 -t 34.56 R5.mkv 2>/dev/null
205 + ffmpeg -ss 04:35:17.840 -i bandersnatch.mkv -ss 5 -t 31.6 SS21.mkv 2>/dev/null
206 + ffmpeg -ss 04:35:49.440 -i bandersnatch.mkv -ss 5 -t 31.6 SS22.mkv 2>/dev/null
207 + ffmpeg -ss 04:36:21.040 -i bandersnatch.mkv -ss 5 -t 31.6 SS50.mkv 2>/dev/null
208 + ffmpeg -ss 04:36:52.640 -i bandersnatch.mkv -ss 5 -t 41.6 R3cd.mkv 2>/dev/null
209 + ffmpeg -ss 04:37:34.240 -i bandersnatch.mkv -ss 5 -t 38.2 R4cd.mkv 2>/dev/null
210 + ffmpeg -ss 04:38:12.440 -i bandersnatch.mkv -ss 5 -t 31.6 SS53.mkv 2>/dev/null
211 + ffmpeg -ss 04:38:44.040 -i bandersnatch.mkv -ss 5 -t 31.6 SS54.mkv 2>/dev/null
212 + ffmpeg -ss 04:39:15.640 -i bandersnatch.mkv -ss 5 -t 31.6 SS55.mkv 2>/dev/null
213 + ffmpeg -ss 04:39:47.240 -i bandersnatch.mkv -ss 5 -t 47.0 R1cd.mkv 2>/dev/null
214 + ffmpeg -ss 04:40:34.240 -i bandersnatch.mkv -ss 5 -t 60.56 S44B.mkv 2>/dev/null
215 + ffmpeg -ss 04:41:34.800 -i bandersnatch.mkv -ss 5 -t 60.6 S34B.mkv 2>/dev/null
216 + ffmpeg -ss 04:42:35.400 -i bandersnatch.mkv -ss 5 -t 60.56 S35B.mkv 2>/dev/null
217 + ffmpeg -ss 04:43:35.960 -i bandersnatch.mkv -ss 5 -t 60.56 S59B.mkv 2>/dev/null
218 + ffmpeg -ss 04:44:36.520 -i bandersnatch.mkv -ss 5 -t 60.56 S36B.mkv 2>/dev/null
219 + ffmpeg -ss 04:45:37.080 -i bandersnatch.mkv -ss 5 -t 60.56 S37B.mkv 2>/dev/null
220 + ffmpeg -ss 04:46:37.640 -i bandersnatch.mkv -ss 5 -t 60.56 S38B.mkv 2>/dev/null
221 + ffmpeg -ss 04:47:38.200 -i bandersnatch.mkv -ss 5 -t 60.24 S38A.mkv 2>/dev/null
222 + ffmpeg -ss 04:48:38.440 -i bandersnatch.mkv -ss 5 -t 60.24 S44A.mkv 2>/dev/null
223 + ffmpeg -ss 04:49:38.680 -i bandersnatch.mkv -ss 5 -t 60.24 S34A.mkv 2>/dev/null
224 + ffmpeg -ss 04:50:38.920 -i bandersnatch.mkv -ss 5 -t 60.24 S59A.mkv 2>/dev/null
225 + ffmpeg -ss 04:51:39.160 -i bandersnatch.mkv -ss 5 -t 60.24 S35A.mkv 2>/dev/null
226 + ffmpeg -ss 04:52:39.400 -i bandersnatch.mkv -ss 5 -t 60.24 S36A.mkv 2>/dev/null
227 + ffmpeg -ss 04:53:39.640 -i bandersnatch.mkv -ss 5 -t 45.4 Z62a.mkv 2>/dev/null
228 + ffmpeg -ss 04:54:25.040 -i bandersnatch.mkv -ss 5 -t 41.6 Z62b.mkv 2>/dev/null
229 + ffmpeg -ss 04:55:06.640 -i bandersnatch.mkv -ss 5 -t 56.92 Z62c.mkv 2>/dev/null
230 + ffmpeg -ss 04:56:03.560 -i bandersnatch.mkv -ss 5 -t 51.8 Z62d.mkv 2>/dev/null
231 + ffmpeg -ss 04:56:55.360 -i bandersnatch.mkv -ss 5 -t 48.52 Z62e.mkv 2>/dev/null
232 + ffmpeg -ss 04:57:43.880 -i bandersnatch.mkv -ss 5 -t 44.76 Z62f.mkv 2>/dev/null
233 + ffmpeg -ss 04:58:28.640 -i bandersnatch.mkv -ss 5 -t 45.4 Z61a.mkv 2>/dev/null
234 + ffmpeg -ss 04:59:14.040 -i bandersnatch.mkv -ss 5 -t 41.6 Z61b.mkv 2>/dev/null
235 + ffmpeg -ss 04:59:55.640 -i bandersnatch.mkv -ss 5 -t 56.92 Z61c.mkv 2>/dev/null
236 + ffmpeg -ss 05:00:52.560 -i bandersnatch.mkv -ss 5 -t 51.8 Z61d.mkv 2>/dev/null
237 + ffmpeg -ss 05:01:44.360 -i bandersnatch.mkv -ss 5 -t 48.52 Z61e.mkv 2>/dev/null
238 + ffmpeg -ss 05:02:32.880 -i bandersnatch.mkv -ss 5 -t 44.76 Z61f.mkv 2>/dev/null
239 + ffmpeg -ss 05:03:17.640 -i bandersnatch.mkv -ss 5 -t 26.4 Z7a.mkv 2>/dev/null
240 + ffmpeg -ss 05:03:44.040 -i bandersnatch.mkv -ss 5 -t 23.0 Z7b.mkv 2>/dev/null
241 + ffmpeg -ss 05:04:07.040 -i bandersnatch.mkv -ss 5 -t 36.6 Z7d.mkv 2>/dev/null
242 + ffmpeg -ss 05:04:43.640 -i bandersnatch.mkv -ss 5 -t 31.64 Z7e.mkv 2>/dev/null
243 + ffmpeg -ss 05:05:15.280 -i bandersnatch.mkv -ss 5 -t 28.0 Z7f.mkv 2>/dev/null
244 + ffmpeg -ss 05:05:43.280 -i bandersnatch.mkv -ss 5 -t 5.56 8KB.mkv 2>/dev/null
245 + ffmpeg -ss 05:05:48.840 -i bandersnatch.mkv -ss 5 -t 5.24 8KA.mkv 2>/dev/null
246 + ffmpeg -ss 05:05:54.080 -i bandersnatch.mkv -ss 5 -t 156.24 0cr3.mkv 2>/dev/null
247 + ffmpeg -ss 05:08:30.320 -i bandersnatch.mkv -ss 5 -t 79.88 0Cr4.mkv 2>/dev/null
248 + ffmpeg -ss 05:09:50.200 -i bandersnatch.mkv -ss 5 -t 51.04 0cr1.mkv 2>/dev/null
249 + ffmpeg -ss 05:10:41.240 -i bandersnatch.mkv -ss 5 -t 78.04 0cr2.mkv 2>/dev/null
250 + ffmpeg -ss 05:11:59.280 -i bandersnatch.mkv -ss 5 IDNT.mkv 2>/dev/null

S Smith revised this gist 1560617459. Go to revision

1 file changed, 2 insertions

bandersnatch.py

@@ -1,3 +1,5 @@
1 + #!/usr/bin/env python3
2 + from __future__ import print_function
1 3 from random import choice
2 4 import json
3 5 from sys import stderr

S Smith revised this gist 1560617399. Go to revision

1 file changed, 1 insertion, 1 deletion

bandersnatch.py

@@ -5,7 +5,7 @@ from sys import stderr
5 5 with open("bandersnatch.json") as f:
6 6 bandersnatch = json.load(f)
7 7
8 - with open("/srv/http/bi/assets/segmentmap.json") as f:
8 + with open("SegmentMap.json") as f:
9 9 smap = json.load(f)
10 10
11 11 initial_state = { "p_sp": True, "p_tt": True, "p_8a": False, "p_td": True, "p_cs": False, "p_w1": False, "p_2b": False, "p_3j": False, "p_pt": False, "p_cd": False, "p_cj": False, "p_sj": False, "p_sj2": False, "p_tud": False, "p_lsd": False, "p_vh": False, "p_3l": False, "p_3s": False, "p_3z": False, "p_ps": "n", "p_wb": False, "p_kd": False, "p_bo": False, "p_5v": False, "p_pc": "n", "p_sc": False, "p_ty": False, "p_cm": False, "p_pr": False, "p_3ad": False, "p_s3af": False, "p_nf": False, "p_np": False, "p_ne": False, "p_pp": False, "p_tp": False, "p_bup": False, "p_be": False, "p_pe": False, "p_pae": False, "p_te": False, "p_snt": False, "p_8j": False, "p_8d": False, "p_8m": False, "p_8q": False, "p_8s": False, "p_8v": False, "p_vs": "n", "p_scs": False, "p_3ab": False, "p_3ac": False, "p_3aj": False, "p_3ah": False, "p_3ak": False, "p_3al": False, "p_3af": False, "p_5h": False, "p_5ac": False, "p_5ag": False, "p_5ad": False, "p_6c": False, "length": 0 }

S Smith revised this gist 1560616261. Go to revision

2 files changed, 45 insertions, 14 deletions

bandersnatch.md

@@ -1,7 +1,7 @@
1 1 Bandersnatch Maker
2 2 ==================
3 3
4 - This is a program I wrote on a live stream on the 14th (and 15th) of June 2019. Video link coming soon.
4 + This is a program I wrote on a live stream on the 14th (and 15th) of June 2019. https://www.twitch.tv/videos/438871676
5 5
6 6 You'll need some things.
7 7
@@ -31,18 +31,47 @@ def msToTS(ms):
31 31 for segment in smap.values():
32 32 ss = ""
33 33 t = ""
34 + # working around ffmpeg seek to previous keyframe
34 35 if segment["startTimeMs"] > 5000:
35 - ss = " -ss " + msToTS(segment["startTimeMs"]-5000)
36 + # 40ms subtracted to account for one frame difference in 25fps source video
37 + ss = " -ss " + msToTS(segment["startTimeMs"]-4960)
36 38 if "endTimeMs" in segment:
37 39 t = " -t {}".format((segment["endTimeMs"]-segment["startTimeMs"])/1000)
38 40 print("""ffmpeg{} -i bandersnatch.mkv -ss 5{} {}.mkv 2>/dev/null""".format(ss, t, segment))
39 41 ```
40 42
41 43 You'll get a bunch of lines to run to generate clips from the full movie. I'd suggest putting these lines into a bash script
42 - and leaving it to run for a while. This will take a very long time.
44 + and leaving it to run for a while in screen or tmux. This will take a very long time dependent on your CPU.
43 45
44 - While that's going, generate some movies! They're produced in ffmpeg concat format, render them with:
46 + While that's going, generate some movies!
45 47
46 48 ```bash
47 - ffmpeg -f concat -i FILENAME.txt -c copy `date +%Y%m%d-%H%M%S.mkv`
49 + $ python bandersnatch.py > concat.txt
50 + picked 1A
51 + out=['1E']
52 + out=['1D']
53 + poss=['1E', '1D']
54 + picked 1D
55 + out=['1H']
56 + out=['1G']
57 + poss=['1H', '1G']
58 + picked 1G
59 + ...
60 + out=['8JA']
61 + out=['8JB1']
62 + poss=['8JA', '8JB1']
63 + picked 8JA
64 + out=['0Cr4', '0cr3']
65 + out=['0Cr4', '0cr3']
66 + poss=['0Cr4', '0cr3']
67 + picked 0Cr4 and added IDNT
68 + 01:04:02.610
69 + ```
70 +
71 + The stderr output displays what choices were possible at each stage, which segment it picked, and the total length of the movie.
72 +
73 + The output file concat.txt is produced in ffmpeg concat format, render it in the same directory as the segment files (e.g IDNT.mkv) with:
74 +
75 + ```bash
76 + ffmpeg -f concat -i concat.txt -c copy `date +%Y%m%d-%H%M%S.mkv`
48 77 ```

bandersnatch.py

@@ -1,11 +1,11 @@
1 1 from random import choice
2 2 import json
3 - #from sys import stderr
3 + from sys import stderr
4 4
5 5 with open("bandersnatch.json") as f:
6 6 bandersnatch = json.load(f)
7 7
8 - with open("SegmentMap.json") as f:
8 + with open("/srv/http/bi/assets/segmentmap.json") as f:
9 9 smap = json.load(f)
10 10
11 11 initial_state = { "p_sp": True, "p_tt": True, "p_8a": False, "p_td": True, "p_cs": False, "p_w1": False, "p_2b": False, "p_3j": False, "p_pt": False, "p_cd": False, "p_cj": False, "p_sj": False, "p_sj2": False, "p_tud": False, "p_lsd": False, "p_vh": False, "p_3l": False, "p_3s": False, "p_3z": False, "p_ps": "n", "p_wb": False, "p_kd": False, "p_bo": False, "p_5v": False, "p_pc": "n", "p_sc": False, "p_ty": False, "p_cm": False, "p_pr": False, "p_3ad": False, "p_s3af": False, "p_nf": False, "p_np": False, "p_ne": False, "p_pp": False, "p_tp": False, "p_bup": False, "p_be": False, "p_pe": False, "p_pae": False, "p_te": False, "p_snt": False, "p_8j": False, "p_8d": False, "p_8m": False, "p_8q": False, "p_8s": False, "p_8v": False, "p_vs": "n", "p_scs": False, "p_3ab": False, "p_3ac": False, "p_3aj": False, "p_3ah": False, "p_3ak": False, "p_3al": False, "p_3af": False, "p_5h": False, "p_5ac": False, "p_5ag": False, "p_5ad": False, "p_6c": False, "length": 0 }
@@ -49,9 +49,9 @@ def groupHandler(group, segment=None):
49 49 if "precondition" in item:
50 50 if conditionHandler( preconditions.get(item["precondition"],[]) ):
51 51 out.append(item["segment"])
52 - # print("out="+repr(out),file=stderr)
52 + print("out="+repr(out),file=stderr)
53 53 return out
54 -
54 +
55 55
56 56 def followTheStory(segment):
57 57 global state
@@ -78,7 +78,7 @@ def followTheStory(segment):
78 78 possibilities.append(segment)
79 79 if segment in segmentGroups:
80 80 possibilities += groupHandler(segmentGroups[segment])
81 - # print("poss="+repr(possibilities),file=stderr)
81 + print("poss="+repr(possibilities),file=stderr)
82 82 if not possibilities:
83 83 # raise Exception("hoi")
84 84 possibilities += groupHandler(segmentGroups["respawnOptions"])
@@ -89,17 +89,19 @@ def bandersnatch():
89 89 state = dict(initial_state)
90 90 current_segment = "1A"
91 91 while True:
92 + state["length"] += smap[current_segment]["endTimeMs"] - smap[current_segment]["startTimeMs"]
92 93 if current_segment[:3].lower() == "0cr":
93 94 print("file '{}.mkv'".format(current_segment))
94 95 print("file 'IDNT.mkv'")
96 + print("picked {} and added IDNT".format(current_segment), file=stderr)
97 + state["length"] += 10
95 98 break
96 - if current_segment in smap:
97 - print("file '{}.mkv'".format(current_segment))
98 - state["length"] += smap[current_segment]["endTimeMs"] - smap[current_segment]["startTimeMs"]
99 + print("file '{}.mkv'".format(current_segment))
100 + print("picked {}".format(current_segment), file=stderr)
99 101 current_segment = followTheStory(current_segment)
100 102 if current_segment is None:
101 103 break
102 104 return msToTS(state["length"])
103 105
104 106 if __name__ == "__main__":
105 - bandersnatch()
107 + print(bandersnatch(),file=stderr)

S Smith revised this gist 1560614270. Go to revision

1 file changed, 1 insertion, 1 deletion

bandersnatch.py

@@ -93,7 +93,7 @@ def bandersnatch():
93 93 print("file '{}.mkv'".format(current_segment))
94 94 print("file 'IDNT.mkv'")
95 95 break
96 - if current_segment in moments:
96 + if current_segment in smap:
97 97 print("file '{}.mkv'".format(current_segment))
98 98 state["length"] += smap[current_segment]["endTimeMs"] - smap[current_segment]["startTimeMs"]
99 99 current_segment = followTheStory(current_segment)

S Smith revised this gist 1560536085. Go to revision

1 file changed, 1 insertion, 1 deletion

bandersnatch.md

@@ -35,7 +35,7 @@ for segment in smap.values():
35 35 ss = " -ss " + msToTS(segment["startTimeMs"]-5000)
36 36 if "endTimeMs" in segment:
37 37 t = " -t {}".format((segment["endTimeMs"]-segment["startTimeMs"])/1000)
38 - print("""ffmpeg{} -i bandersnatch.mkv -ss 5{} {}.mkv 2>/dev/null""".format(ss, t, segment["segment"]))
38 + print("""ffmpeg{} -i bandersnatch.mkv -ss 5{} {}.mkv 2>/dev/null""".format(ss, t, segment))
39 39 ```
40 40
41 41 You'll get a bunch of lines to run to generate clips from the full movie. I'd suggest putting these lines into a bash script

S Smith revised this gist 1560531542. Go to revision

2 files changed, 153 insertions

bandersnatch.md(file created)

@@ -0,0 +1,48 @@
1 + Bandersnatch Maker
2 + ==================
3 +
4 + This is a program I wrote on a live stream on the 14th (and 15th) of June 2019. Video link coming soon.
5 +
6 + You'll need some things.
7 +
8 + * The movie (complete, with all clips, should be 05:12:14). See https://mehotkhan.github.io/BandersnatchInteractive/ for info on that.
9 + * Some data from BandersnatchInteractive.
10 + * https://mehotkhan.github.io/BandersnatchInteractive/assets/bandersnatch.js
11 + * https://mehotkhan.github.io/BandersnatchInteractive/assets/SegmentMap.js
12 + * ffmpeg
13 +
14 + You'll need to edit the two js files to remove `bandersnatch=` and `SegmentMap=` respectively so they parse as valid json. If you
15 + encounter an error about utf-8 bom use dos2unix to fix it. Rename the files to `bandersnatch.json` and `SegmentMap.json`.
16 +
17 + Open a python interpreter in the same directory as SegmentMap.js. I'd probably recommend 3.7. Paste this in:
18 +
19 + ```python
20 + import json
21 +
22 + with open("SegmentMap.json") as f:
23 + smap = json.load(f)
24 +
25 + def msToTS(ms):
26 + s,ms = divmod(ms,1000)
27 + m,s = divmod(s,60)
28 + h,m = divmod(m,60)
29 + return "{:02d}:{:02d}:{:02d}.{:03d}".format(h,m,s,ms)
30 +
31 + for segment in smap.values():
32 + ss = ""
33 + t = ""
34 + if segment["startTimeMs"] > 5000:
35 + ss = " -ss " + msToTS(segment["startTimeMs"]-5000)
36 + if "endTimeMs" in segment:
37 + t = " -t {}".format((segment["endTimeMs"]-segment["startTimeMs"])/1000)
38 + print("""ffmpeg{} -i bandersnatch.mkv -ss 5{} {}.mkv 2>/dev/null""".format(ss, t, segment["segment"]))
39 + ```
40 +
41 + You'll get a bunch of lines to run to generate clips from the full movie. I'd suggest putting these lines into a bash script
42 + and leaving it to run for a while. This will take a very long time.
43 +
44 + While that's going, generate some movies! They're produced in ffmpeg concat format, render them with:
45 +
46 + ```bash
47 + ffmpeg -f concat -i FILENAME.txt -c copy `date +%Y%m%d-%H%M%S.mkv`
48 + ```

bandersnatch.py(file created)

@@ -0,0 +1,105 @@
1 + from random import choice
2 + import json
3 + #from sys import stderr
4 +
5 + with open("bandersnatch.json") as f:
6 + bandersnatch = json.load(f)
7 +
8 + with open("SegmentMap.json") as f:
9 + smap = json.load(f)
10 +
11 + initial_state = { "p_sp": True, "p_tt": True, "p_8a": False, "p_td": True, "p_cs": False, "p_w1": False, "p_2b": False, "p_3j": False, "p_pt": False, "p_cd": False, "p_cj": False, "p_sj": False, "p_sj2": False, "p_tud": False, "p_lsd": False, "p_vh": False, "p_3l": False, "p_3s": False, "p_3z": False, "p_ps": "n", "p_wb": False, "p_kd": False, "p_bo": False, "p_5v": False, "p_pc": "n", "p_sc": False, "p_ty": False, "p_cm": False, "p_pr": False, "p_3ad": False, "p_s3af": False, "p_nf": False, "p_np": False, "p_ne": False, "p_pp": False, "p_tp": False, "p_bup": False, "p_be": False, "p_pe": False, "p_pae": False, "p_te": False, "p_snt": False, "p_8j": False, "p_8d": False, "p_8m": False, "p_8q": False, "p_8s": False, "p_8v": False, "p_vs": "n", "p_scs": False, "p_3ab": False, "p_3ac": False, "p_3aj": False, "p_3ah": False, "p_3ak": False, "p_3al": False, "p_3af": False, "p_5h": False, "p_5ac": False, "p_5ag": False, "p_5ad": False, "p_6c": False, "length": 0 }
12 + state = dict(initial_state)
13 +
14 + moments = bandersnatch["videos"]["80988062"]["interactiveVideoMoments"]["value"]["momentsBySegment"]
15 + preconditions = bandersnatch["videos"]["80988062"]["interactiveVideoMoments"]["value"]["preconditions"]
16 + segmentGroups = bandersnatch["videos"]["80988062"]["interactiveVideoMoments"]["value"]["segmentGroups"]
17 +
18 + def msToTS(ms):
19 + s,ms = divmod(ms,1000)
20 + m,s = divmod(s,60)
21 + h,m = divmod(m,60)
22 + return "{:02d}:{:02d}:{:02d}.{:03d}".format(h,m,s,ms)
23 +
24 + def conditionHandler(cond):
25 + global state
26 + if not cond:
27 + return True
28 + if cond[0] == "persistentState":
29 + return state[cond[1]]
30 + if cond[0] == "not":
31 + return not all(conditionHandler(c) for c in cond[1:])
32 + if cond[0] == "and":
33 + return all(conditionHandler(c) for c in cond[1:])
34 + if cond[0] == "eql":
35 + return conditionHandler(cond[1]) == cond[2]
36 + if cond[0] == "or":
37 + return any(conditionHandler(c) for c in cond[1:])
38 +
39 + def groupHandler(group, segment=None):
40 + out = []
41 + if segment:
42 + group.append(segment)
43 + for item in group:
44 + if type(item) is str and conditionHandler( preconditions.get(item,[]) ):
45 + out.append(item)
46 + if type(item) is dict:
47 + if "segmentGroup" in item:
48 + out += groupHandler(segmentGroups[item["segmentGroup"]])
49 + if "precondition" in item:
50 + if conditionHandler( preconditions.get(item["precondition"],[]) ):
51 + out.append(item["segment"])
52 + # print("out="+repr(out),file=stderr)
53 + return out
54 +
55 +
56 + def followTheStory(segment):
57 + global state
58 + global history
59 + possibilities = []
60 + if segment in moments:
61 + m = moments[segment]
62 + for moment in m:
63 + if moment["type"] == "notification:playbackImpression":
64 + state.update( moment.get("impressionData",{}).get("data", {}).get("persistent", {}) )
65 + if moment["type"] == "scene:cs_bs":
66 + for option in moment["choices"]:
67 + state.update( option.get("impressionData",{}).get("data", {}).get("persistent", {}) )
68 + if "segmentId" in option:
69 + p = groupHandler([option["segmentId"]])
70 + elif "sg" in option:
71 + p = groupHandler(segmentGroups[option["sg"]])
72 + elif moment["trackingInfo"]["optionType"] == "fakeOption":
73 + continue
74 + else:
75 + raise Exception(option["id"])
76 + possibilities += p
77 + if moment["type"] == "notification:action":
78 + possibilities.append(segment)
79 + if segment in segmentGroups:
80 + possibilities += groupHandler(segmentGroups[segment])
81 + # print("poss="+repr(possibilities),file=stderr)
82 + if not possibilities:
83 + # raise Exception("hoi")
84 + possibilities += groupHandler(segmentGroups["respawnOptions"])
85 + return choice(possibilities)
86 +
87 + def bandersnatch():
88 + global state
89 + state = dict(initial_state)
90 + current_segment = "1A"
91 + while True:
92 + if current_segment[:3].lower() == "0cr":
93 + print("file '{}.mkv'".format(current_segment))
94 + print("file 'IDNT.mkv'")
95 + break
96 + if current_segment in moments:
97 + print("file '{}.mkv'".format(current_segment))
98 + state["length"] += smap[current_segment]["endTimeMs"] - smap[current_segment]["startTimeMs"]
99 + current_segment = followTheStory(current_segment)
100 + if current_segment is None:
101 + break
102 + return msToTS(state["length"])
103 +
104 + if __name__ == "__main__":
105 + bandersnatch()
Newer Older