Add highlighting to code samples

This commit is contained in:
litter 2020-02-11 18:23:23 -05:00
parent 8ff6c179b4
commit 78bbc93d19
1 changed files with 29 additions and 17 deletions

View File

@ -1,6 +1,6 @@
# filmless # filmless
Scripts and templates for making "filmless", camera-less analog films using free open-source software. Scripts and templates for making "filmless", cameraless analog films using free open-source software.
This is a collection of tools for printing and/or laser cutting non-film materials into 16mm-shaped strips of film. Use the Processing sketch to turn your video into valid scale 16mm images for printing on inkjet transparency or any kind of printable transparency sheets. This is a collection of tools for printing and/or laser cutting non-film materials into 16mm-shaped strips of film. Use the Processing sketch to turn your video into valid scale 16mm images for printing on inkjet transparency or any kind of printable transparency sheets.
@ -9,6 +9,7 @@ This is a collection of tools for printing and/or laser cutting non-film materia
1. [Laser cutting templates](#laser) 1. [Laser cutting templates](#laser)
2. [Scripts for exporting video to image sequences](#scripts) 2. [Scripts for exporting video to image sequences](#scripts)
3. [Processing sketch for generating pages of film strips](#processing) 3. [Processing sketch for generating pages of film strips](#processing)
4. [Calibration sketch](#calibration)
<a name="laser"></a> <a name="laser"></a>
#### 1. Laser cutting templates #### 1. Laser cutting templates
@ -28,7 +29,7 @@ If you would like to generate images for printing and cutting, you will need Pro
Simply pass in a path to your video as the first and only argument, like so: Simply pass in a path to your video as the first and only argument, like so:
``` ```bash
sh scripts/export.sh /path/to/my/video.mov sh scripts/export.sh /path/to/my/video.mov
``` ```
@ -38,6 +39,12 @@ You can also export image sequences using your application of choice. This scrip
Note: Processing can only read .tif files produced by the application, so unless you are using an image sequence generated by Processing save your files as .png or .jpeg. Note: Processing can only read .tif files produced by the application, so unless you are using an image sequence generated by Processing save your files as .png or .jpeg.
```
```
<a name="processing"></a> <a name="processing"></a>
#### 3. A Processing sketch for generating pages of film strips #### 3. A Processing sketch for generating pages of film strips
@ -47,43 +54,43 @@ By including a path to a *mono* audio file, tested only with .wav files so far,
There are variables at the beginning of the sketch that you will need to change to properly generate pages from your images. There are variables at the beginning of the sketch that you will need to change to properly generate pages from your images.
``` ```java
String DESKTOP = System.getProperty("user.home") + "/Desktop"; String DESKTOP = System.getProperty("user.home") + "/Desktop";
``` ```
This line does not need to be used or changed, but will find the "Desktop" folder for the current user. This is useful if you wish to place your files in an easy-to-reach destination while generating files. This line does not need to be used or changed, but will find the "Desktop" folder for the current user. This is useful if you wish to place your files in an easy-to-reach destination while generating files.
``` ```java
String SOURCE = DESKTOP + "/frames/"; String SOURCE = DESKTOP + "/frames/";
``` ```
The `SOURCE` variable will point to the directory containing your image sequence. This can be changed completely or used as is if you place your image sequence in a folder named "frames" on your desktop and include the images. The `SOURCE` variable will point to the directory containing your image sequence. This can be changed completely or used as is if you place your image sequence in a folder named "frames" on your desktop and include the images.
``` ```java
String SOUND = DESKTOP + "/audio/audio.wav"; String SOUND = DESKTOP + "/audio/audio.wav";
``` ```
The `SOUND` variable is optional. To include sound, use the path of a mono audio file. In the default setting, it will look for a file named "audio.wav" in a folder named "audio" on your Desktop. If you do not wish to use sound, change the line to this to generate a silent track: `String SOUND = "";` The `SOUND` variable is optional. To include sound, use the path of a mono audio file. In the default setting, it will look for a file named "audio.wav" in a folder named "audio" on your Desktop. If you do not wish to use sound, change the line to this to generate a silent track: `String SOUND = "";`
``` ```java
String RENDER_PATH = DESKTOP + "/"; String RENDER_PATH = DESKTOP + "/";
``` ```
This variable controls the output location for the `page_#.tif` files that will be produced by the sketch. These files can be LARGE (500MB to 2GB) so point this to a directory with a lot of space. Keep in mind, you will produce one of these pages for every 396 frames using the default settings, so a 4000 frame sequence will produce 11 pages. That as much as 22GB (or more) so plan accordingly. This variable controls the output location for the `page_#.tif` files that will be produced by the sketch. These files can be LARGE (500MB to 2GB) so point this to a directory with a lot of space. Keep in mind, you will produce one of these pages for every 396 frames using the default settings, so a 4000 frame sequence will produce 11 pages. That as much as 22GB (or more) so plan accordingly.
``` ```java
String SOUNDTRACK_TYPE = "unilateral"; String SOUNDTRACK_TYPE = "unilateral";
``` ```
The soundtrack type refers to the style of soundtrack that's produced by the sketch. The soundtrack is produced using [SoundtrackOptical](https://github.com/sixteenmillimeter/SoundtrackOptical) and the options are `unilateral`, `variable area`, `dual variable area`, `maurer`, `variable density`. Read more about these different types [here](http://www.paulivester.com/films/filmstock/guide.htm). The soundtrack type refers to the style of soundtrack that's produced by the sketch. The soundtrack is produced using [SoundtrackOptical](https://github.com/sixteenmillimeter/SoundtrackOptical) and the options are `unilateral`, `variable area`, `dual variable area`, `maurer`, `variable density`. Read more about these different types [here](http://www.paulivester.com/films/filmstock/guide.htm).
``` ```java
int DPI = 1440; int DPI = 1440;
``` ```
The DPI is the target for printing. The maximum DPI you'll be able to print is dependent on your printer or image reproduction technology. The higher the DPI, the higher the theoretical resolution of your output. This variable will also determine your sound quality, as you will only be able to reproduce the number of samples the vertical resolution allows. If your printer can only draw 10,000 lines in 24 frames, your sample rate will effectively be 10Khz. The DPI is the target for printing. The maximum DPI you'll be able to print is dependent on your printer or image reproduction technology. The higher the DPI, the higher the theoretical resolution of your output. This variable will also determine your sound quality, as you will only be able to reproduce the number of samples the vertical resolution allows. If your printer can only draw 10,000 lines in 24 frames, your sample rate will effectively be 10Khz.
``` ```java
String PITCH = "long"; String PITCH = "long";
``` ```
@ -91,7 +98,7 @@ The pitch of the film refers to the distance between the perforations. Long pitc
Make sure that if you change this setting, you use the provided `_long.svg` or `_short.svg` (or .dxf files) or change the setting in the `16mm_film.scad` file when generating your own. Make sure that if you change this setting, you use the provided `_long.svg` or `_short.svg` (or .dxf files) or change the setting in the `16mm_film.scad` file when generating your own.
``` ```java
String FORMAT = "16mm"; String FORMAT = "16mm";
``` ```
@ -103,13 +110,13 @@ Best practice would be to run the `filmless_calibration.pde` sketch with your de
Another thing to note: Super16 and soundtracks occupy the same space on the filmstrip and the script will throw an error if you try to include both audio and a Super16 image format. Another thing to note: Super16 and soundtracks occupy the same space on the filmstrip and the script will throw an error if you try to include both audio and a Super16 image format.
``` ```java
int PERFS = 1; int PERFS = 1;
``` ```
Refers to the number of perforations that will be printed as guides for your film. Can be either `1` or `2`. Similar to the conflict between Super16 and soundtracks, the second perforation on "double perf" film strips will occupy the same area that soundtracks and Super16 images do. If you intend to cut double perf film, use the proper .svg or .dxf file with 2 perforations per frame. Refers to the number of perforations that will be printed as guides for your film. Can be either `1` or `2`. Similar to the conflict between Super16 and soundtracks, the second perforation on "double perf" film strips will occupy the same area that soundtracks and Super16 images do. If you intend to cut double perf film, use the proper .svg or .dxf file with 2 perforations per frame.
``` ```java
float PAGE_W = 8.5; float PAGE_W = 8.5;
float PAGE_H = 11.0; float PAGE_H = 11.0;
float SAFE_W = .25; float SAFE_W = .25;
@ -120,36 +127,41 @@ Change these only when printing on larger format sheets than standard US letter
Using these default settings the script will generate 12 strips of 33 frames each, totally 396 frames per page. Using these default settings the script will generate 12 strips of 33 frames each, totally 396 frames per page.
``` ```java
color BACKGROUND = color(0); color BACKGROUND = color(0);
``` ```
The color that will fill the entire frame where there's no image or soundtrack data. The `color()` method will accept grey values from `0` (black) to `255` (white) or will accept 8-bit RGB color values like `color(255, 0, 0)` (red), `color(0, 255, 0)` (green), `color(0, 0, 255)` (blue) or anything in between those values. The color that will fill the entire frame where there's no image or soundtrack data. The `color()` method will accept grey values from `0` (black) to `255` (white) or will accept 8-bit RGB color values like `color(255, 0, 0)` (red), `color(0, 255, 0)` (green), `color(0, 0, 255)` (blue) or anything in between those values.
``` ```java
boolean NEGATIVE = false; boolean NEGATIVE = false;
``` ```
Change this value from `false` to `true` to invert the colors of your images. Use this for contact printing or other experimental uses. Keep in mind: this will not perform the orange color mask inversion needed for color contact printing but will naively invert all color values. Change this value from `false` to `true` to invert the colors of your images. Use this for contact printing or other experimental uses. Keep in mind: this will not perform the orange color mask inversion needed for color contact printing but will naively invert all color values.
``` ```java
boolean SHOW_PERFS = true; boolean SHOW_PERFS = true;
``` ```
Set to `true` to print perfs for cutting registration. Set to `false` to print nothing. Set to `true` to print perfs for cutting registration. Set to `false` to print nothing.
``` ```java
color PERFS_COLOR = color(255); color PERFS_COLOR = color(255);
``` ```
Set the color of the perforations, similar to `BACKGROUND`. By default, they will be drawn white. Set the color of the perforations, similar to `BACKGROUND`. By default, they will be drawn white.
``` ```java
int SOUND_OFFSET = 25; int SOUND_OFFSET = 25;
``` ```
The sound offset is the number of frames before the image starts after the soundtrack starts. When set to `25` the image will start on the 26th frame, which is the standard for 16mm prints. Change this only if sync sound is not important. The sound offset is the number of frames before the image starts after the soundtrack starts. When set to `25` the image will start on the 26th frame, which is the standard for 16mm prints. Change this only if sync sound is not important.
<a name="calibration"></a>
#### 4. Calibration sketch
The purpose of the calibration sketch `filmless_calibration` is to generate a page to calibrate between your printer and laser cutter. The page it generates is easy on your ink cartridge while you determine if there is any stretch or squish happening to your generated pages of film strips before you commit to printing them out for cutting.
## Hardware ## Hardware
* Laser cutter * Laser cutter