Skip to content

Repository files navigation

The History Makers

This repository contains scripts to process preservation files, generate checksums, and create and move derivatives of The History Makers oral history interviews.

Installation

Prerequisites

Git

Download official Windows build here: https://git-scm.com/download/win

Install using the Git-[version].exe file, using the default/ pre-filled options

Python

Download official Python 3.x build for Windows here: https://www.python.org/downloads/windows/

Open Downloads folder, locate python3.x.exe file, right-click and select "Run as Administrator" from pop-up menu

IMPORTANT - during install, select "Add Python to environment variables" option

test the Python install

open a new instance of Powershell, type "python" and hit enter (type "exit()" and hit enter to exit the Python interperator shell that was opened)

connect to GitHub

Git is version control software for developers - GitHub is a website that integrates Git with other features that developers find handy. The code for this project is hosted on GitHub, and we'll use Git to download a copy of that code to the machine running the video processing, and upload back to GitHub with any changes.

GitHub only supports SSH authentication these days, follow thier guide for setting that up here: https://docs.github.com/en/authentication/connecting-to-github-with-ssh

Once SSH is set up, do an SSH clone of the repo to the video processing machine.

Configuration

  1. open video-post-processing-config.txt in the text editor of your choice

  2. fill out fields per your local specifications

General Configuration Notes

general format is:

[section_header]
variable_name = variable value

do not enclose paths with quotes, even if they have spaces - do not escape whitespace either

Configuration Fields Reference

Filetypes

Input

comma-separated list of acceptable file extensions for input files, each extension is enclosed in quotes

e.g. ".mov",".MOV"

Transcode

this section contains filepaths for assets which are required in order to transcode derivative files

White Watermark

raw_captures

specifies the path to the main ingest directory. This directory can be considered "hot" in that any subfolders will be attempted to be processed when the script is run with no arguments. Individual accessions should be saved at this path in a folder named with the accession number - alternatively, folder can contain any name if an alternative accession number is supplied at runtime (see Usage section of this document)

Example folder setup, tree view

/raw_captures
├── A2022_034_001_001
│ ├── DOH_HEJ_006_000.mov
│ ├── DOH_HEJ_006_001.mov
│ ├── DOH_HEJ_006_002.mov
│ └── DOH_HEJ_006.XML
├── A2022_034_001_002
│ ├── DOH_HEJ_007_000.mov
│ ├── DOH_HEJ_007_001.mov
│ ├── DOH_HEJ_007_002.mov
│ └── DOH_HEJ_007.XML
├── A2022_047_001_001
│ ├── 01275001.MOV
│ ├── 01275002.MOV
│ ├── 01275003.MOV
│ └── 01275004.MOV

File Destinations

This section describes folder paths for derivatives

Email

This section contains info for email notifications from the script

Logs

This section contains folder paths for the directory containing the logs, as well as the path of the lockfile that makevideos creates in order to only one a single instance of the script at a time

MediaConch

This section delineates the folderpath for MediaConch policies

Usage

General

ingest.py --options accession_number(s)

Help

ingest.py -h

virtual environment

this script uses the venv python library to manage dependencies ("venv" is short for "virtual environment"). It must be enabled in order to be used, however. THM staff shouldn't have to do this too often, but after closing cmd.exe or after a restart it may be necessary.

you can tell you're in the virtual environment by looking to the left of the command prompt. For the THM processing machine, the prompt is D:\Users\archadmin\code\thm - if that line is preceded by (venv), you are in the virtual environment

This is what you want:

(venv) D:\Users\archadmin\code\thm:

This means you gotta activate it:

D:\Users\archadmin\code\thm:

To activate the virtual environment, run the below command in cmd.exe:

venv\Scripts\activate.bat

once that command completes, you should be good to go

the script will error and close if it is not being run in the virtual environment

Examples

ingest everything in raw_captures directory, as configured in config file

ingest.py

ingest a single accession, A2022_012_001_001

ingest.py A2022_012_001_001

ingest multiple accessions

ingest.py A2022_012_001_001 A2022_033_001_001

file validation

ingest without validating input files

ingest.py --no_input_validation A2022_012_001_001

changing terminal output

you can run this script with more or less output to the terminal

note that these setting don't change what is logged, just what is printed

run in verbose mode

ingest.py -v A2022_012_001_001

run in quiet mode

ingest.py -q A2022_012_001_001

changing notification settings

you can run this script without sending emails using the --no_email flag

ingest.py --no_email

changing file copy setting

you can run the script without copying files to the connected drives using the --no_copy flag

ingest.py --no_copy

using multiple flags

these options can be strung together in a single command. the command below will process two accessions without input validation, printing every log entry to the terminal window, without copying files and without emailing anyone

ingest.py -v --no_input_validation --no_copy --no_email A2022_999_001_001 A2017_088_001_001

Script Descriptions

makevideos

this script takes the raw video captures delivered by THM personnel and:

  1. concatenates the < 4GB files into 1 long file

  2. transcodes that file to flv, mp4, and mpeg

  3. embeds timecode and watermarks where appropriate

  4. hashmoves (see below) them to their destiantions

  5. triggers script to embed those hashes into a Filemaker db named PBCore_Catalog

makevideos also checks to make sure that everything is plugged in and that all necessary files (like watermarks) are in their expected locations.

makevideos is triggered every 15minutes, M-F, 7am-9pm local time by cron

makevideos can also be run manually by cd'ing into the repo directory (look for that in the config.txt file) and running "python makevideos.py"

startup

this script checks the values in the config file against the configuration currently present on the workstation running the script. Predominantly, it verifies that filepaths specified in the config actually exist.

file_validation

this script uses MediaConch validation to ensure that only valid input files are passed to the script for preservation/ transcode. MediaConch policies are managed in the directory specified in the config file. For each input file, this script checks it against available file policies in the MediaConch policies folder - if a match is found, that policy is used to validate all other input and output files for the accession.

MediaConch GUI

if a file doesn't pass validation, follow these steps to find out why:

  1. open MediaConch

  2. in the "Checker" tab, use the dropdown menu to select the policy to check against -- see log for list of policies attempted

  3. still in the "Checker" tab, select a file to check against the policy from step 1

  4. select "check file"

  5. MediaConch will analyze the file and add it to a list at the bottom of the window

  6. to view pass/ fail for each field, click the eyeball icon

for more info, see official how-to's at this link

filemaker_handler

this script handles all calls to FileMaker database, requires ODBC

send_email

this script sends emails per info in config file

util

utility functions required by other scripts in this repository

venv

This script uses Python's venv module to create a virutal environment, the venv folder contains configuration info for this virtual environment, and should not need to be modified

About

video post-processing for The History Makers

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - brnco/thm: video post-processing for The History Makers · GitHub
Skip to content

Repository files navigation

The History Makers

This repository contains scripts to process preservation files, generate checksums, and create and move derivatives of The History Makers oral history interviews.

Installation

Prerequisites

Git

Download official Windows build here: https://git-scm.com/download/win

Install using the Git-[version].exe file, using the default/ pre-filled options

Python

Download official Python 3.x build for Windows here: https://www.python.org/downloads/windows/

Open Downloads folder, locate python3.x.exe file, right-click and select "Run as Administrator" from pop-up menu

IMPORTANT - during install, select "Add Python to environment variables" option

test the Python install

open a new instance of Powershell, type "python" and hit enter (type "exit()" and hit enter to exit the Python interperator shell that was opened)

connect to GitHub

Git is version control software for developers - GitHub is a website that integrates Git with other features that developers find handy. The code for this project is hosted on GitHub, and we'll use Git to download a copy of that code to the machine running the video processing, and upload back to GitHub with any changes.

GitHub only supports SSH authentication these days, follow thier guide for setting that up here: https://docs.github.com/en/authentication/connecting-to-github-with-ssh

Once SSH is set up, do an SSH clone of the repo to the video processing machine.

Configuration

  1. open video-post-processing-config.txt in the text editor of your choice

  2. fill out fields per your local specifications

General Configuration Notes

general format is:

[section_header]
variable_name = variable value

do not enclose paths with quotes, even if they have spaces - do not escape whitespace either

Configuration Fields Reference

Filetypes

Input

comma-separated list of acceptable file extensions for input files, each extension is enclosed in quotes

e.g. ".mov",".MOV"

Transcode

this section contains filepaths for assets which are required in order to transcode derivative files

White Watermark

raw_captures

specifies the path to the main ingest directory. This directory can be considered "hot" in that any subfolders will be attempted to be processed when the script is run with no arguments. Individual accessions should be saved at this path in a folder named with the accession number - alternatively, folder can contain any name if an alternative accession number is supplied at runtime (see Usage section of this document)

Example folder setup, tree view

/raw_captures
├── A2022_034_001_001
│ ├── DOH_HEJ_006_000.mov
│ ├── DOH_HEJ_006_001.mov
│ ├── DOH_HEJ_006_002.mov
│ └── DOH_HEJ_006.XML
├── A2022_034_001_002
│ ├── DOH_HEJ_007_000.mov
│ ├── DOH_HEJ_007_001.mov
│ ├── DOH_HEJ_007_002.mov
│ └── DOH_HEJ_007.XML
├── A2022_047_001_001
│ ├── 01275001.MOV
│ ├── 01275002.MOV
│ ├── 01275003.MOV
│ └── 01275004.MOV

File Destinations

This section describes folder paths for derivatives

Email

This section contains info for email notifications from the script

Logs

This section contains folder paths for the directory containing the logs, as well as the path of the lockfile that makevideos creates in order to only one a single instance of the script at a time

MediaConch

This section delineates the folderpath for MediaConch policies

Usage

General

ingest.py --options accession_number(s)

Help

ingest.py -h

virtual environment

this script uses the venv python library to manage dependencies ("venv" is short for "virtual environment"). It must be enabled in order to be used, however. THM staff shouldn't have to do this too often, but after closing cmd.exe or after a restart it may be necessary.

you can tell you're in the virtual environment by looking to the left of the command prompt. For the THM processing machine, the prompt is D:\Users\archadmin\code\thm - if that line is preceded by (venv), you are in the virtual environment

This is what you want:

(venv) D:\Users\archadmin\code\thm:

This means you gotta activate it:

D:\Users\archadmin\code\thm:

To activate the virtual environment, run the below command in cmd.exe:

venv\Scripts\activate.bat

once that command completes, you should be good to go

the script will error and close if it is not being run in the virtual environment

Examples

ingest everything in raw_captures directory, as configured in config file

ingest.py

ingest a single accession, A2022_012_001_001

ingest.py A2022_012_001_001

ingest multiple accessions

ingest.py A2022_012_001_001 A2022_033_001_001

file validation

ingest without validating input files

ingest.py --no_input_validation A2022_012_001_001

changing terminal output

you can run this script with more or less output to the terminal

note that these setting don't change what is logged, just what is printed

run in verbose mode

ingest.py -v A2022_012_001_001

run in quiet mode

ingest.py -q A2022_012_001_001

changing notification settings

you can run this script without sending emails using the --no_email flag

ingest.py --no_email

changing file copy setting

you can run the script without copying files to the connected drives using the --no_copy flag

ingest.py --no_copy

using multiple flags

these options can be strung together in a single command. the command below will process two accessions without input validation, printing every log entry to the terminal window, without copying files and without emailing anyone

ingest.py -v --no_input_validation --no_copy --no_email A2022_999_001_001 A2017_088_001_001

Script Descriptions

makevideos

this script takes the raw video captures delivered by THM personnel and:

  1. concatenates the < 4GB files into 1 long file

  2. transcodes that file to flv, mp4, and mpeg

  3. embeds timecode and watermarks where appropriate

  4. hashmoves (see below) them to their destiantions

  5. triggers script to embed those hashes into a Filemaker db named PBCore_Catalog

makevideos also checks to make sure that everything is plugged in and that all necessary files (like watermarks) are in their expected locations.

makevideos is triggered every 15minutes, M-F, 7am-9pm local time by cron

makevideos can also be run manually by cd'ing into the repo directory (look for that in the config.txt file) and running "python makevideos.py"

startup

this script checks the values in the config file against the configuration currently present on the workstation running the script. Predominantly, it verifies that filepaths specified in the config actually exist.

file_validation

this script uses MediaConch validation to ensure that only valid input files are passed to the script for preservation/ transcode. MediaConch policies are managed in the directory specified in the config file. For each input file, this script checks it against available file policies in the MediaConch policies folder - if a match is found, that policy is used to validate all other input and output files for the accession.

MediaConch GUI

if a file doesn't pass validation, follow these steps to find out why:

  1. open MediaConch

  2. in the "Checker" tab, use the dropdown menu to select the policy to check against -- see log for list of policies attempted

  3. still in the "Checker" tab, select a file to check against the policy from step 1

  4. select "check file"

  5. MediaConch will analyze the file and add it to a list at the bottom of the window

  6. to view pass/ fail for each field, click the eyeball icon

for more info, see official how-to's at this link

filemaker_handler

this script handles all calls to FileMaker database, requires ODBC

send_email

this script sends emails per info in config file

util

utility functions required by other scripts in this repository

venv

This script uses Python's venv module to create a virutal environment, the venv folder contains configuration info for this virtual environment, and should not need to be modified

About

video post-processing for The History Makers

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - brnco/thm: video post-processing for The History Makers · GitHub
Skip to content

Repository files navigation

The History Makers

This repository contains scripts to process preservation files, generate checksums, and create and move derivatives of The History Makers oral history interviews.

Installation

Prerequisites

Git

Download official Windows build here: https://git-scm.com/download/win

Install using the Git-[version].exe file, using the default/ pre-filled options

Python

Download official Python 3.x build for Windows here: https://www.python.org/downloads/windows/

Open Downloads folder, locate python3.x.exe file, right-click and select "Run as Administrator" from pop-up menu

IMPORTANT - during install, select "Add Python to environment variables" option

test the Python install

open a new instance of Powershell, type "python" and hit enter (type "exit()" and hit enter to exit the Python interperator shell that was opened)

connect to GitHub

Git is version control software for developers - GitHub is a website that integrates Git with other features that developers find handy. The code for this project is hosted on GitHub, and we'll use Git to download a copy of that code to the machine running the video processing, and upload back to GitHub with any changes.

GitHub only supports SSH authentication these days, follow thier guide for setting that up here: https://docs.github.com/en/authentication/connecting-to-github-with-ssh

Once SSH is set up, do an SSH clone of the repo to the video processing machine.

Configuration

  1. open video-post-processing-config.txt in the text editor of your choice

  2. fill out fields per your local specifications

General Configuration Notes

general format is:

[section_header]
variable_name = variable value

do not enclose paths with quotes, even if they have spaces - do not escape whitespace either

Configuration Fields Reference

Filetypes

Input

comma-separated list of acceptable file extensions for input files, each extension is enclosed in quotes

e.g. ".mov",".MOV"

Transcode

this section contains filepaths for assets which are required in order to transcode derivative files

White Watermark

raw_captures

specifies the path to the main ingest directory. This directory can be considered "hot" in that any subfolders will be attempted to be processed when the script is run with no arguments. Individual accessions should be saved at this path in a folder named with the accession number - alternatively, folder can contain any name if an alternative accession number is supplied at runtime (see Usage section of this document)

Example folder setup, tree view

/raw_captures
├── A2022_034_001_001
│ ├── DOH_HEJ_006_000.mov
│ ├── DOH_HEJ_006_001.mov
│ ├── DOH_HEJ_006_002.mov
│ └── DOH_HEJ_006.XML
├── A2022_034_001_002
│ ├── DOH_HEJ_007_000.mov
│ ├── DOH_HEJ_007_001.mov
│ ├── DOH_HEJ_007_002.mov
│ └── DOH_HEJ_007.XML
├── A2022_047_001_001
│ ├── 01275001.MOV
│ ├── 01275002.MOV
│ ├── 01275003.MOV
│ └── 01275004.MOV

File Destinations

This section describes folder paths for derivatives

Email

This section contains info for email notifications from the script

Logs

This section contains folder paths for the directory containing the logs, as well as the path of the lockfile that makevideos creates in order to only one a single instance of the script at a time

MediaConch

This section delineates the folderpath for MediaConch policies

Usage

General

ingest.py --options accession_number(s)

Help

ingest.py -h

virtual environment

this script uses the venv python library to manage dependencies ("venv" is short for "virtual environment"). It must be enabled in order to be used, however. THM staff shouldn't have to do this too often, but after closing cmd.exe or after a restart it may be necessary.

you can tell you're in the virtual environment by looking to the left of the command prompt. For the THM processing machine, the prompt is D:\Users\archadmin\code\thm - if that line is preceded by (venv), you are in the virtual environment

This is what you want:

(venv) D:\Users\archadmin\code\thm:

This means you gotta activate it:

D:\Users\archadmin\code\thm:

To activate the virtual environment, run the below command in cmd.exe:

venv\Scripts\activate.bat

once that command completes, you should be good to go

the script will error and close if it is not being run in the virtual environment

Examples

ingest everything in raw_captures directory, as configured in config file

ingest.py

ingest a single accession, A2022_012_001_001

ingest.py A2022_012_001_001

ingest multiple accessions

ingest.py A2022_012_001_001 A2022_033_001_001

file validation

ingest without validating input files

ingest.py --no_input_validation A2022_012_001_001

changing terminal output

you can run this script with more or less output to the terminal

note that these setting don't change what is logged, just what is printed

run in verbose mode

ingest.py -v A2022_012_001_001

run in quiet mode

ingest.py -q A2022_012_001_001

changing notification settings

you can run this script without sending emails using the --no_email flag

ingest.py --no_email

changing file copy setting

you can run the script without copying files to the connected drives using the --no_copy flag

ingest.py --no_copy

using multiple flags

these options can be strung together in a single command. the command below will process two accessions without input validation, printing every log entry to the terminal window, without copying files and without emailing anyone

ingest.py -v --no_input_validation --no_copy --no_email A2022_999_001_001 A2017_088_001_001

Script Descriptions

makevideos

this script takes the raw video captures delivered by THM personnel and:

  1. concatenates the < 4GB files into 1 long file

  2. transcodes that file to flv, mp4, and mpeg

  3. embeds timecode and watermarks where appropriate

  4. hashmoves (see below) them to their destiantions

  5. triggers script to embed those hashes into a Filemaker db named PBCore_Catalog

makevideos also checks to make sure that everything is plugged in and that all necessary files (like watermarks) are in their expected locations.

makevideos is triggered every 15minutes, M-F, 7am-9pm local time by cron

makevideos can also be run manually by cd'ing into the repo directory (look for that in the config.txt file) and running "python makevideos.py"

startup

this script checks the values in the config file against the configuration currently present on the workstation running the script. Predominantly, it verifies that filepaths specified in the config actually exist.

file_validation

this script uses MediaConch validation to ensure that only valid input files are passed to the script for preservation/ transcode. MediaConch policies are managed in the directory specified in the config file. For each input file, this script checks it against available file policies in the MediaConch policies folder - if a match is found, that policy is used to validate all other input and output files for the accession.

MediaConch GUI

if a file doesn't pass validation, follow these steps to find out why:

  1. open MediaConch

  2. in the "Checker" tab, use the dropdown menu to select the policy to check against -- see log for list of policies attempted

  3. still in the "Checker" tab, select a file to check against the policy from step 1

  4. select "check file"

  5. MediaConch will analyze the file and add it to a list at the bottom of the window

  6. to view pass/ fail for each field, click the eyeball icon

for more info, see official how-to's at this link

filemaker_handler

this script handles all calls to FileMaker database, requires ODBC

send_email

this script sends emails per info in config file

util

utility functions required by other scripts in this repository

venv

This script uses Python's venv module to create a virutal environment, the venv folder contains configuration info for this virtual environment, and should not need to be modified

About

video post-processing for The History Makers

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - brnco/thm: video post-processing for The History Makers · GitHub
Skip to content

Repository files navigation

The History Makers

This repository contains scripts to process preservation files, generate checksums, and create and move derivatives of The History Makers oral history interviews.

Installation

Prerequisites

Git

Download official Windows build here: https://git-scm.com/download/win

Install using the Git-[version].exe file, using the default/ pre-filled options

Python

Download official Python 3.x build for Windows here: https://www.python.org/downloads/windows/

Open Downloads folder, locate python3.x.exe file, right-click and select "Run as Administrator" from pop-up menu

IMPORTANT - during install, select "Add Python to environment variables" option

test the Python install

open a new instance of Powershell, type "python" and hit enter (type "exit()" and hit enter to exit the Python interperator shell that was opened)

connect to GitHub

Git is version control software for developers - GitHub is a website that integrates Git with other features that developers find handy. The code for this project is hosted on GitHub, and we'll use Git to download a copy of that code to the machine running the video processing, and upload back to GitHub with any changes.

GitHub only supports SSH authentication these days, follow thier guide for setting that up here: https://docs.github.com/en/authentication/connecting-to-github-with-ssh

Once SSH is set up, do an SSH clone of the repo to the video processing machine.

Configuration

  1. open video-post-processing-config.txt in the text editor of your choice

  2. fill out fields per your local specifications

General Configuration Notes

general format is:

[section_header]
variable_name = variable value

do not enclose paths with quotes, even if they have spaces - do not escape whitespace either

Configuration Fields Reference

Filetypes

Input

comma-separated list of acceptable file extensions for input files, each extension is enclosed in quotes

e.g. ".mov",".MOV"

Transcode

this section contains filepaths for assets which are required in order to transcode derivative files

White Watermark

raw_captures

specifies the path to the main ingest directory. This directory can be considered "hot" in that any subfolders will be attempted to be processed when the script is run with no arguments. Individual accessions should be saved at this path in a folder named with the accession number - alternatively, folder can contain any name if an alternative accession number is supplied at runtime (see Usage section of this document)

Example folder setup, tree view

/raw_captures
├── A2022_034_001_001
│ ├── DOH_HEJ_006_000.mov
│ ├── DOH_HEJ_006_001.mov
│ ├── DOH_HEJ_006_002.mov
│ └── DOH_HEJ_006.XML
├── A2022_034_001_002
│ ├── DOH_HEJ_007_000.mov
│ ├── DOH_HEJ_007_001.mov
│ ├── DOH_HEJ_007_002.mov
│ └── DOH_HEJ_007.XML
├── A2022_047_001_001
│ ├── 01275001.MOV
│ ├── 01275002.MOV
│ ├── 01275003.MOV
│ └── 01275004.MOV

File Destinations

This section describes folder paths for derivatives

Email

This section contains info for email notifications from the script

Logs

This section contains folder paths for the directory containing the logs, as well as the path of the lockfile that makevideos creates in order to only one a single instance of the script at a time

MediaConch

This section delineates the folderpath for MediaConch policies

Usage

General

ingest.py --options accession_number(s)

Help

ingest.py -h

virtual environment

this script uses the venv python library to manage dependencies ("venv" is short for "virtual environment"). It must be enabled in order to be used, however. THM staff shouldn't have to do this too often, but after closing cmd.exe or after a restart it may be necessary.

you can tell you're in the virtual environment by looking to the left of the command prompt. For the THM processing machine, the prompt is D:\Users\archadmin\code\thm - if that line is preceded by (venv), you are in the virtual environment

This is what you want:

(venv) D:\Users\archadmin\code\thm:

This means you gotta activate it:

D:\Users\archadmin\code\thm:

To activate the virtual environment, run the below command in cmd.exe:

venv\Scripts\activate.bat

once that command completes, you should be good to go

the script will error and close if it is not being run in the virtual environment

Examples

ingest everything in raw_captures directory, as configured in config file

ingest.py

ingest a single accession, A2022_012_001_001

ingest.py A2022_012_001_001

ingest multiple accessions

ingest.py A2022_012_001_001 A2022_033_001_001

file validation

ingest without validating input files

ingest.py --no_input_validation A2022_012_001_001

changing terminal output

you can run this script with more or less output to the terminal

note that these setting don't change what is logged, just what is printed

run in verbose mode

ingest.py -v A2022_012_001_001

run in quiet mode

ingest.py -q A2022_012_001_001

changing notification settings

you can run this script without sending emails using the --no_email flag

ingest.py --no_email

changing file copy setting

you can run the script without copying files to the connected drives using the --no_copy flag

ingest.py --no_copy

using multiple flags

these options can be strung together in a single command. the command below will process two accessions without input validation, printing every log entry to the terminal window, without copying files and without emailing anyone

ingest.py -v --no_input_validation --no_copy --no_email A2022_999_001_001 A2017_088_001_001

Script Descriptions

makevideos

this script takes the raw video captures delivered by THM personnel and:

  1. concatenates the < 4GB files into 1 long file

  2. transcodes that file to flv, mp4, and mpeg

  3. embeds timecode and watermarks where appropriate

  4. hashmoves (see below) them to their destiantions

  5. triggers script to embed those hashes into a Filemaker db named PBCore_Catalog

makevideos also checks to make sure that everything is plugged in and that all necessary files (like watermarks) are in their expected locations.

makevideos is triggered every 15minutes, M-F, 7am-9pm local time by cron

makevideos can also be run manually by cd'ing into the repo directory (look for that in the config.txt file) and running "python makevideos.py"

startup

this script checks the values in the config file against the configuration currently present on the workstation running the script. Predominantly, it verifies that filepaths specified in the config actually exist.

file_validation

this script uses MediaConch validation to ensure that only valid input files are passed to the script for preservation/ transcode. MediaConch policies are managed in the directory specified in the config file. For each input file, this script checks it against available file policies in the MediaConch policies folder - if a match is found, that policy is used to validate all other input and output files for the accession.

MediaConch GUI

if a file doesn't pass validation, follow these steps to find out why:

  1. open MediaConch

  2. in the "Checker" tab, use the dropdown menu to select the policy to check against -- see log for list of policies attempted

  3. still in the "Checker" tab, select a file to check against the policy from step 1

  4. select "check file"

  5. MediaConch will analyze the file and add it to a list at the bottom of the window

  6. to view pass/ fail for each field, click the eyeball icon

for more info, see official how-to's at this link

filemaker_handler

this script handles all calls to FileMaker database, requires ODBC

send_email

this script sends emails per info in config file

util

utility functions required by other scripts in this repository

venv

This script uses Python's venv module to create a virutal environment, the venv folder contains configuration info for this virtual environment, and should not need to be modified

About

video post-processing for The History Makers

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - brnco/thm: video post-processing for The History Makers · GitHub
Skip to content

Repository files navigation

The History Makers

This repository contains scripts to process preservation files, generate checksums, and create and move derivatives of The History Makers oral history interviews.

Installation

Prerequisites

Git

Download official Windows build here: https://git-scm.com/download/win

Install using the Git-[version].exe file, using the default/ pre-filled options

Python

Download official Python 3.x build for Windows here: https://www.python.org/downloads/windows/

Open Downloads folder, locate python3.x.exe file, right-click and select "Run as Administrator" from pop-up menu

IMPORTANT - during install, select "Add Python to environment variables" option

test the Python install

open a new instance of Powershell, type "python" and hit enter (type "exit()" and hit enter to exit the Python interperator shell that was opened)

connect to GitHub

Git is version control software for developers - GitHub is a website that integrates Git with other features that developers find handy. The code for this project is hosted on GitHub, and we'll use Git to download a copy of that code to the machine running the video processing, and upload back to GitHub with any changes.

GitHub only supports SSH authentication these days, follow thier guide for setting that up here: https://docs.github.com/en/authentication/connecting-to-github-with-ssh

Once SSH is set up, do an SSH clone of the repo to the video processing machine.

Configuration

  1. open video-post-processing-config.txt in the text editor of your choice

  2. fill out fields per your local specifications

General Configuration Notes

general format is:

[section_header]
variable_name = variable value

do not enclose paths with quotes, even if they have spaces - do not escape whitespace either

Configuration Fields Reference

Filetypes

Input

comma-separated list of acceptable file extensions for input files, each extension is enclosed in quotes

e.g. ".mov",".MOV"

Transcode

this section contains filepaths for assets which are required in order to transcode derivative files

White Watermark

raw_captures

specifies the path to the main ingest directory. This directory can be considered "hot" in that any subfolders will be attempted to be processed when the script is run with no arguments. Individual accessions should be saved at this path in a folder named with the accession number - alternatively, folder can contain any name if an alternative accession number is supplied at runtime (see Usage section of this document)

Example folder setup, tree view

/raw_captures
├── A2022_034_001_001
│ ├── DOH_HEJ_006_000.mov
│ ├── DOH_HEJ_006_001.mov
│ ├── DOH_HEJ_006_002.mov
│ └── DOH_HEJ_006.XML
├── A2022_034_001_002
│ ├── DOH_HEJ_007_000.mov
│ ├── DOH_HEJ_007_001.mov
│ ├── DOH_HEJ_007_002.mov
│ └── DOH_HEJ_007.XML
├── A2022_047_001_001
│ ├── 01275001.MOV
│ ├── 01275002.MOV
│ ├── 01275003.MOV
│ └── 01275004.MOV

File Destinations

This section describes folder paths for derivatives

Email

This section contains info for email notifications from the script

Logs

This section contains folder paths for the directory containing the logs, as well as the path of the lockfile that makevideos creates in order to only one a single instance of the script at a time

MediaConch

This section delineates the folderpath for MediaConch policies

Usage

General

ingest.py --options accession_number(s)

Help

ingest.py -h

virtual environment

this script uses the venv python library to manage dependencies ("venv" is short for "virtual environment"). It must be enabled in order to be used, however. THM staff shouldn't have to do this too often, but after closing cmd.exe or after a restart it may be necessary.

you can tell you're in the virtual environment by looking to the left of the command prompt. For the THM processing machine, the prompt is D:\Users\archadmin\code\thm - if that line is preceded by (venv), you are in the virtual environment

This is what you want:

(venv) D:\Users\archadmin\code\thm:

This means you gotta activate it:

D:\Users\archadmin\code\thm:

To activate the virtual environment, run the below command in cmd.exe:

venv\Scripts\activate.bat

once that command completes, you should be good to go

the script will error and close if it is not being run in the virtual environment

Examples

ingest everything in raw_captures directory, as configured in config file

ingest.py

ingest a single accession, A2022_012_001_001

ingest.py A2022_012_001_001

ingest multiple accessions

ingest.py A2022_012_001_001 A2022_033_001_001

file validation

ingest without validating input files

ingest.py --no_input_validation A2022_012_001_001

changing terminal output

you can run this script with more or less output to the terminal

note that these setting don't change what is logged, just what is printed

run in verbose mode

ingest.py -v A2022_012_001_001

run in quiet mode

ingest.py -q A2022_012_001_001

changing notification settings

you can run this script without sending emails using the --no_email flag

ingest.py --no_email

changing file copy setting

you can run the script without copying files to the connected drives using the --no_copy flag

ingest.py --no_copy

using multiple flags

these options can be strung together in a single command. the command below will process two accessions without input validation, printing every log entry to the terminal window, without copying files and without emailing anyone

ingest.py -v --no_input_validation --no_copy --no_email A2022_999_001_001 A2017_088_001_001

Script Descriptions

makevideos

this script takes the raw video captures delivered by THM personnel and:

  1. concatenates the < 4GB files into 1 long file

  2. transcodes that file to flv, mp4, and mpeg

  3. embeds timecode and watermarks where appropriate

  4. hashmoves (see below) them to their destiantions

  5. triggers script to embed those hashes into a Filemaker db named PBCore_Catalog

makevideos also checks to make sure that everything is plugged in and that all necessary files (like watermarks) are in their expected locations.

makevideos is triggered every 15minutes, M-F, 7am-9pm local time by cron

makevideos can also be run manually by cd'ing into the repo directory (look for that in the config.txt file) and running "python makevideos.py"

startup

this script checks the values in the config file against the configuration currently present on the workstation running the script. Predominantly, it verifies that filepaths specified in the config actually exist.

file_validation

this script uses MediaConch validation to ensure that only valid input files are passed to the script for preservation/ transcode. MediaConch policies are managed in the directory specified in the config file. For each input file, this script checks it against available file policies in the MediaConch policies folder - if a match is found, that policy is used to validate all other input and output files for the accession.

MediaConch GUI

if a file doesn't pass validation, follow these steps to find out why:

  1. open MediaConch

  2. in the "Checker" tab, use the dropdown menu to select the policy to check against -- see log for list of policies attempted

  3. still in the "Checker" tab, select a file to check against the policy from step 1

  4. select "check file"

  5. MediaConch will analyze the file and add it to a list at the bottom of the window

  6. to view pass/ fail for each field, click the eyeball icon

for more info, see official how-to's at this link

filemaker_handler

this script handles all calls to FileMaker database, requires ODBC

send_email

this script sends emails per info in config file

util

utility functions required by other scripts in this repository

venv

This script uses Python's venv module to create a virutal environment, the venv folder contains configuration info for this virtual environment, and should not need to be modified

About

video post-processing for The History Makers

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - brnco/thm: video post-processing for The History Makers · GitHub
Skip to content

Repository files navigation

The History Makers

This repository contains scripts to process preservation files, generate checksums, and create and move derivatives of The History Makers oral history interviews.

Installation

Prerequisites

Git

Download official Windows build here: https://git-scm.com/download/win

Install using the Git-[version].exe file, using the default/ pre-filled options

Python

Download official Python 3.x build for Windows here: https://www.python.org/downloads/windows/

Open Downloads folder, locate python3.x.exe file, right-click and select "Run as Administrator" from pop-up menu

IMPORTANT - during install, select "Add Python to environment variables" option

test the Python install

open a new instance of Powershell, type "python" and hit enter (type "exit()" and hit enter to exit the Python interperator shell that was opened)

connect to GitHub

Git is version control software for developers - GitHub is a website that integrates Git with other features that developers find handy. The code for this project is hosted on GitHub, and we'll use Git to download a copy of that code to the machine running the video processing, and upload back to GitHub with any changes.

GitHub only supports SSH authentication these days, follow thier guide for setting that up here: https://docs.github.com/en/authentication/connecting-to-github-with-ssh

Once SSH is set up, do an SSH clone of the repo to the video processing machine.

Configuration

  1. open video-post-processing-config.txt in the text editor of your choice

  2. fill out fields per your local specifications

General Configuration Notes

general format is:

[section_header]
variable_name = variable value

do not enclose paths with quotes, even if they have spaces - do not escape whitespace either

Configuration Fields Reference

Filetypes

Input

comma-separated list of acceptable file extensions for input files, each extension is enclosed in quotes

e.g. ".mov",".MOV"

Transcode

this section contains filepaths for assets which are required in order to transcode derivative files

White Watermark

raw_captures

specifies the path to the main ingest directory. This directory can be considered "hot" in that any subfolders will be attempted to be processed when the script is run with no arguments. Individual accessions should be saved at this path in a folder named with the accession number - alternatively, folder can contain any name if an alternative accession number is supplied at runtime (see Usage section of this document)

Example folder setup, tree view

/raw_captures
├── A2022_034_001_001
│ ├── DOH_HEJ_006_000.mov
│ ├── DOH_HEJ_006_001.mov
│ ├── DOH_HEJ_006_002.mov
│ └── DOH_HEJ_006.XML
├── A2022_034_001_002
│ ├── DOH_HEJ_007_000.mov
│ ├── DOH_HEJ_007_001.mov
│ ├── DOH_HEJ_007_002.mov
│ └── DOH_HEJ_007.XML
├── A2022_047_001_001
│ ├── 01275001.MOV
│ ├── 01275002.MOV
│ ├── 01275003.MOV
│ └── 01275004.MOV

File Destinations

This section describes folder paths for derivatives

Email

This section contains info for email notifications from the script

Logs

This section contains folder paths for the directory containing the logs, as well as the path of the lockfile that makevideos creates in order to only one a single instance of the script at a time

MediaConch

This section delineates the folderpath for MediaConch policies

Usage

General

ingest.py --options accession_number(s)

Help

ingest.py -h

virtual environment

this script uses the venv python library to manage dependencies ("venv" is short for "virtual environment"). It must be enabled in order to be used, however. THM staff shouldn't have to do this too often, but after closing cmd.exe or after a restart it may be necessary.

you can tell you're in the virtual environment by looking to the left of the command prompt. For the THM processing machine, the prompt is D:\Users\archadmin\code\thm - if that line is preceded by (venv), you are in the virtual environment

This is what you want:

(venv) D:\Users\archadmin\code\thm:

This means you gotta activate it:

D:\Users\archadmin\code\thm:

To activate the virtual environment, run the below command in cmd.exe:

venv\Scripts\activate.bat

once that command completes, you should be good to go

the script will error and close if it is not being run in the virtual environment

Examples

ingest everything in raw_captures directory, as configured in config file

ingest.py

ingest a single accession, A2022_012_001_001

ingest.py A2022_012_001_001

ingest multiple accessions

ingest.py A2022_012_001_001 A2022_033_001_001

file validation

ingest without validating input files

ingest.py --no_input_validation A2022_012_001_001

changing terminal output

you can run this script with more or less output to the terminal

note that these setting don't change what is logged, just what is printed

run in verbose mode

ingest.py -v A2022_012_001_001

run in quiet mode

ingest.py -q A2022_012_001_001

changing notification settings

you can run this script without sending emails using the --no_email flag

ingest.py --no_email

changing file copy setting

you can run the script without copying files to the connected drives using the --no_copy flag

ingest.py --no_copy

using multiple flags

these options can be strung together in a single command. the command below will process two accessions without input validation, printing every log entry to the terminal window, without copying files and without emailing anyone

ingest.py -v --no_input_validation --no_copy --no_email A2022_999_001_001 A2017_088_001_001

Script Descriptions

makevideos

this script takes the raw video captures delivered by THM personnel and:

  1. concatenates the < 4GB files into 1 long file

  2. transcodes that file to flv, mp4, and mpeg

  3. embeds timecode and watermarks where appropriate

  4. hashmoves (see below) them to their destiantions

  5. triggers script to embed those hashes into a Filemaker db named PBCore_Catalog

makevideos also checks to make sure that everything is plugged in and that all necessary files (like watermarks) are in their expected locations.

makevideos is triggered every 15minutes, M-F, 7am-9pm local time by cron

makevideos can also be run manually by cd'ing into the repo directory (look for that in the config.txt file) and running "python makevideos.py"

startup

this script checks the values in the config file against the configuration currently present on the workstation running the script. Predominantly, it verifies that filepaths specified in the config actually exist.

file_validation

this script uses MediaConch validation to ensure that only valid input files are passed to the script for preservation/ transcode. MediaConch policies are managed in the directory specified in the config file. For each input file, this script checks it against available file policies in the MediaConch policies folder - if a match is found, that policy is used to validate all other input and output files for the accession.

MediaConch GUI

if a file doesn't pass validation, follow these steps to find out why:

  1. open MediaConch

  2. in the "Checker" tab, use the dropdown menu to select the policy to check against -- see log for list of policies attempted

  3. still in the "Checker" tab, select a file to check against the policy from step 1

  4. select "check file"

  5. MediaConch will analyze the file and add it to a list at the bottom of the window

  6. to view pass/ fail for each field, click the eyeball icon

for more info, see official how-to's at this link

filemaker_handler

this script handles all calls to FileMaker database, requires ODBC

send_email

this script sends emails per info in config file

util

utility functions required by other scripts in this repository

venv

This script uses Python's venv module to create a virutal environment, the venv folder contains configuration info for this virtual environment, and should not need to be modified

About

video post-processing for The History Makers

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - brnco/thm: video post-processing for The History Makers · GitHub
Skip to content

Repository files navigation

The History Makers

This repository contains scripts to process preservation files, generate checksums, and create and move derivatives of The History Makers oral history interviews.

Installation

Prerequisites

Git

Download official Windows build here: https://git-scm.com/download/win

Install using the Git-[version].exe file, using the default/ pre-filled options

Python

Download official Python 3.x build for Windows here: https://www.python.org/downloads/windows/

Open Downloads folder, locate python3.x.exe file, right-click and select "Run as Administrator" from pop-up menu

IMPORTANT - during install, select "Add Python to environment variables" option

test the Python install

open a new instance of Powershell, type "python" and hit enter (type "exit()" and hit enter to exit the Python interperator shell that was opened)

connect to GitHub

Git is version control software for developers - GitHub is a website that integrates Git with other features that developers find handy. The code for this project is hosted on GitHub, and we'll use Git to download a copy of that code to the machine running the video processing, and upload back to GitHub with any changes.

GitHub only supports SSH authentication these days, follow thier guide for setting that up here: https://docs.github.com/en/authentication/connecting-to-github-with-ssh

Once SSH is set up, do an SSH clone of the repo to the video processing machine.

Configuration

  1. open video-post-processing-config.txt in the text editor of your choice

  2. fill out fields per your local specifications

General Configuration Notes

general format is:

[section_header]
variable_name = variable value

do not enclose paths with quotes, even if they have spaces - do not escape whitespace either

Configuration Fields Reference

Filetypes

Input

comma-separated list of acceptable file extensions for input files, each extension is enclosed in quotes

e.g. ".mov",".MOV"

Transcode

this section contains filepaths for assets which are required in order to transcode derivative files

White Watermark

raw_captures

specifies the path to the main ingest directory. This directory can be considered "hot" in that any subfolders will be attempted to be processed when the script is run with no arguments. Individual accessions should be saved at this path in a folder named with the accession number - alternatively, folder can contain any name if an alternative accession number is supplied at runtime (see Usage section of this document)

Example folder setup, tree view

/raw_captures
├── A2022_034_001_001
│ ├── DOH_HEJ_006_000.mov
│ ├── DOH_HEJ_006_001.mov
│ ├── DOH_HEJ_006_002.mov
│ └── DOH_HEJ_006.XML
├── A2022_034_001_002
│ ├── DOH_HEJ_007_000.mov
│ ├── DOH_HEJ_007_001.mov
│ ├── DOH_HEJ_007_002.mov
│ └── DOH_HEJ_007.XML
├── A2022_047_001_001
│ ├── 01275001.MOV
│ ├── 01275002.MOV
│ ├── 01275003.MOV
│ └── 01275004.MOV

File Destinations

This section describes folder paths for derivatives

Email

This section contains info for email notifications from the script

Logs

This section contains folder paths for the directory containing the logs, as well as the path of the lockfile that makevideos creates in order to only one a single instance of the script at a time

MediaConch

This section delineates the folderpath for MediaConch policies

Usage

General

ingest.py --options accession_number(s)

Help

ingest.py -h

virtual environment

this script uses the venv python library to manage dependencies ("venv" is short for "virtual environment"). It must be enabled in order to be used, however. THM staff shouldn't have to do this too often, but after closing cmd.exe or after a restart it may be necessary.

you can tell you're in the virtual environment by looking to the left of the command prompt. For the THM processing machine, the prompt is D:\Users\archadmin\code\thm - if that line is preceded by (venv), you are in the virtual environment

This is what you want:

(venv) D:\Users\archadmin\code\thm:

This means you gotta activate it:

D:\Users\archadmin\code\thm:

To activate the virtual environment, run the below command in cmd.exe:

venv\Scripts\activate.bat

once that command completes, you should be good to go

the script will error and close if it is not being run in the virtual environment

Examples

ingest everything in raw_captures directory, as configured in config file

ingest.py

ingest a single accession, A2022_012_001_001

ingest.py A2022_012_001_001

ingest multiple accessions

ingest.py A2022_012_001_001 A2022_033_001_001

file validation

ingest without validating input files

ingest.py --no_input_validation A2022_012_001_001

changing terminal output

you can run this script with more or less output to the terminal

note that these setting don't change what is logged, just what is printed

run in verbose mode

ingest.py -v A2022_012_001_001

run in quiet mode

ingest.py -q A2022_012_001_001

changing notification settings

you can run this script without sending emails using the --no_email flag

ingest.py --no_email

changing file copy setting

you can run the script without copying files to the connected drives using the --no_copy flag

ingest.py --no_copy

using multiple flags

these options can be strung together in a single command. the command below will process two accessions without input validation, printing every log entry to the terminal window, without copying files and without emailing anyone

ingest.py -v --no_input_validation --no_copy --no_email A2022_999_001_001 A2017_088_001_001

Script Descriptions

makevideos

this script takes the raw video captures delivered by THM personnel and:

  1. concatenates the < 4GB files into 1 long file

  2. transcodes that file to flv, mp4, and mpeg

  3. embeds timecode and watermarks where appropriate

  4. hashmoves (see below) them to their destiantions

  5. triggers script to embed those hashes into a Filemaker db named PBCore_Catalog

makevideos also checks to make sure that everything is plugged in and that all necessary files (like watermarks) are in their expected locations.

makevideos is triggered every 15minutes, M-F, 7am-9pm local time by cron

makevideos can also be run manually by cd'ing into the repo directory (look for that in the config.txt file) and running "python makevideos.py"

startup

this script checks the values in the config file against the configuration currently present on the workstation running the script. Predominantly, it verifies that filepaths specified in the config actually exist.

file_validation

this script uses MediaConch validation to ensure that only valid input files are passed to the script for preservation/ transcode. MediaConch policies are managed in the directory specified in the config file. For each input file, this script checks it against available file policies in the MediaConch policies folder - if a match is found, that policy is used to validate all other input and output files for the accession.

MediaConch GUI

if a file doesn't pass validation, follow these steps to find out why:

  1. open MediaConch

  2. in the "Checker" tab, use the dropdown menu to select the policy to check against -- see log for list of policies attempted

  3. still in the "Checker" tab, select a file to check against the policy from step 1

  4. select "check file"

  5. MediaConch will analyze the file and add it to a list at the bottom of the window

  6. to view pass/ fail for each field, click the eyeball icon

for more info, see official how-to's at this link

filemaker_handler

this script handles all calls to FileMaker database, requires ODBC

send_email

this script sends emails per info in config file

util

utility functions required by other scripts in this repository

venv

This script uses Python's venv module to create a virutal environment, the venv folder contains configuration info for this virtual environment, and should not need to be modified

About

video post-processing for The History Makers

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - brnco/thm: video post-processing for The History Makers · GitHub
Skip to content

Repository files navigation

The History Makers

This repository contains scripts to process preservation files, generate checksums, and create and move derivatives of The History Makers oral history interviews.

Installation

Prerequisites

Git

Download official Windows build here: https://git-scm.com/download/win

Install using the Git-[version].exe file, using the default/ pre-filled options

Python

Download official Python 3.x build for Windows here: https://www.python.org/downloads/windows/

Open Downloads folder, locate python3.x.exe file, right-click and select "Run as Administrator" from pop-up menu

IMPORTANT - during install, select "Add Python to environment variables" option

test the Python install

open a new instance of Powershell, type "python" and hit enter (type "exit()" and hit enter to exit the Python interperator shell that was opened)

connect to GitHub

Git is version control software for developers - GitHub is a website that integrates Git with other features that developers find handy. The code for this project is hosted on GitHub, and we'll use Git to download a copy of that code to the machine running the video processing, and upload back to GitHub with any changes.

GitHub only supports SSH authentication these days, follow thier guide for setting that up here: https://docs.github.com/en/authentication/connecting-to-github-with-ssh

Once SSH is set up, do an SSH clone of the repo to the video processing machine.

Configuration

  1. open video-post-processing-config.txt in the text editor of your choice

  2. fill out fields per your local specifications

General Configuration Notes

general format is:

[section_header]
variable_name = variable value

do not enclose paths with quotes, even if they have spaces - do not escape whitespace either

Configuration Fields Reference

Filetypes

Input

comma-separated list of acceptable file extensions for input files, each extension is enclosed in quotes

e.g. ".mov",".MOV"

Transcode

this section contains filepaths for assets which are required in order to transcode derivative files

White Watermark

raw_captures

specifies the path to the main ingest directory. This directory can be considered "hot" in that any subfolders will be attempted to be processed when the script is run with no arguments. Individual accessions should be saved at this path in a folder named with the accession number - alternatively, folder can contain any name if an alternative accession number is supplied at runtime (see Usage section of this document)

Example folder setup, tree view

/raw_captures
├── A2022_034_001_001
│ ├── DOH_HEJ_006_000.mov
│ ├── DOH_HEJ_006_001.mov
│ ├── DOH_HEJ_006_002.mov
│ └── DOH_HEJ_006.XML
├── A2022_034_001_002
│ ├── DOH_HEJ_007_000.mov
│ ├── DOH_HEJ_007_001.mov
│ ├── DOH_HEJ_007_002.mov
│ └── DOH_HEJ_007.XML
├── A2022_047_001_001
│ ├── 01275001.MOV
│ ├── 01275002.MOV
│ ├── 01275003.MOV
│ └── 01275004.MOV

File Destinations

This section describes folder paths for derivatives

Email

This section contains info for email notifications from the script

Logs

This section contains folder paths for the directory containing the logs, as well as the path of the lockfile that makevideos creates in order to only one a single instance of the script at a time

MediaConch

This section delineates the folderpath for MediaConch policies

Usage

General

ingest.py --options accession_number(s)

Help

ingest.py -h

virtual environment

this script uses the venv python library to manage dependencies ("venv" is short for "virtual environment"). It must be enabled in order to be used, however. THM staff shouldn't have to do this too often, but after closing cmd.exe or after a restart it may be necessary.

you can tell you're in the virtual environment by looking to the left of the command prompt. For the THM processing machine, the prompt is D:\Users\archadmin\code\thm - if that line is preceded by (venv), you are in the virtual environment

This is what you want:

(venv) D:\Users\archadmin\code\thm:

This means you gotta activate it:

D:\Users\archadmin\code\thm:

To activate the virtual environment, run the below command in cmd.exe:

venv\Scripts\activate.bat

once that command completes, you should be good to go

the script will error and close if it is not being run in the virtual environment

Examples

ingest everything in raw_captures directory, as configured in config file

ingest.py

ingest a single accession, A2022_012_001_001

ingest.py A2022_012_001_001

ingest multiple accessions

ingest.py A2022_012_001_001 A2022_033_001_001

file validation

ingest without validating input files

ingest.py --no_input_validation A2022_012_001_001

changing terminal output

you can run this script with more or less output to the terminal

note that these setting don't change what is logged, just what is printed

run in verbose mode

ingest.py -v A2022_012_001_001

run in quiet mode

ingest.py -q A2022_012_001_001

changing notification settings

you can run this script without sending emails using the --no_email flag

ingest.py --no_email

changing file copy setting

you can run the script without copying files to the connected drives using the --no_copy flag

ingest.py --no_copy

using multiple flags

these options can be strung together in a single command. the command below will process two accessions without input validation, printing every log entry to the terminal window, without copying files and without emailing anyone

ingest.py -v --no_input_validation --no_copy --no_email A2022_999_001_001 A2017_088_001_001

Script Descriptions

makevideos

this script takes the raw video captures delivered by THM personnel and:

  1. concatenates the < 4GB files into 1 long file

  2. transcodes that file to flv, mp4, and mpeg

  3. embeds timecode and watermarks where appropriate

  4. hashmoves (see below) them to their destiantions

  5. triggers script to embed those hashes into a Filemaker db named PBCore_Catalog

makevideos also checks to make sure that everything is plugged in and that all necessary files (like watermarks) are in their expected locations.

makevideos is triggered every 15minutes, M-F, 7am-9pm local time by cron

makevideos can also be run manually by cd'ing into the repo directory (look for that in the config.txt file) and running "python makevideos.py"

startup

this script checks the values in the config file against the configuration currently present on the workstation running the script. Predominantly, it verifies that filepaths specified in the config actually exist.

file_validation

this script uses MediaConch validation to ensure that only valid input files are passed to the script for preservation/ transcode. MediaConch policies are managed in the directory specified in the config file. For each input file, this script checks it against available file policies in the MediaConch policies folder - if a match is found, that policy is used to validate all other input and output files for the accession.

MediaConch GUI

if a file doesn't pass validation, follow these steps to find out why:

  1. open MediaConch

  2. in the "Checker" tab, use the dropdown menu to select the policy to check against -- see log for list of policies attempted

  3. still in the "Checker" tab, select a file to check against the policy from step 1

  4. select "check file"

  5. MediaConch will analyze the file and add it to a list at the bottom of the window

  6. to view pass/ fail for each field, click the eyeball icon

for more info, see official how-to's at this link

filemaker_handler

this script handles all calls to FileMaker database, requires ODBC

send_email

this script sends emails per info in config file

util

utility functions required by other scripts in this repository

venv

This script uses Python's venv module to create a virutal environment, the venv folder contains configuration info for this virtual environment, and should not need to be modified

About

video post-processing for The History Makers

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages