Latest commit

History

13 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

sdconv

Automatic SD video conversion script

Usage

  1. Install Hybrid 2022.07.23.1 or later
  2. Run Hybrid
    1. Save a dummy global profile to ensure all directories are created
    2. Ensure the job queue is completely empty
  3. Use the script
usage: sdconv.py [-h] [-o OUT_DIR] [--rename | --no-rename] [--encode | --no-encode] [-c CUTOFF_SIZE]
[--profile PROFILE] [--preset PRESET] [--force | --no-force |-f] [--suffix SUFFIX]
[--keep-raw | --no-keep-raw] [--raw-suffix RAW_SUFFIX] INPUT [INPUT ...]
Automatic SD video conversion script.
positional arguments:
INPUT File or directory to convert. If a directory, will merge all files inside as chapters of a
single file. If you want to glob, use PowerShell: '(Get-Item E:\*)'.
options:
-h, --help show this help message and exit
-o OUT_DIR, --out-dir OUT_DIR
Directory where to save converted files. (default: .)
--rename, --no-rename
Rename files according to their modification timestamp. (default: False)
--encode, --no-encode
Encode the video after deinterlacing. If disabled, saves the raw video file. (default: True)
-c CUTOFF_SIZE, --cutoff-size CUTOFF_SIZE
Skip files smaller than this size in MiB. (default: 5)
--profile PROFILE Hybrid profile to use when deinterlacing. (default: profiles/pal.xml)
--preset PRESET Handbrake preset to use when encoding. (default: presets/av1.json)
--force, --no-force, -f
Force overwrite existing output files. (default: False)
--suffix SUFFIX Suffix to use for output files. (default: .final.mp4)
--keep-raw, --no-keep-raw
Keep raw video files when encoding. Will be reused to speed up subsequent encodes. (default: False)
--raw-suffix RAW_SUFFIX
Suffix to use for raw files, if applicable. (default: .raw.mkv)

Examples

  • Process all videos independently (input directory contains videos)
    python .\sdconv.py --profile ".\profiles\pal.xml"--preset ".\presets\av1.json"-o "E:\converted" (Get-Item"E:\input\*.avi")
  • Process videos by folder, merging chapters in a single file (input directory contains folders of videos)
    python .\sdconv.py --rename --profile ".\profiles\pal.xml"--preset ".\presets\av1.json"-o "E:\converted" (Get-Item"E:\input\*")

Process

  1. Deinterlace video/s using QTGMC in Hybrid. Output as UT Video since it is lossless, widely supported, and fast to encode and decode. Apply PAR and chromaticity hints to output video container (check following sections).
  2. If renaming is enabled, rename the output files to their modification time. This will be used to generate chapter names next.
  3. If a folder with multiple videos was input, merge the output files into a single video via mkvmerge, generating chapters from each file's name.
  4. If encoding is not disabled, encode the video/s using Handbrake.

Anamorphic dimensions

Pixels on SD video are not square. Instead, they are anamorphic - usually 16:15 for PAL, and 8:9 for NTSC. These dimensions are referred to as PAR (pixel aspect ratio), and when multiplied by the SAR (storage aspect ratio), they give the DAR (display aspect ratio), which for SD is usually 4:3.

Source: https://en.wikipedia.org/wiki/Pixel_aspect_ratio

It is crucual to get these ratios right, otherwise the video dimensions will be skewed. This applies to both encoding and decoding. When decoding, you may need to override these properties if they are missing or incorrect. When encoding, you must explicitly save each of these properties in the video container, otherwise decoders will always assume square pixels.

Chromaticities

The chromaticities of NTSC and PAL are different, although both follow the ITU BT.601 standard. It is crucial to get them right, otherwise you will get skewed colors. This applies to both encoding and decoding. When decoding, you may need to override these properties if they are missing or incorrect. When encoding, you must explicitly save each of these properties in the video container, otherwise decoders will try to guess them, and that fails badly if the video is resized and/or deinterlaced with frame bobbing (doubling).

StandardMatrixPrimariesTransfer
BT.601 PALBT.470BGBT.470BGBT.709
BT.601 NTSCSMPTE 170MSMPTE 170MBT.709
BT.601 NTSC (old)BT.470MBT.470MBT.709

Source: H.273 specification

Encoder observations

All encoders below were compared at settings with equivalent encoding speed and output size. All latest versions were used as of 09/07/2022.

x264

Preserves noise and detail better, but causes rapidly shifting, blocky artifacts. Plays everywhere.

x265

Smoothens noise and detail, but results in significantly less, very evenly distributed, non-blocky artifacts. Plays on Safari and Edge. Requires codec on default Windows player.

SVT-AV1

30% faster encoding than the rest, while preserving the most noise and detail, has a moderate amount of rapidly shifting, blocky artifacts. Does not play on Safari or QuickTime. Requires codec on default Windows player.

About

Automatic SD video conversion script

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n 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;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

13 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

sdconv

Automatic SD video conversion script

Usage

  1. Install Hybrid 2022.07.23.1 or later
  2. Run Hybrid
    1. Save a dummy global profile to ensure all directories are created
    2. Ensure the job queue is completely empty
  3. Use the script
usage: sdconv.py [-h] [-o OUT_DIR] [--rename | --no-rename] [--encode | --no-encode] [-c CUTOFF_SIZE]
[--profile PROFILE] [--preset PRESET] [--force | --no-force |-f] [--suffix SUFFIX]
[--keep-raw | --no-keep-raw] [--raw-suffix RAW_SUFFIX] INPUT [INPUT ...]
Automatic SD video conversion script.
positional arguments:
INPUT File or directory to convert. If a directory, will merge all files inside as chapters of a
single file. If you want to glob, use PowerShell: '(Get-Item E:\*)'.
options:
-h, --help show this help message and exit
-o OUT_DIR, --out-dir OUT_DIR
Directory where to save converted files. (default: .)
--rename, --no-rename
Rename files according to their modification timestamp. (default: False)
--encode, --no-encode
Encode the video after deinterlacing. If disabled, saves the raw video file. (default: True)
-c CUTOFF_SIZE, --cutoff-size CUTOFF_SIZE
Skip files smaller than this size in MiB. (default: 5)
--profile PROFILE Hybrid profile to use when deinterlacing. (default: profiles/pal.xml)
--preset PRESET Handbrake preset to use when encoding. (default: presets/av1.json)
--force, --no-force, -f
Force overwrite existing output files. (default: False)
--suffix SUFFIX Suffix to use for output files. (default: .final.mp4)
--keep-raw, --no-keep-raw
Keep raw video files when encoding. Will be reused to speed up subsequent encodes. (default: False)
--raw-suffix RAW_SUFFIX
Suffix to use for raw files, if applicable. (default: .raw.mkv)

Examples

  • Process all videos independently (input directory contains videos)
    python .\sdconv.py --profile ".\profiles\pal.xml"--preset ".\presets\av1.json"-o "E:\converted" (Get-Item"E:\input\*.avi")
  • Process videos by folder, merging chapters in a single file (input directory contains folders of videos)
    python .\sdconv.py --rename --profile ".\profiles\pal.xml"--preset ".\presets\av1.json"-o "E:\converted" (Get-Item"E:\input\*")

Process

  1. Deinterlace video/s using QTGMC in Hybrid. Output as UT Video since it is lossless, widely supported, and fast to encode and decode. Apply PAR and chromaticity hints to output video container (check following sections).
  2. If renaming is enabled, rename the output files to their modification time. This will be used to generate chapter names next.
  3. If a folder with multiple videos was input, merge the output files into a single video via mkvmerge, generating chapters from each file's name.
  4. If encoding is not disabled, encode the video/s using Handbrake.

Anamorphic dimensions

Pixels on SD video are not square. Instead, they are anamorphic - usually 16:15 for PAL, and 8:9 for NTSC. These dimensions are referred to as PAR (pixel aspect ratio), and when multiplied by the SAR (storage aspect ratio), they give the DAR (display aspect ratio), which for SD is usually 4:3.

Source: https://en.wikipedia.org/wiki/Pixel_aspect_ratio

It is crucual to get these ratios right, otherwise the video dimensions will be skewed. This applies to both encoding and decoding. When decoding, you may need to override these properties if they are missing or incorrect. When encoding, you must explicitly save each of these properties in the video container, otherwise decoders will always assume square pixels.

Chromaticities

The chromaticities of NTSC and PAL are different, although both follow the ITU BT.601 standard. It is crucial to get them right, otherwise you will get skewed colors. This applies to both encoding and decoding. When decoding, you may need to override these properties if they are missing or incorrect. When encoding, you must explicitly save each of these properties in the video container, otherwise decoders will try to guess them, and that fails badly if the video is resized and/or deinterlaced with frame bobbing (doubling).

StandardMatrixPrimariesTransfer
BT.601 PALBT.470BGBT.470BGBT.709
BT.601 NTSCSMPTE 170MSMPTE 170MBT.709
BT.601 NTSC (old)BT.470MBT.470MBT.709

Source: H.273 specification

Encoder observations

All encoders below were compared at settings with equivalent encoding speed and output size. All latest versions were used as of 09/07/2022.

x264

Preserves noise and detail better, but causes rapidly shifting, blocky artifacts. Plays everywhere.

x265

Smoothens noise and detail, but results in significantly less, very evenly distributed, non-blocky artifacts. Plays on Safari and Edge. Requires codec on default Windows player.

SVT-AV1

30% faster encoding than the rest, while preserving the most noise and detail, has a moderate amount of rapidly shifting, blocky artifacts. Does not play on Safari or QuickTime. Requires codec on default Windows player.

About

Automatic SD video conversion script

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

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

Latest commit

History

13 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

sdconv

Automatic SD video conversion script

Usage

  1. Install Hybrid 2022.07.23.1 or later
  2. Run Hybrid
    1. Save a dummy global profile to ensure all directories are created
    2. Ensure the job queue is completely empty
  3. Use the script
usage: sdconv.py [-h] [-o OUT_DIR] [--rename | --no-rename] [--encode | --no-encode] [-c CUTOFF_SIZE]
[--profile PROFILE] [--preset PRESET] [--force | --no-force |-f] [--suffix SUFFIX]
[--keep-raw | --no-keep-raw] [--raw-suffix RAW_SUFFIX] INPUT [INPUT ...]
Automatic SD video conversion script.
positional arguments:
INPUT File or directory to convert. If a directory, will merge all files inside as chapters of a
single file. If you want to glob, use PowerShell: '(Get-Item E:\*)'.
options:
-h, --help show this help message and exit
-o OUT_DIR, --out-dir OUT_DIR
Directory where to save converted files. (default: .)
--rename, --no-rename
Rename files according to their modification timestamp. (default: False)
--encode, --no-encode
Encode the video after deinterlacing. If disabled, saves the raw video file. (default: True)
-c CUTOFF_SIZE, --cutoff-size CUTOFF_SIZE
Skip files smaller than this size in MiB. (default: 5)
--profile PROFILE Hybrid profile to use when deinterlacing. (default: profiles/pal.xml)
--preset PRESET Handbrake preset to use when encoding. (default: presets/av1.json)
--force, --no-force, -f
Force overwrite existing output files. (default: False)
--suffix SUFFIX Suffix to use for output files. (default: .final.mp4)
--keep-raw, --no-keep-raw
Keep raw video files when encoding. Will be reused to speed up subsequent encodes. (default: False)
--raw-suffix RAW_SUFFIX
Suffix to use for raw files, if applicable. (default: .raw.mkv)

Examples

  • Process all videos independently (input directory contains videos)
    python .\sdconv.py --profile ".\profiles\pal.xml"--preset ".\presets\av1.json"-o "E:\converted" (Get-Item"E:\input\*.avi")
  • Process videos by folder, merging chapters in a single file (input directory contains folders of videos)
    python .\sdconv.py --rename --profile ".\profiles\pal.xml"--preset ".\presets\av1.json"-o "E:\converted" (Get-Item"E:\input\*")

Process

  1. Deinterlace video/s using QTGMC in Hybrid. Output as UT Video since it is lossless, widely supported, and fast to encode and decode. Apply PAR and chromaticity hints to output video container (check following sections).
  2. If renaming is enabled, rename the output files to their modification time. This will be used to generate chapter names next.
  3. If a folder with multiple videos was input, merge the output files into a single video via mkvmerge, generating chapters from each file's name.
  4. If encoding is not disabled, encode the video/s using Handbrake.

Anamorphic dimensions

Pixels on SD video are not square. Instead, they are anamorphic - usually 16:15 for PAL, and 8:9 for NTSC. These dimensions are referred to as PAR (pixel aspect ratio), and when multiplied by the SAR (storage aspect ratio), they give the DAR (display aspect ratio), which for SD is usually 4:3.

Source: https://en.wikipedia.org/wiki/Pixel_aspect_ratio

It is crucual to get these ratios right, otherwise the video dimensions will be skewed. This applies to both encoding and decoding. When decoding, you may need to override these properties if they are missing or incorrect. When encoding, you must explicitly save each of these properties in the video container, otherwise decoders will always assume square pixels.

Chromaticities

The chromaticities of NTSC and PAL are different, although both follow the ITU BT.601 standard. It is crucial to get them right, otherwise you will get skewed colors. This applies to both encoding and decoding. When decoding, you may need to override these properties if they are missing or incorrect. When encoding, you must explicitly save each of these properties in the video container, otherwise decoders will try to guess them, and that fails badly if the video is resized and/or deinterlaced with frame bobbing (doubling).

StandardMatrixPrimariesTransfer
BT.601 PALBT.470BGBT.470BGBT.709
BT.601 NTSCSMPTE 170MSMPTE 170MBT.709
BT.601 NTSC (old)BT.470MBT.470MBT.709

Source: H.273 specification

Encoder observations

All encoders below were compared at settings with equivalent encoding speed and output size. All latest versions were used as of 09/07/2022.

x264

Preserves noise and detail better, but causes rapidly shifting, blocky artifacts. Plays everywhere.

x265

Smoothens noise and detail, but results in significantly less, very evenly distributed, non-blocky artifacts. Plays on Safari and Edge. Requires codec on default Windows player.

SVT-AV1

30% faster encoding than the rest, while preserving the most noise and detail, has a moderate amount of rapidly shifting, blocky artifacts. Does not play on Safari or QuickTime. Requires codec on default Windows player.

About

Automatic SD video conversion script

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

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

Latest commit

History

13 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

sdconv

Automatic SD video conversion script

Usage

  1. Install Hybrid 2022.07.23.1 or later
  2. Run Hybrid
    1. Save a dummy global profile to ensure all directories are created
    2. Ensure the job queue is completely empty
  3. Use the script
usage: sdconv.py [-h] [-o OUT_DIR] [--rename | --no-rename] [--encode | --no-encode] [-c CUTOFF_SIZE]
[--profile PROFILE] [--preset PRESET] [--force | --no-force |-f] [--suffix SUFFIX]
[--keep-raw | --no-keep-raw] [--raw-suffix RAW_SUFFIX] INPUT [INPUT ...]
Automatic SD video conversion script.
positional arguments:
INPUT File or directory to convert. If a directory, will merge all files inside as chapters of a
single file. If you want to glob, use PowerShell: '(Get-Item E:\*)'.
options:
-h, --help show this help message and exit
-o OUT_DIR, --out-dir OUT_DIR
Directory where to save converted files. (default: .)
--rename, --no-rename
Rename files according to their modification timestamp. (default: False)
--encode, --no-encode
Encode the video after deinterlacing. If disabled, saves the raw video file. (default: True)
-c CUTOFF_SIZE, --cutoff-size CUTOFF_SIZE
Skip files smaller than this size in MiB. (default: 5)
--profile PROFILE Hybrid profile to use when deinterlacing. (default: profiles/pal.xml)
--preset PRESET Handbrake preset to use when encoding. (default: presets/av1.json)
--force, --no-force, -f
Force overwrite existing output files. (default: False)
--suffix SUFFIX Suffix to use for output files. (default: .final.mp4)
--keep-raw, --no-keep-raw
Keep raw video files when encoding. Will be reused to speed up subsequent encodes. (default: False)
--raw-suffix RAW_SUFFIX
Suffix to use for raw files, if applicable. (default: .raw.mkv)

Examples

  • Process all videos independently (input directory contains videos)
    python .\sdconv.py --profile ".\profiles\pal.xml"--preset ".\presets\av1.json"-o "E:\converted" (Get-Item"E:\input\*.avi")
  • Process videos by folder, merging chapters in a single file (input directory contains folders of videos)
    python .\sdconv.py --rename --profile ".\profiles\pal.xml"--preset ".\presets\av1.json"-o "E:\converted" (Get-Item"E:\input\*")

Process

  1. Deinterlace video/s using QTGMC in Hybrid. Output as UT Video since it is lossless, widely supported, and fast to encode and decode. Apply PAR and chromaticity hints to output video container (check following sections).
  2. If renaming is enabled, rename the output files to their modification time. This will be used to generate chapter names next.
  3. If a folder with multiple videos was input, merge the output files into a single video via mkvmerge, generating chapters from each file's name.
  4. If encoding is not disabled, encode the video/s using Handbrake.

Anamorphic dimensions

Pixels on SD video are not square. Instead, they are anamorphic - usually 16:15 for PAL, and 8:9 for NTSC. These dimensions are referred to as PAR (pixel aspect ratio), and when multiplied by the SAR (storage aspect ratio), they give the DAR (display aspect ratio), which for SD is usually 4:3.

Source: https://en.wikipedia.org/wiki/Pixel_aspect_ratio

It is crucual to get these ratios right, otherwise the video dimensions will be skewed. This applies to both encoding and decoding. When decoding, you may need to override these properties if they are missing or incorrect. When encoding, you must explicitly save each of these properties in the video container, otherwise decoders will always assume square pixels.

Chromaticities

The chromaticities of NTSC and PAL are different, although both follow the ITU BT.601 standard. It is crucial to get them right, otherwise you will get skewed colors. This applies to both encoding and decoding. When decoding, you may need to override these properties if they are missing or incorrect. When encoding, you must explicitly save each of these properties in the video container, otherwise decoders will try to guess them, and that fails badly if the video is resized and/or deinterlaced with frame bobbing (doubling).

StandardMatrixPrimariesTransfer
BT.601 PALBT.470BGBT.470BGBT.709
BT.601 NTSCSMPTE 170MSMPTE 170MBT.709
BT.601 NTSC (old)BT.470MBT.470MBT.709

Source: H.273 specification

Encoder observations

All encoders below were compared at settings with equivalent encoding speed and output size. All latest versions were used as of 09/07/2022.

x264

Preserves noise and detail better, but causes rapidly shifting, blocky artifacts. Plays everywhere.

x265

Smoothens noise and detail, but results in significantly less, very evenly distributed, non-blocky artifacts. Plays on Safari and Edge. Requires codec on default Windows player.

SVT-AV1

30% faster encoding than the rest, while preserving the most noise and detail, has a moderate amount of rapidly shifting, blocky artifacts. Does not play on Safari or QuickTime. Requires codec on default Windows player.

About

Automatic SD video conversion script

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

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

Latest commit

History

13 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

sdconv

Automatic SD video conversion script

Usage

  1. Install Hybrid 2022.07.23.1 or later
  2. Run Hybrid
    1. Save a dummy global profile to ensure all directories are created
    2. Ensure the job queue is completely empty
  3. Use the script
usage: sdconv.py [-h] [-o OUT_DIR] [--rename | --no-rename] [--encode | --no-encode] [-c CUTOFF_SIZE]
[--profile PROFILE] [--preset PRESET] [--force | --no-force |-f] [--suffix SUFFIX]
[--keep-raw | --no-keep-raw] [--raw-suffix RAW_SUFFIX] INPUT [INPUT ...]
Automatic SD video conversion script.
positional arguments:
INPUT File or directory to convert. If a directory, will merge all files inside as chapters of a
single file. If you want to glob, use PowerShell: '(Get-Item E:\*)'.
options:
-h, --help show this help message and exit
-o OUT_DIR, --out-dir OUT_DIR
Directory where to save converted files. (default: .)
--rename, --no-rename
Rename files according to their modification timestamp. (default: False)
--encode, --no-encode
Encode the video after deinterlacing. If disabled, saves the raw video file. (default: True)
-c CUTOFF_SIZE, --cutoff-size CUTOFF_SIZE
Skip files smaller than this size in MiB. (default: 5)
--profile PROFILE Hybrid profile to use when deinterlacing. (default: profiles/pal.xml)
--preset PRESET Handbrake preset to use when encoding. (default: presets/av1.json)
--force, --no-force, -f
Force overwrite existing output files. (default: False)
--suffix SUFFIX Suffix to use for output files. (default: .final.mp4)
--keep-raw, --no-keep-raw
Keep raw video files when encoding. Will be reused to speed up subsequent encodes. (default: False)
--raw-suffix RAW_SUFFIX
Suffix to use for raw files, if applicable. (default: .raw.mkv)

Examples

  • Process all videos independently (input directory contains videos)
    python .\sdconv.py --profile ".\profiles\pal.xml"--preset ".\presets\av1.json"-o "E:\converted" (Get-Item"E:\input\*.avi")
  • Process videos by folder, merging chapters in a single file (input directory contains folders of videos)
    python .\sdconv.py --rename --profile ".\profiles\pal.xml"--preset ".\presets\av1.json"-o "E:\converted" (Get-Item"E:\input\*")

Process

  1. Deinterlace video/s using QTGMC in Hybrid. Output as UT Video since it is lossless, widely supported, and fast to encode and decode. Apply PAR and chromaticity hints to output video container (check following sections).
  2. If renaming is enabled, rename the output files to their modification time. This will be used to generate chapter names next.
  3. If a folder with multiple videos was input, merge the output files into a single video via mkvmerge, generating chapters from each file's name.
  4. If encoding is not disabled, encode the video/s using Handbrake.

Anamorphic dimensions

Pixels on SD video are not square. Instead, they are anamorphic - usually 16:15 for PAL, and 8:9 for NTSC. These dimensions are referred to as PAR (pixel aspect ratio), and when multiplied by the SAR (storage aspect ratio), they give the DAR (display aspect ratio), which for SD is usually 4:3.

Source: https://en.wikipedia.org/wiki/Pixel_aspect_ratio

It is crucual to get these ratios right, otherwise the video dimensions will be skewed. This applies to both encoding and decoding. When decoding, you may need to override these properties if they are missing or incorrect. When encoding, you must explicitly save each of these properties in the video container, otherwise decoders will always assume square pixels.

Chromaticities

The chromaticities of NTSC and PAL are different, although both follow the ITU BT.601 standard. It is crucial to get them right, otherwise you will get skewed colors. This applies to both encoding and decoding. When decoding, you may need to override these properties if they are missing or incorrect. When encoding, you must explicitly save each of these properties in the video container, otherwise decoders will try to guess them, and that fails badly if the video is resized and/or deinterlaced with frame bobbing (doubling).

StandardMatrixPrimariesTransfer
BT.601 PALBT.470BGBT.470BGBT.709
BT.601 NTSCSMPTE 170MSMPTE 170MBT.709
BT.601 NTSC (old)BT.470MBT.470MBT.709

Source: H.273 specification

Encoder observations

All encoders below were compared at settings with equivalent encoding speed and output size. All latest versions were used as of 09/07/2022.

x264

Preserves noise and detail better, but causes rapidly shifting, blocky artifacts. Plays everywhere.

x265

Smoothens noise and detail, but results in significantly less, very evenly distributed, non-blocky artifacts. Plays on Safari and Edge. Requires codec on default Windows player.

SVT-AV1

30% faster encoding than the rest, while preserving the most noise and detail, has a moderate amount of rapidly shifting, blocky artifacts. Does not play on Safari or QuickTime. Requires codec on default Windows player.

About

Automatic SD video conversion script

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

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

Latest commit

History

13 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

sdconv

Automatic SD video conversion script

Usage

  1. Install Hybrid 2022.07.23.1 or later
  2. Run Hybrid
    1. Save a dummy global profile to ensure all directories are created
    2. Ensure the job queue is completely empty
  3. Use the script
usage: sdconv.py [-h] [-o OUT_DIR] [--rename | --no-rename] [--encode | --no-encode] [-c CUTOFF_SIZE]
[--profile PROFILE] [--preset PRESET] [--force | --no-force |-f] [--suffix SUFFIX]
[--keep-raw | --no-keep-raw] [--raw-suffix RAW_SUFFIX] INPUT [INPUT ...]
Automatic SD video conversion script.
positional arguments:
INPUT File or directory to convert. If a directory, will merge all files inside as chapters of a
single file. If you want to glob, use PowerShell: '(Get-Item E:\*)'.
options:
-h, --help show this help message and exit
-o OUT_DIR, --out-dir OUT_DIR
Directory where to save converted files. (default: .)
--rename, --no-rename
Rename files according to their modification timestamp. (default: False)
--encode, --no-encode
Encode the video after deinterlacing. If disabled, saves the raw video file. (default: True)
-c CUTOFF_SIZE, --cutoff-size CUTOFF_SIZE
Skip files smaller than this size in MiB. (default: 5)
--profile PROFILE Hybrid profile to use when deinterlacing. (default: profiles/pal.xml)
--preset PRESET Handbrake preset to use when encoding. (default: presets/av1.json)
--force, --no-force, -f
Force overwrite existing output files. (default: False)
--suffix SUFFIX Suffix to use for output files. (default: .final.mp4)
--keep-raw, --no-keep-raw
Keep raw video files when encoding. Will be reused to speed up subsequent encodes. (default: False)
--raw-suffix RAW_SUFFIX
Suffix to use for raw files, if applicable. (default: .raw.mkv)

Examples

  • Process all videos independently (input directory contains videos)
    python .\sdconv.py --profile ".\profiles\pal.xml"--preset ".\presets\av1.json"-o "E:\converted" (Get-Item"E:\input\*.avi")
  • Process videos by folder, merging chapters in a single file (input directory contains folders of videos)
    python .\sdconv.py --rename --profile ".\profiles\pal.xml"--preset ".\presets\av1.json"-o "E:\converted" (Get-Item"E:\input\*")

Process

  1. Deinterlace video/s using QTGMC in Hybrid. Output as UT Video since it is lossless, widely supported, and fast to encode and decode. Apply PAR and chromaticity hints to output video container (check following sections).
  2. If renaming is enabled, rename the output files to their modification time. This will be used to generate chapter names next.
  3. If a folder with multiple videos was input, merge the output files into a single video via mkvmerge, generating chapters from each file's name.
  4. If encoding is not disabled, encode the video/s using Handbrake.

Anamorphic dimensions

Pixels on SD video are not square. Instead, they are anamorphic - usually 16:15 for PAL, and 8:9 for NTSC. These dimensions are referred to as PAR (pixel aspect ratio), and when multiplied by the SAR (storage aspect ratio), they give the DAR (display aspect ratio), which for SD is usually 4:3.

Source: https://en.wikipedia.org/wiki/Pixel_aspect_ratio

It is crucual to get these ratios right, otherwise the video dimensions will be skewed. This applies to both encoding and decoding. When decoding, you may need to override these properties if they are missing or incorrect. When encoding, you must explicitly save each of these properties in the video container, otherwise decoders will always assume square pixels.

Chromaticities

The chromaticities of NTSC and PAL are different, although both follow the ITU BT.601 standard. It is crucial to get them right, otherwise you will get skewed colors. This applies to both encoding and decoding. When decoding, you may need to override these properties if they are missing or incorrect. When encoding, you must explicitly save each of these properties in the video container, otherwise decoders will try to guess them, and that fails badly if the video is resized and/or deinterlaced with frame bobbing (doubling).

StandardMatrixPrimariesTransfer
BT.601 PALBT.470BGBT.470BGBT.709
BT.601 NTSCSMPTE 170MSMPTE 170MBT.709
BT.601 NTSC (old)BT.470MBT.470MBT.709

Source: H.273 specification

Encoder observations

All encoders below were compared at settings with equivalent encoding speed and output size. All latest versions were used as of 09/07/2022.

x264

Preserves noise and detail better, but causes rapidly shifting, blocky artifacts. Plays everywhere.

x265

Smoothens noise and detail, but results in significantly less, very evenly distributed, non-blocky artifacts. Plays on Safari and Edge. Requires codec on default Windows player.

SVT-AV1

30% faster encoding than the rest, while preserving the most noise and detail, has a moderate amount of rapidly shifting, blocky artifacts. Does not play on Safari or QuickTime. Requires codec on default Windows player.

About

Automatic SD video conversion script

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

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

Latest commit

History

13 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

sdconv

Automatic SD video conversion script

Usage

  1. Install Hybrid 2022.07.23.1 or later
  2. Run Hybrid
    1. Save a dummy global profile to ensure all directories are created
    2. Ensure the job queue is completely empty
  3. Use the script
usage: sdconv.py [-h] [-o OUT_DIR] [--rename | --no-rename] [--encode | --no-encode] [-c CUTOFF_SIZE]
[--profile PROFILE] [--preset PRESET] [--force | --no-force |-f] [--suffix SUFFIX]
[--keep-raw | --no-keep-raw] [--raw-suffix RAW_SUFFIX] INPUT [INPUT ...]
Automatic SD video conversion script.
positional arguments:
INPUT File or directory to convert. If a directory, will merge all files inside as chapters of a
single file. If you want to glob, use PowerShell: '(Get-Item E:\*)'.
options:
-h, --help show this help message and exit
-o OUT_DIR, --out-dir OUT_DIR
Directory where to save converted files. (default: .)
--rename, --no-rename
Rename files according to their modification timestamp. (default: False)
--encode, --no-encode
Encode the video after deinterlacing. If disabled, saves the raw video file. (default: True)
-c CUTOFF_SIZE, --cutoff-size CUTOFF_SIZE
Skip files smaller than this size in MiB. (default: 5)
--profile PROFILE Hybrid profile to use when deinterlacing. (default: profiles/pal.xml)
--preset PRESET Handbrake preset to use when encoding. (default: presets/av1.json)
--force, --no-force, -f
Force overwrite existing output files. (default: False)
--suffix SUFFIX Suffix to use for output files. (default: .final.mp4)
--keep-raw, --no-keep-raw
Keep raw video files when encoding. Will be reused to speed up subsequent encodes. (default: False)
--raw-suffix RAW_SUFFIX
Suffix to use for raw files, if applicable. (default: .raw.mkv)

Examples

  • Process all videos independently (input directory contains videos)
    python .\sdconv.py --profile ".\profiles\pal.xml"--preset ".\presets\av1.json"-o "E:\converted" (Get-Item"E:\input\*.avi")
  • Process videos by folder, merging chapters in a single file (input directory contains folders of videos)
    python .\sdconv.py --rename --profile ".\profiles\pal.xml"--preset ".\presets\av1.json"-o "E:\converted" (Get-Item"E:\input\*")

Process

  1. Deinterlace video/s using QTGMC in Hybrid. Output as UT Video since it is lossless, widely supported, and fast to encode and decode. Apply PAR and chromaticity hints to output video container (check following sections).
  2. If renaming is enabled, rename the output files to their modification time. This will be used to generate chapter names next.
  3. If a folder with multiple videos was input, merge the output files into a single video via mkvmerge, generating chapters from each file's name.
  4. If encoding is not disabled, encode the video/s using Handbrake.

Anamorphic dimensions

Pixels on SD video are not square. Instead, they are anamorphic - usually 16:15 for PAL, and 8:9 for NTSC. These dimensions are referred to as PAR (pixel aspect ratio), and when multiplied by the SAR (storage aspect ratio), they give the DAR (display aspect ratio), which for SD is usually 4:3.

Source: https://en.wikipedia.org/wiki/Pixel_aspect_ratio

It is crucual to get these ratios right, otherwise the video dimensions will be skewed. This applies to both encoding and decoding. When decoding, you may need to override these properties if they are missing or incorrect. When encoding, you must explicitly save each of these properties in the video container, otherwise decoders will always assume square pixels.

Chromaticities

The chromaticities of NTSC and PAL are different, although both follow the ITU BT.601 standard. It is crucial to get them right, otherwise you will get skewed colors. This applies to both encoding and decoding. When decoding, you may need to override these properties if they are missing or incorrect. When encoding, you must explicitly save each of these properties in the video container, otherwise decoders will try to guess them, and that fails badly if the video is resized and/or deinterlaced with frame bobbing (doubling).

StandardMatrixPrimariesTransfer
BT.601 PALBT.470BGBT.470BGBT.709
BT.601 NTSCSMPTE 170MSMPTE 170MBT.709
BT.601 NTSC (old)BT.470MBT.470MBT.709

Source: H.273 specification

Encoder observations

All encoders below were compared at settings with equivalent encoding speed and output size. All latest versions were used as of 09/07/2022.

x264

Preserves noise and detail better, but causes rapidly shifting, blocky artifacts. Plays everywhere.

x265

Smoothens noise and detail, but results in significantly less, very evenly distributed, non-blocky artifacts. Plays on Safari and Edge. Requires codec on default Windows player.

SVT-AV1

30% faster encoding than the rest, while preserving the most noise and detail, has a moderate amount of rapidly shifting, blocky artifacts. Does not play on Safari or QuickTime. Requires codec on default Windows player.

About

Automatic SD video conversion script

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

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

Latest commit

History

13 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

sdconv

Automatic SD video conversion script

Usage

  1. Install Hybrid 2022.07.23.1 or later
  2. Run Hybrid
    1. Save a dummy global profile to ensure all directories are created
    2. Ensure the job queue is completely empty
  3. Use the script
usage: sdconv.py [-h] [-o OUT_DIR] [--rename | --no-rename] [--encode | --no-encode] [-c CUTOFF_SIZE]
[--profile PROFILE] [--preset PRESET] [--force | --no-force |-f] [--suffix SUFFIX]
[--keep-raw | --no-keep-raw] [--raw-suffix RAW_SUFFIX] INPUT [INPUT ...]
Automatic SD video conversion script.
positional arguments:
INPUT File or directory to convert. If a directory, will merge all files inside as chapters of a
single file. If you want to glob, use PowerShell: '(Get-Item E:\*)'.
options:
-h, --help show this help message and exit
-o OUT_DIR, --out-dir OUT_DIR
Directory where to save converted files. (default: .)
--rename, --no-rename
Rename files according to their modification timestamp. (default: False)
--encode, --no-encode
Encode the video after deinterlacing. If disabled, saves the raw video file. (default: True)
-c CUTOFF_SIZE, --cutoff-size CUTOFF_SIZE
Skip files smaller than this size in MiB. (default: 5)
--profile PROFILE Hybrid profile to use when deinterlacing. (default: profiles/pal.xml)
--preset PRESET Handbrake preset to use when encoding. (default: presets/av1.json)
--force, --no-force, -f
Force overwrite existing output files. (default: False)
--suffix SUFFIX Suffix to use for output files. (default: .final.mp4)
--keep-raw, --no-keep-raw
Keep raw video files when encoding. Will be reused to speed up subsequent encodes. (default: False)
--raw-suffix RAW_SUFFIX
Suffix to use for raw files, if applicable. (default: .raw.mkv)

Examples

  • Process all videos independently (input directory contains videos)
    python .\sdconv.py --profile ".\profiles\pal.xml"--preset ".\presets\av1.json"-o "E:\converted" (Get-Item"E:\input\*.avi")
  • Process videos by folder, merging chapters in a single file (input directory contains folders of videos)
    python .\sdconv.py --rename --profile ".\profiles\pal.xml"--preset ".\presets\av1.json"-o "E:\converted" (Get-Item"E:\input\*")

Process

  1. Deinterlace video/s using QTGMC in Hybrid. Output as UT Video since it is lossless, widely supported, and fast to encode and decode. Apply PAR and chromaticity hints to output video container (check following sections).
  2. If renaming is enabled, rename the output files to their modification time. This will be used to generate chapter names next.
  3. If a folder with multiple videos was input, merge the output files into a single video via mkvmerge, generating chapters from each file's name.
  4. If encoding is not disabled, encode the video/s using Handbrake.

Anamorphic dimensions

Pixels on SD video are not square. Instead, they are anamorphic - usually 16:15 for PAL, and 8:9 for NTSC. These dimensions are referred to as PAR (pixel aspect ratio), and when multiplied by the SAR (storage aspect ratio), they give the DAR (display aspect ratio), which for SD is usually 4:3.

Source: https://en.wikipedia.org/wiki/Pixel_aspect_ratio

It is crucual to get these ratios right, otherwise the video dimensions will be skewed. This applies to both encoding and decoding. When decoding, you may need to override these properties if they are missing or incorrect. When encoding, you must explicitly save each of these properties in the video container, otherwise decoders will always assume square pixels.

Chromaticities

The chromaticities of NTSC and PAL are different, although both follow the ITU BT.601 standard. It is crucial to get them right, otherwise you will get skewed colors. This applies to both encoding and decoding. When decoding, you may need to override these properties if they are missing or incorrect. When encoding, you must explicitly save each of these properties in the video container, otherwise decoders will try to guess them, and that fails badly if the video is resized and/or deinterlaced with frame bobbing (doubling).

StandardMatrixPrimariesTransfer
BT.601 PALBT.470BGBT.470BGBT.709
BT.601 NTSCSMPTE 170MSMPTE 170MBT.709
BT.601 NTSC (old)BT.470MBT.470MBT.709

Source: H.273 specification

Encoder observations

All encoders below were compared at settings with equivalent encoding speed and output size. All latest versions were used as of 09/07/2022.

x264

Preserves noise and detail better, but causes rapidly shifting, blocky artifacts. Plays everywhere.

x265

Smoothens noise and detail, but results in significantly less, very evenly distributed, non-blocky artifacts. Plays on Safari and Edge. Requires codec on default Windows player.

SVT-AV1

30% faster encoding than the rest, while preserving the most noise and detail, has a moderate amount of rapidly shifting, blocky artifacts. Does not play on Safari or QuickTime. Requires codec on default Windows player.

About

Automatic SD video conversion script

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages