Compare commits

...

24 Commits

Author SHA1 Message Date
Ashley
f2ec08fd59 Merge pull request #321 from amiaopensource/decoder-details
Decoder details
2018-04-22 13:26:27 -04:00
Ashley Blewer
32004553a6 space fix in ffv1 fixity recipe too 2018-04-22 13:25:34 -04:00
Ashley Blewer
a67b7cc879 rm space 2018-04-22 13:18:34 -04:00
Ashley
b9da657b19 Merge pull request #318 from amiaopensource/rm-google-fonts
removes calls to google fonts CDN
2018-04-22 13:16:33 -04:00
Ashley
91e929dab4 Merge pull request #322 from amiaopensource/updates-contributor-list
Updates contributor list
2018-04-22 13:14:31 -04:00
Ashley Blewer
21e5561dc9 sneaks addition of cable bible into sister projects 2018-04-22 12:58:46 -04:00
Ashley Blewer
36deb1ea62 sub github for code for clarity in both places 2018-04-22 12:55:46 -04:00
Ashley Blewer
89139311f4 updates contributors list, we have grown 2018-04-22 12:55:23 -04:00
Ashley Blewer
fb6581a50e adds back undecided font detail 2018-04-22 12:46:18 -04:00
Ashley Blewer
5bdd6f8d8a adds check decoder errors recipe 2018-04-17 09:56:22 -04:00
Ashley Blewer
3b7ce0e79f moves Check FFV1 alphabetically for section 2018-04-17 09:52:13 -04:00
Ashley
b9b7e0fef9 adds show/hide all button (#319)
resolves https://github.com/amiaopensource/ffmprovisr/issues/211
2018-04-16 21:22:12 +02:00
Ashley Blewer
95e90bb26b clean singular font styling 2018-04-15 09:36:49 -04:00
Ashley Blewer
d70a1de6e1 removes line to google fonts 2018-04-15 09:34:33 -04:00
Ashley Blewer
8417883004 removes calls to google fonts CDN 2018-04-14 20:35:46 -04:00
Reto Kromer
937b9ae525 Merge pull request #317 (add ProRes 4444 XQ) 2018-04-14 20:22:19 +02:00
Reto Kromer
d46138a81b add ProRes 4444 XQ 2018-04-14 17:34:31 +02:00
Reto Kromer
e6317731c9 add missing space 2018-04-14 12:36:03 +02:00
Andrew Weaver
0849bd29e4 rewrap dv codec to .dv (#316) 2018-04-03 19:22:34 +02:00
Ashley
b2d5fcadf3 Merge pull request #315 from amiaopensource/italic
use italic
2018-03-30 11:40:13 -04:00
Reto Kromer
05395f4670 use italic 2018-03-30 10:01:48 +02:00
Ashley
078d20824c Merge pull request #314 from amiaopensource/imagemagick
adds imagemagick section
2018-03-29 13:32:00 -04:00
Ashley Blewer
44c8661e96 subs amp for escaped amp 2018-03-29 13:28:00 -04:00
Ashley Blewer
13bc9bef10 adds imagemagick section 2018-03-29 11:46:02 -04:00
4 changed files with 166 additions and 34 deletions

View File

@@ -1,6 +1,7 @@
html, body { html, body {
line-height: 1.5; line-height: 1.5;
font-size: 16px; font-size: 18px;
font-family: sans-serif;
color: #888888; color: #888888;
background-color: #060606; background-color: #060606;
margin: 0; margin: 0;
@@ -88,9 +89,6 @@ a:visited {
display: inline; display: inline;
} }
h1, h2, h3, h4, h5, h6 {
font-family: 'Montserrat', sans-serif;
}
h1 { h1 {
letter-spacing: 0.1em; letter-spacing: 0.1em;
@@ -116,7 +114,6 @@ h4 {
} }
.intro-lead { .intro-lead {
font-family: 'Montserrat', sans-serif;
font-size: 1em; font-size: 1em;
} }
@@ -165,7 +162,6 @@ img {
} }
div { div {
font-family: 'Merriweather', serif;
color: white; color: white;
} }
@@ -177,7 +173,6 @@ div {
color: white; color: white;
background-color: #383838; background-color: #383838;
padding: 14px; padding: 14px;
font-family: "Montserrat";
letter-spacing: 0.05em; letter-spacing: 0.05em;
border: 1px solid black; border: 1px solid black;
cursor: pointer; cursor: pointer;

View File

@@ -3,7 +3,6 @@
<head> <head>
<title>ffmprovisr</title> <title>ffmprovisr</title>
<meta name="viewport" charset="utf-8" content="text/html, width=device-width, initial-scale=1"> <meta name="viewport" charset="utf-8" content="text/html, width=device-width, initial-scale=1">
<link href="https://fonts.googleapis.com/css?family=Montserrat%7CMerriweather" rel="stylesheet" type="text/css">
<link rel="stylesheet" href="css/css.css"> <link rel="stylesheet" href="css/css.css">
<link rel="icon" href="img/vhs.ico"> <link rel="icon" href="img/vhs.ico">
<script src="js/jquery.min.js"></script> <script src="js/jquery.min.js"></script>
@@ -19,6 +18,7 @@
<nav class="sidebar well"> <nav class="sidebar well">
<h2 class="heading">Table of Contents</h2> <h2 class="heading">Table of Contents</h2>
<a href="#about"><div class="contents-list">About this resource</div></a> <a href="#about"><div class="contents-list">About this resource</div></a>
<div id="open-all" class="contents-list">Show/hide all recipes</div>
<a href="#basics"><div class="contents-list">FFmpeg basics</div></a> <a href="#basics"><div class="contents-list">FFmpeg basics</div></a>
<a href="#concepts"><div class="contents-list">Advanced FFmpeg concepts</div></a> <a href="#concepts"><div class="contents-list">Advanced FFmpeg concepts</div></a>
<a href="#rewrap"><div class="contents-list">Change container (rewrap)</div></a> <a href="#rewrap"><div class="contents-list">Change container (rewrap)</div></a>
@@ -37,6 +37,8 @@
<a href="#ocr"><div class="contents-list">Use OCR</div></a> <a href="#ocr"><div class="contents-list">Use OCR</div></a>
<a href="#perceptual-similarity"><div class="contents-list">Compare similarity of videos</div></a> <a href="#perceptual-similarity"><div class="contents-list">Compare similarity of videos</div></a>
<a href="#other"><div class="contents-list">Something else</div></a> <a href="#other"><div class="contents-list">Something else</div></a>
<a href="#similar-tools"><div class="contents-list">Similar tools: tips &amp; tricks</div></a>
<a href="#imagemagick"><div class="contents-list">ImageMagick</div></a>
</nav> </nav>
<div class="content"> <div class="content">
@@ -45,6 +47,7 @@
<span class="intro-lead">Making FFmpeg Easier</span> <span class="intro-lead">Making FFmpeg Easier</span>
<p>FFmpeg is a powerful tool for manipulating audiovisual files. Unfortunately, it also has a steep learning curve, especially for users unfamiliar with a command line interface. This app helps users through the command generation process so that more people can reap the benefits of FFmpeg.</p> <p>FFmpeg is a powerful tool for manipulating audiovisual files. Unfortunately, it also has a steep learning curve, especially for users unfamiliar with a command line interface. This app helps users through the command generation process so that more people can reap the benefits of FFmpeg.</p>
<p>Each button displays helpful information about how to perform a wide variety of tasks using FFmpeg. To use this site, click on the task you would like to perform. A new window will open up with a sample command and a description of how that command works. You can copy this command and understand how the command works with a breakdown of each of the flags.</p> <p>Each button displays helpful information about how to perform a wide variety of tasks using FFmpeg. To use this site, click on the task you would like to perform. A new window will open up with a sample command and a description of how that command works. You can copy this command and understand how the command works with a breakdown of each of the flags.</p>
<p>This page does not have search functionality, but you can open all recipes (second option in the sidebar) and use your browser's search tool (often ctrl+f or cmd+f) to perform a keyword search through all recipes.</p>
<span class="intro-lead">Tutorials</span> <span class="intro-lead">Tutorials</span>
<p>For FFmpeg basics, check out the programs <a href="https://ffmpeg.org/" target="_blank">official website</a>.</p> <p>For FFmpeg basics, check out the programs <a href="https://ffmpeg.org/" target="_blank">official website</a>.</p>
<p>For instructions on how to install FFmpeg on Mac, Linux, and Windows, refer to Reto Kromers <a href="https://avpres.net/FFmpeg/#ch1" target="_blank">installation instructions</a>.</p> <p>For instructions on how to install FFmpeg on Mac, Linux, and Windows, refer to Reto Kromers <a href="https://avpres.net/FFmpeg/#ch1" target="_blank">installation instructions</a>.</p>
@@ -210,6 +213,24 @@
</div> </div>
<!-- ends MKV to MP4 --> <!-- ends MKV to MP4 -->
<!-- Rewrap DV -->
<label class="recipe" for="rewrap-dv">Rewrap DV video to .dv file</label>
<input type="checkbox" id="rewrap-dv">
<div class="hiding">
<h3>Rewrap DV video to .dv file</h3>
<p><code>ffmpeg -i <i>input_file</i> -f rawvideo -c:v copy <i>output_file.dv</i></code></p>
<p>This script will take a video that is encoded in the <a href="https://en.wikipedia.org/wiki/DV">DV Codec</a> but wrapped in a different container (such as MOV) and rewrap it into a raw DV file (with the .dv extension). Since DV files potentially contain a great deal of provenance metadata within the DV stream, it is necessary to rewrap files in this method to avoid unintentional stripping of this metadata.</p>
<dl>
<dt>ffmpeg</dt><dd>starts the command</dd>
<dt>-i <i>input_file</i></dt><dd>path and name of the input file</dd>
<dt>-f rawvideo</dt><dd>this tells FFmpeg to pass the video stream as raw video data without remuxing. This step is what ensures the survival of embedded metadata versus a standard rewrap.</dd>
<dt>-c:v copy</dt><dd>copy the DV stream directly, without re-encoding.</dd>
<dt><i>output_file.dv</i></dt><dd>tells FFmpeg to use the DV wrapper for the output.</dd>
</dl>
<p class="link"></p>
</div>
<!-- Rewrap DV -->
</div> </div>
<div class="well"> <div class="well">
<h2 id="transcode">Change codec (transcode)</h2> <h2 id="transcode">Change codec (transcode)</h2>
@@ -240,7 +261,7 @@
<p>FFmpeg comes with more than one ProRes encoder:</p> <p>FFmpeg comes with more than one ProRes encoder:</p>
<ul> <ul>
<li><code>prores</code> is much faster, can be used for progressive video only, and seems to be better for video according to Rec. 601 (Recommendation ITU-R BT.601).</li> <li><code>prores</code> is much faster, can be used for progressive video only, and seems to be better for video according to Rec. 601 (Recommendation ITU-R BT.601).</li>
<li><code>prores_ks</code> generates a better file, can also be used for interlaced video, allows also encoding of ProRes 4444 (<code>-c:v prores_ks -profile:v 4</code>), and seems to be better for video according to Rec. 709 (Recommendation ITU-R BT.709).</li> <li><code>prores_ks</code> generates a better file, can also be used for interlaced video, allows also encoding of ProRes 4444 (<code>-c:v prores_ks -profile:v 4</code>) and ProRes 4444 XQ (<code>-c:v prores_ks -profile:v 5</code>), and seems to be better for video according to Rec. 709 (Recommendation ITU-R BT.709).</li>
</ul> </ul>
<p class="link"></p> <p class="link"></p>
</div> </div>
@@ -1689,6 +1710,42 @@
</div> </div>
<!-- ends batch processing (Windows) --> <!-- ends batch processing (Windows) -->
<!-- Check decoder errors -->
<label class="recipe" for="check_decoder_errors">Check decoder errors</label>
<input type="checkbox" id="check_decoder_errors">
<div class="hiding">
<h3>Check decoder errors</h3>
<p><code>ffmpeg -i <i>input_file</i> -f null -</code></p>
<p>This decodes your video and prints any errors or found issues to the screen.</p>
<dl>
<dt>ffmpeg</dt><dd>starts the command</dd>
<dt>-i <i>input_file</i></dt><dd>path, name and extension of the input file</dd>
<dt>-f null</dt><dd>Video is decoded with the <code>null</code> muxer. This allows video decoding without creating an output file.</dd>
<dt>-</dt><dd>FFmpeg syntax requires a specified output, and <code>-</code> is just a place holder. No file is actually created.</dd>
</dl>
<p class="link"></p>
</div>
<!-- ends Check decoder errors -->
<!-- Check FFV1 fixity -->
<label class="recipe" for="check_FFV1_fixity">Check FFV1 fixity</label>
<input type="checkbox" id="check_FFV1_fixity">
<div class="hiding">
<h3>Check FFV1 Version 3 fixity</h3>
<p><code>ffmpeg -report -i <i>input_file</i> -f null -</code></p>
<p>This decodes your video and displays any CRC checksum mismatches. These errors will display in your terminal like this: <code>[ffv1 @ 0x1b04660] CRC mismatch 350FBD8A!at 0.272000 seconds</code></p>
<p>Frame CRCs are enabled by default in FFV1 Version 3.</p>
<dl>
<dt>ffmpeg</dt><dd>starts the command</dd>
<dt>-report</dt><dd>Dump full command line and console output to a file named <i>ffmpeg-YYYYMMDD-HHMMSS.log</i> in the current directory. It also implies <code>-loglevel verbose</code>.</dd>
<dt>-i <i>input_file</i></dt><dd>path, name and extension of the input file</dd>
<dt>-f null</dt><dd>Video is decoded with the <code>null</code> muxer. This allows video decoding without creating an output file.</dd>
<dt>-</dt><dd>FFmpeg syntax requires a specified output, and <code>-</code> is just a place holder. No file is actually created.</dd>
</dl>
<p class="link"></p>
</div>
<!-- ends Check FFV1 Fixity -->
<!-- Create frame md5s --> <!-- Create frame md5s -->
<label class="recipe" for="create_frame_md5s_v">Create MD5 checksums (video frames)</label> <label class="recipe" for="create_frame_md5s_v">Create MD5 checksums (video frames)</label>
<input type="checkbox" id="create_frame_md5s_v"> <input type="checkbox" id="create_frame_md5s_v">
@@ -1807,25 +1864,6 @@
</div> </div>
<!-- ends QCTools Report (no audio) --> <!-- ends QCTools Report (no audio) -->
<!-- Check FFV1 fixity -->
<label class="recipe" for="check_FFV1_fixity">Check FFV1 fixity</label>
<input type="checkbox" id="check_FFV1_fixity">
<div class="hiding">
<h3>Check FFV1 Version 3 fixity</h3>
<p><code>ffmpeg -report -i <i>input_file</i> -f null -</code></p>
<p>This decodes your video and displays any CRC checksum mismatches. These errors will display in your terminal like this: <code>[ffv1 @ 0x1b04660] CRC mismatch 350FBD8A!at 0.272000 seconds</code></p>
<p>Frame CRCs are enabled by default in FFV1 Version 3.</p>
<dl>
<dt>ffmpeg</dt><dd>starts the command</dd>
<dt>-report</dt><dd>Dump full command line and console output to a file named <i>ffmpeg-YYYYMMDD-HHMMSS.log</i> in the current directory. It also implies <code>-loglevel verbose</code>.</dd>
<dt>-i <i>input_file</i></dt><dd>path, name and extension of the input file</dd>
<dt>-f null</dt><dd>Video is decoded with the <code>null</code> muxer. This allows video decoding without creating an output file.</dd>
<dt>-</dt><dd>FFmpeg syntax requires a specified output, and <code>-</code> is just a place holder. No file is actually created. </dd>
</dl>
<p class="link"></p>
</div>
<!-- ends Check FFV1 Fixity -->
<!-- Read/Extract EIA-608 Closed Captions --> <!-- Read/Extract EIA-608 Closed Captions -->
<label class="recipe" for="readeia608">Read/Extract EIA-608 Closed Captioning</label> <label class="recipe" for="readeia608">Read/Extract EIA-608 Closed Captioning</label>
<input type="checkbox" id="readeia608"> <input type="checkbox" id="readeia608">
@@ -2309,6 +2347,86 @@
</div> </div>
<!-- ends View Subprogram info --> <!-- ends View Subprogram info -->
</div> </div>
<div class="well">
<h2 id="similar-tools">Similar tools: tips &amp; tricks 🎩🐰</h2>
<div class="well">
<p>This section introduces and explains the usage of some additional command line tools similar to FFmpeg for use in digital preservation workflows (and beyond!).</p>
</div>
</div>
<div class="well">
<h2 id="imagemagick">ImageMagick</h2>
<!-- About ImageMagick -->
<label class="recipe" for="im-basics">About ImageMagick</label>
<input type="checkbox" id="im-basics">
<div class="hiding">
<h3>About ImageMagick</h3>
<p>ImageMagick is a free and open-source software suite for displaying, converting, and editing raster image and vector image files.</p>
<p>It's official website can be found <a href="https://www.imagemagick.org/script/index.php">here</a>.</p>
<p>Another great resource with lots of supplemental explanations of filters is available at <a href="http://www.fmwconcepts.com/imagemagick/index.php">Fred's ImageMagick Scripts</a>.</p>
<p>Unlike many other command line tools, ImageMagick isn't summoned by calling its name. Rather, ImageMagick installs links to several more specific commands: <code>convert</code>, <code>montage</code>, and <code>mogrify</code>, to name a few.</p>
<p class="link"></p>
</div>
<!-- End About ImageMagick -->
<!-- Resize to width -->
<label class="recipe" for="im_resize">Resizes image to specific pixel width</label>
<input type="checkbox" id="im_resize">
<div class="hiding">
<h3>Resize to width</h3>
<p><code>convert <i>input_file.ext</i> -resize 750 <i>output_file.ext</i></code></p>
<p>This script will also convert the file format, if the output has a different file extension than the input.</p>
<dl>
<dt>convert</dt><dd>starts the command</dd>
<dt>-i <i>input_file.ext</i></dt><dd>path and name of the input file</dd>
<dt>-resize 750</dt><dd>resizes the image to 750 pixels wide, retaining aspect ratio</dd>
<dt><i>output_file.ext</i></dt><dd>path and name of the output file</dd>
</dl>
<p class="link"></p>
</div>
<!-- ends Resize to width -->
<!-- Create thumbnails -->
<label class="recipe" for="im_thumbs">Create thumbnails of images</label>
<input type="checkbox" id="im_thumbs">
<div class="hiding">
<h3>Create thumbnails</h3>
<p>Creates thumbnails for all files in a folder and saves them in that folder.</p>
<p><code>mogrify -resize 80x80 -format jpg -quality 75 -path thumbs *.jpg</code></p>
<dl>
<dt>montage</dt><dd>starts the command</dd>
<dt>-resize 80x80</dt><dd>resizes copies of original images to 80x80 pixels</dd>
<dt>-format jpg</dt><dd>reformats original images to jpg</dd>
<dt>-quality 75</dt><dd>sets quality to 75 (out of 100), adding light compression to smaller files</dd>
<dt>-path thumbs</dt><dd>specifies where to save the thumbnails -- this goes to a folder within the active folder called "thumbs".<br>
Note: You will have to make this folder if it doesn't already exist.</dd>
<dt><i>*.jpg</i></dt><dd>The astericks acts as a "wildcard" to be applied to every file in the directory.</dd>
</dl>
<p class="link"></p>
</div>
<!-- ends Create thumbnails -->
<!-- Create grid of images -->
<label class="recipe" for="im_grid">Creates grid of images from text file</label>
<input type="checkbox" id="im_grid">
<div class="hiding">
<h3>Create grid of images</h3>
<p><code>montage @<i>list.txt</i> -tile 6x12 -geometry +0+0 <i>output_grid.jpg</i></code></p>
<dl>
<dt>montage</dt><dd>starts the command</dd>
<dt>@list.txt</dt><dd>path and name of a text file containing a list of filenames, one per each line</dd>
<dt>-tile 6x12</dt><dd>specifies the dimensions of the proposed grid (6 images wide, 12 images long)</dd>
<dt>-geometry +0+0</dt><dd>specifies to include no spacing around any of the tiles; they will be flush against each other</dd>
<dt><i>output_grid.jpg</i></dt><dd>path and name of the output file</dd>
</dl>
<p class="link"></p>
</div>
<!-- ends Create grid of images -->
</div>
</div><!-- ends "content" --> </div><!-- ends "content" -->
<!-- sample example --> <!-- sample example -->

View File

@@ -18,4 +18,10 @@ $(document).ready(function() {
$('#' + id).closest('div').find('.link').append("<small>Link to this command: <a href='https://amiaopensource.github.io/ffmprovisr/index.html"+window.location.hash+"'>https://amiaopensource.github.io/ffmprovisr/index.html"+window.location.hash+"</a></small>"); $('#' + id).closest('div').find('.link').append("<small>Link to this command: <a href='https://amiaopensource.github.io/ffmprovisr/index.html"+window.location.hash+"'>https://amiaopensource.github.io/ffmprovisr/index.html"+window.location.hash+"</a></small>");
}); });
$('#open-all').on("click", function(){
$('input[type=checkbox]').each(function(){
this.checked = !this.checked;
})
});
}); });

View File

@@ -49,10 +49,13 @@ You can read our contributor code of conduct [here](https://github.com/amiaopens
## Contributors ## Contributors
* Gathered using [octohatrack](https://github.com/LABHR/octohatrack) * Gathered using [octohatrack](https://github.com/LABHR/octohatrack)
*GitHub Contributors*: *Code Contributors*:
ablwr (Ashley) ablwr (Ashley)
bastibeckr (Basti Becker)
bturkus
dericed (Dave Rice) dericed (Dave Rice)
edsu (Ed Summers) edsu (Ed Summers)
jamessam (Jim Sam)
jfarbowitz (Jonathan Farbowitz) jfarbowitz (Jonathan Farbowitz)
kfrn (Katherine Frances Nagels) kfrn (Katherine Frances Nagels)
kgrons (Kathryn Gronsbell) kgrons (Kathryn Gronsbell)
@@ -62,17 +65,23 @@ pjotrek-b (Peter B.)
privatezero (Andrew Weaver) privatezero (Andrew Weaver)
retokromer (Reto Kromer) retokromer (Reto Kromer)
rfraimow rfraimow
*All Contributors*: *All Contributors*:
ablwr (Ashley) ablwr (Ashley)
audiovisualopen audiovisualopen
bastibeckr (Basti Becker)
brainwane (Sumana Harihareswara) brainwane (Sumana Harihareswara)
bturkus bturkus
dericed (Dave Rice) dericed (Dave Rice)
drodz11 (Dave Rodriguez)
edsu (Ed Summers) edsu (Ed Summers)
EG-tech (Ethan Gates)
federicomenaquintero (Federico Mena Quintero)
Fizz24 Fizz24
GregH18
jamessam (Jim Sam) jamessam (Jim Sam)
jfarbowitz (Jonathan Farbowitz) jfarbowitz (Jonathan Farbowitz)
JonnyTech
jronallo (Jason Ronallo) jronallo (Jason Ronallo)
kellyhaydon (metacynic) kellyhaydon (metacynic)
kfrn (Katherine Frances Nagels) kfrn (Katherine Frances Nagels)
@@ -80,16 +89,19 @@ kgrons (Kathryn Gronsbell)
kieranjol (Kieran O'Leary) kieranjol (Kieran O'Leary)
llogan (Lou) llogan (Lou)
mulvya mulvya
nkrabben (Nick Krabbenhoeft)
pjotrek-b (Peter B.) pjotrek-b (Peter B.)
privatezero (Andrew Weaver) privatezero (Andrew Weaver)
retokromer (Reto Kromer) retokromer (Reto Kromer)
rfraimow rfraimow
richardpl (Paul B Mahol) richardpl (Paul B Mahol)
ross-spencer (Ross Spencer)
todrobbins (Tod Robbins) todrobbins (Tod Robbins)
Repo: amiaopensource/ffmprovisr Repo: amiaopensource/ffmprovisr
GitHub Contributors: 12 Code Contributors: 15
All Contributors: 22 All Contributors: 30
Last updated: 2018-04-22 (4:2:2 Day)
## AVHack Team ## AVHack Team
@@ -99,6 +111,7 @@ All Contributors: 22
## Sister projects ## Sister projects
[The Cable Bible](https://amiaopensource.github.io/cable-bible/): A Guide to Cables and Connectors Used for Audiovisual Tech
[Script Ahoy](http://dd388.github.io/crals/): Community Resource for Archivists and Librarians Scripting [Script Ahoy](http://dd388.github.io/crals/): Community Resource for Archivists and Librarians Scripting
[sourcecaster](https://datapraxis.github.io/sourcecaster/): helps you use the command line to work through common challenges that come up when working with digital primary sources. [sourcecaster](https://datapraxis.github.io/sourcecaster/): helps you use the command line to work through common challenges that come up when working with digital primary sources.