mirror of
https://github.com/amiaopensource/ffmprovisr.git
synced 2025-10-19 20:30:01 +02:00
Compare commits
24 Commits
v2017-05-0
...
v2017-06-0
Author | SHA1 | Date | |
---|---|---|---|
|
19d249a09b | ||
|
04abe26b53 | ||
|
ab3a8b25cf | ||
|
40e8f8c73c | ||
|
129540fbfc | ||
|
8578f01e1c | ||
|
0158a85a4b | ||
|
cc724200d1 | ||
|
0c03f57df6 | ||
|
659e920e0b | ||
|
2037ec922f | ||
|
c745152f8e | ||
|
e12bbb0c6d | ||
|
2c0e555dc1 | ||
|
ed81a16458 | ||
|
172657b1bb | ||
|
7af1a3de2c | ||
|
3f76abc053 | ||
|
e3d11b3e7c | ||
|
dbe9e1a049 | ||
|
0fe609a683 | ||
|
704a87f22c | ||
|
b1a5f14e8c | ||
|
55b34452f7 |
@@ -7,7 +7,7 @@ code {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dd {
|
dd {
|
||||||
padding-left:24px;
|
padding-left: 24px;
|
||||||
}
|
}
|
||||||
|
|
||||||
dt {
|
dt {
|
||||||
@@ -26,9 +26,9 @@ img {
|
|||||||
}
|
}
|
||||||
|
|
||||||
h1 {
|
h1 {
|
||||||
letter-spacing:8px;
|
letter-spacing: 8px;
|
||||||
font-size:86px;
|
font-size: 86px;
|
||||||
line-height:120px;
|
line-height: 120px;
|
||||||
}
|
}
|
||||||
|
|
||||||
div {
|
div {
|
||||||
|
138
index.html
138
index.html
@@ -30,8 +30,8 @@
|
|||||||
<p>For instructions on how to install FFmpeg on Mac, Linux, and Windows, refer to Reto Kromer’s <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 Kromer’s <a href="https://avpres.net/FFmpeg/#ch1" target="_blank">installation instructions</a>.</p>
|
||||||
<p>For Bash and command line basics, try the <a href="https://learnpythonthehardway.org/book/appendixa.html" target="_blank">Command Line Crash Course</a>. For a little more context presented in an ffmprovisr style, try <a href="http://explainshell.com/" target="_blank">explainshell.com</a>!</p>
|
<p>For Bash and command line basics, try the <a href="https://learnpythonthehardway.org/book/appendixa.html" target="_blank">Command Line Crash Course</a>. For a little more context presented in an ffmprovisr style, try <a href="http://explainshell.com/" target="_blank">explainshell.com</a>!</p>
|
||||||
<h5>License</h5>
|
<h5>License</h5>
|
||||||
<p><a href="https://creativecommons.org/licenses/by-sa/4.0/" target="_blank"><img alt="Creative Commons License" src="https://i.creativecommons.org/l/by-sa/4.0/88x31.png"></a><br>
|
<p><a href="https://creativecommons.org/licenses/by/4.0/" target="_blank"><img alt="Creative Commons License" src="https://i.creativecommons.org/l/by/4.0/88x31.png"></a><br>
|
||||||
This work is licensed under a <a href="https://creativecommons.org/licenses/by-sa/4.0/" target="_blank">Creative Commons Attribution-ShareAlike 4.0 International License</a>.</p>
|
This work is licensed under a <a href="https://creativecommons.org/licenses/by/4.0/" target="_blank">Creative Commons Attribution 4.0 International License</a>.</p>
|
||||||
<h5>Sister projects</h5>
|
<h5>Sister projects</h5>
|
||||||
<p><a href="http://dd388.github.io/crals/" target="_blank">Script Ahoy</a>: Community Resource for Archivists and Librarians Scripting</p>
|
<p><a href="http://dd388.github.io/crals/" target="_blank">Script Ahoy</a>: Community Resource for Archivists and Librarians Scripting</p>
|
||||||
<p><a href="https://datapraxis.github.io/sourcecaster/" target="_blank">The Sourcecaster</a>: an app that helps you use the command line to work through common challenges that come up when working with digital primary sources.</p>
|
<p><a href="https://datapraxis.github.io/sourcecaster/" target="_blank">The Sourcecaster</a>: an app that helps you use the command line to work through common challenges that come up when working with digital primary sources.</p>
|
||||||
@@ -60,10 +60,10 @@
|
|||||||
<dt>ffmpeg</dt><dd>starts the command</dd>
|
<dt>ffmpeg</dt><dd>starts the command</dd>
|
||||||
<dt>-i <i>input_file</i></dt><dd>path and name of the input file<br>
|
<dt>-i <i>input_file</i></dt><dd>path and name of the input file<br>
|
||||||
The extension for the Matroska container is <code>.mkv</code>.</dd>
|
The extension for the Matroska container is <code>.mkv</code>.</dd>
|
||||||
<dt>-c:v copy</dt><dd>re-encodes using the same video codec</dd>
|
<dt>-c:v copy</dt><dd>copies the video stream without re-encoding it</dd>
|
||||||
<dt>-c:a aac</dt><dd>re-encodes using the AAC audio codec<br>
|
<dt>-c:a aac</dt><dd>re-encodes the audio stream using the AAC audio codec<br>
|
||||||
Note that sadly MP4 cannot contain sound encoded by a PCM (Pulse-Code Modulation) audio codec.<br>
|
Note that sadly MP4 cannot contain sound encoded by a PCM (Pulse-Code Modulation) audio codec.<br>
|
||||||
For silent videos you can replace <code>-c:a aac</code> by <code>-an</code>.</dd>
|
For silent videos you can replace <code>-c:a aac</code> by <code>-an</code>, which means that there will be no audio track in the output file.</dd>
|
||||||
<dt><i>output_file</i></dt><dd>path and name of the output file<br>
|
<dt><i>output_file</i></dt><dd>path and name of the output file<br>
|
||||||
The extension for the MP4 container is <code>.mp4</code>.</dd>
|
The extension for the MP4 container is <code>.mp4</code>.</dd>
|
||||||
</dl>
|
</dl>
|
||||||
@@ -75,8 +75,6 @@
|
|||||||
<!-- ends MKV to MP4 -->
|
<!-- ends MKV to MP4 -->
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<!-- ends well -->
|
|
||||||
|
|
||||||
<div class="well">
|
<div class="well">
|
||||||
<h4>Change codec (transcode)</h4>
|
<h4>Change codec (transcode)</h4>
|
||||||
|
|
||||||
@@ -100,7 +98,7 @@
|
|||||||
<li>2 = ProRes 422 (Standard)</li>
|
<li>2 = ProRes 422 (Standard)</li>
|
||||||
<li>3 = ProRes 422 (HQ)</li>
|
<li>3 = ProRes 422 (HQ)</li>
|
||||||
</ul></dd>
|
</ul></dd>
|
||||||
<dt>-vf yadif</dt><dd>Runs a deinterlacing video filter (yet another deinterlacing filter) on the new file</dd>
|
<dt>-vf yadif</dt><dd>Runs a deinterlacing video filter (yet another deinterlacing filter) on the new file. <code>-vf</code> is an alias for <code>-filter:v</code>.</dd>
|
||||||
<dt>-c:a pcm_s16le</dt><dd>Tells ffmpeg to encode the audio stream in 16-bit linear PCM</dd>
|
<dt>-c:a pcm_s16le</dt><dd>Tells ffmpeg to encode the audio stream in 16-bit linear PCM</dd>
|
||||||
<dt><i>output_file</i></dt><dd>path, name and extension of the output file<br>
|
<dt><i>output_file</i></dt><dd>path, name and extension of the output file<br>
|
||||||
The extension for the QuickTime container is <code>.mov</code>.</dd>
|
The extension for the QuickTime container is <code>.mov</code>.</dd>
|
||||||
@@ -129,9 +127,9 @@
|
|||||||
<dl>
|
<dl>
|
||||||
<dt>ffmpeg</dt><dd>starts the command</dd>
|
<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>-i <i>input_file</i></dt><dd>path, name and extension of the input file</dd>
|
||||||
<dt>-c:v libx264</dt><dd>tells ffmpeg to change the video codec of the file to H.264</dd>
|
<dt>-c:v libx264</dt><dd>tells ffmpeg to encode the video stream as H.264</dd>
|
||||||
<dt>-pix_fmt yuv420p</dt><dd> libx264 will use a chroma subsampling scheme that is the closest match to that of the input. This can result in Y′C<sub>B</sub>C<sub>R</sub> 4:2:0, 4:2:2, or 4:4:4 chroma subsampling. QuickTime and most other non-FFmpeg based players can’t decode H.264 files that are not 4:2:0. In order to allow the video to play in all players, you can specify 4:2:0 chroma subsampling.</dd>
|
<dt>-pix_fmt yuv420p</dt><dd> libx264 will use a chroma subsampling scheme that is the closest match to that of the input. This can result in Y′C<sub>B</sub>C<sub>R</sub> 4:2:0, 4:2:2, or 4:4:4 chroma subsampling. QuickTime and most other non-FFmpeg based players can’t decode H.264 files that are not 4:2:0. In order to allow the video to play in all players, you can specify 4:2:0 chroma subsampling.</dd>
|
||||||
<dt>-c:a copy</dt><dd>tells ffmpeg not to change the audio codec</dd>
|
<dt>-c:a copy</dt><dd>tells ffmpeg to copy the audio stream without re-encoding it</dd>
|
||||||
<dt><i>output_file</i></dt><dd>path, name and extension of the output file</dd>
|
<dt><i>output_file</i></dt><dd>path, name and extension of the output file</dd>
|
||||||
</dl>
|
</dl>
|
||||||
<p>In order to use the same basic command to make a higher quality file, you can add some of these presets:</p>
|
<p>In order to use the same basic command to make a higher quality file, you can add some of these presets:</p>
|
||||||
@@ -158,11 +156,11 @@
|
|||||||
<div class="well">
|
<div class="well">
|
||||||
<h3>H.264 from DCP</h3>
|
<h3>H.264 from DCP</h3>
|
||||||
<p><code>ffmpeg -i <i>input_video_file</i>.mxf -i <i>input_audio_file</i>.mxf -c:v <i>libx264</i> -pix_fmt <i>yuv420p</i> -c:a <i>aac output_file.mp4</i></code></p>
|
<p><code>ffmpeg -i <i>input_video_file</i>.mxf -i <i>input_audio_file</i>.mxf -c:v <i>libx264</i> -pix_fmt <i>yuv420p</i> -c:a <i>aac output_file.mp4</i></code></p>
|
||||||
<p>This will transcode mxf wrapped video and audio files to an H.264 encoded .mp4 file. Please note this only works for unencrypted, single reel DCPs.</p>
|
<p>This will transcode MXF wrapped video and audio files to an H.264 encoded MP4 file. Please note this only works for unencrypted, single reel DCPs.</p>
|
||||||
<dl>
|
<dl>
|
||||||
<dt>ffmpeg</dt><dd>starts the command</dd>
|
<dt>ffmpeg</dt><dd>starts the command</dd>
|
||||||
<dt>-i <i>input_video_file</i></dt><dd>path and name of the video input file. This extension must be .mxf</dd>
|
<dt>-i <i>input_video_file</i></dt><dd>path and name of the video input file. This extension must be <code>.mxf</code></dd>
|
||||||
<dt>-i <i>input_audio_file</i></dt><dd>path and name of the audio input file. This extension must be .mxf</dd>
|
<dt>-i <i>input_audio_file</i></dt><dd>path and name of the audio input file. This extension must be <code>.mxf</code></dd>
|
||||||
<dt>-c:v <i>libx264</i></dt><dd>transcodes video to H.264</dd>
|
<dt>-c:v <i>libx264</i></dt><dd>transcodes video to H.264</dd>
|
||||||
<dt>-pix_fmt <i>yuv420p</i></dt><dd>sets pixel format to yuv420p for greater compatibility with media players</dd>
|
<dt>-pix_fmt <i>yuv420p</i></dt><dd>sets pixel format to yuv420p for greater compatibility with media players</dd>
|
||||||
<dt>-c:a aac</dt><dd>re-encodes using the AAC audio codec<br>
|
<dt>-c:a aac</dt><dd>re-encodes using the AAC audio codec<br>
|
||||||
@@ -203,7 +201,7 @@
|
|||||||
<dt>-slices 16</dt><dd>Each frame is split into 16 slices. 16 is a good trade-off between filesize and encoding time. <a href="http://ndsr.nycdigital.org/diving-in-head-first/" target="_blank">[more]</a></dd>
|
<dt>-slices 16</dt><dd>Each frame is split into 16 slices. 16 is a good trade-off between filesize and encoding time. <a href="http://ndsr.nycdigital.org/diving-in-head-first/" target="_blank">[more]</a></dd>
|
||||||
<dt>-c:a copy</dt><dd>copies all mapped audio streams.</dd>
|
<dt>-c:a copy</dt><dd>copies all mapped audio streams.</dd>
|
||||||
<dt><i>output_file</i>.mkv</dt><dd>path and name of the output file. Use the <code>.mkv</code> extension to save your file in a Matroska container. Optionally, choose a different extension if you want a different container, such as <code>.mov</code> or <code>.avi</code>.</dd>
|
<dt><i>output_file</i>.mkv</dt><dd>path and name of the output file. Use the <code>.mkv</code> extension to save your file in a Matroska container. Optionally, choose a different extension if you want a different container, such as <code>.mov</code> or <code>.avi</code>.</dd>
|
||||||
<dt>-f framemd5</dt><dd> Decodes video with the framemd5 muxer in order to generate md5 checksums for every frame of your input file. This allows you to verify losslessness when compared against the framemd5s of the output file.</dd>
|
<dt>-f framemd5</dt><dd> Decodes video with the framemd5 muxer in order to generate MD5 checksums for every frame of your input file. This allows you to verify losslessness when compared against the framemd5s of the output file.</dd>
|
||||||
<dt>-an</dt><dd>ignores the audio stream when creating framemd5 (audio no)</dd>
|
<dt>-an</dt><dd>ignores the audio stream when creating framemd5 (audio no)</dd>
|
||||||
<dt><i>framemd5_output_file</i></dt><dd>path, name and extension of the framemd5 file.</dd>
|
<dt><i>framemd5_output_file</i></dt><dd>path, name and extension of the framemd5 file.</dd>
|
||||||
</dl>
|
</dl>
|
||||||
@@ -230,7 +228,7 @@
|
|||||||
<dt>-pattern_type glob</dt><dd>tells ffmpeg that the following mapping should "interpret like a <a href="https://en.wikipedia.org/wiki/Glob_%28programming%29" target="_blank">glob</a>" (a "global command" function that relies on the * as a wildcard and finds everything that matches)</dd>
|
<dt>-pattern_type glob</dt><dd>tells ffmpeg that the following mapping should "interpret like a <a href="https://en.wikipedia.org/wiki/Glob_%28programming%29" target="_blank">glob</a>" (a "global command" function that relies on the * as a wildcard and finds everything that matches)</dd>
|
||||||
<dt>-i <i>"input_image_*.jpg"</i></dt><dd>maps all files in the directory that start with input_image_, for example input_image_001.jpg, input_image_002.jpg, input_image_003.jpg... etc.<br>
|
<dt>-i <i>"input_image_*.jpg"</i></dt><dd>maps all files in the directory that start with input_image_, for example input_image_001.jpg, input_image_002.jpg, input_image_003.jpg... etc.<br>
|
||||||
(The quotation marks are necessary for the above “glob” pattern!)</dd>
|
(The quotation marks are necessary for the above “glob” pattern!)</dd>
|
||||||
<dt>-vf scale=250x250</dt><dd>filter the video to scale it to 250x250; -vf is an alias for -filter:v</dd>
|
<dt>-vf scale=250x250</dt><dd>filter the video to scale it to 250x250; <code>-vf</code> is an alias for <code>-filter:v</code></dd>
|
||||||
<dt><i>output_file.gif</i></dt><dd>path and name of the output file</dd>
|
<dt><i>output_file.gif</i></dt><dd>path and name of the output file</dd>
|
||||||
</dl>
|
</dl>
|
||||||
<p class="link"></p>
|
<p class="link"></p>
|
||||||
@@ -262,7 +260,7 @@
|
|||||||
<p>It’s also possible to adjust the quality of your output by setting the <b>-crf</b> and <b>-preset</b> values:</p>
|
<p>It’s also possible to adjust the quality of your output by setting the <b>-crf</b> and <b>-preset</b> values:</p>
|
||||||
<p><code>ffmpeg -i concat:<i>input_file1</i>\|<i>input_file2</i>\|<i>input_file3</i> -c:v libx264 -crf 18 -preset veryslow -c:a copy <i>output_file</i>.mp4</code></p>
|
<p><code>ffmpeg -i concat:<i>input_file1</i>\|<i>input_file2</i>\|<i>input_file3</i> -c:v libx264 -crf 18 -preset veryslow -c:a copy <i>output_file</i>.mp4</code></p>
|
||||||
<dl>
|
<dl>
|
||||||
<dt>-crf 18</dt><dd>sets the constant rate factor to a visually lossless value. Libx264 defaults to a <a href="https://trac.ffmpeg.org/wiki/Encode/H.264#crf" target="_blank">crf of 23</a>, considered medium quality; a smaller crf value produces a larger and higher quality video.</dd>
|
<dt>-crf 18</dt><dd>sets the constant rate factor to a visually lossless value. Libx264 defaults to a <a href="https://trac.ffmpeg.org/wiki/Encode/H.264#crf" target="_blank">crf of 23</a>, considered medium quality; a smaller CRF value produces a larger and higher quality video.</dd>
|
||||||
<dt>-preset veryslow</dt><dd>A slower preset will result in better compression and therefore a higher-quality file. The default is <b>medium</b>; slower presets are <b>slow</b>, <b>slower</b>, and <b>veryslow</b>.</dd>
|
<dt>-preset veryslow</dt><dd>A slower preset will result in better compression and therefore a higher-quality file. The default is <b>medium</b>; slower presets are <b>slow</b>, <b>slower</b>, and <b>veryslow</b>.</dd>
|
||||||
</dl>
|
</dl>
|
||||||
<p>Bear in mind that by default, libx264 will only encode a single video stream and a single audio stream, picking the ‘best’ of the options available. To preserve all video and audio streams, add <b>-map</b> parameters:</p>
|
<p>Bear in mind that by default, libx264 will only encode a single video stream and a single audio stream, picking the ‘best’ of the options available. To preserve all video and audio streams, add <b>-map</b> parameters:</p>
|
||||||
@@ -366,8 +364,6 @@
|
|||||||
<!-- ends WAV to AAC/MP4 -->
|
<!-- ends WAV to AAC/MP4 -->
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<!-- ends well -->
|
|
||||||
|
|
||||||
<div class="well">
|
<div class="well">
|
||||||
<h4>Change formats</h4>
|
<h4>Change formats</h4>
|
||||||
|
|
||||||
@@ -1036,7 +1032,7 @@
|
|||||||
<dt>-i <i>input_file</i></dt><dd>path, name and extension of the input file</dd>
|
<dt>-i <i>input_file</i></dt><dd>path, name and extension of the input file</dd>
|
||||||
<dt>-aspect <i>4:3</i></dt><dd>declares the aspect ratio of the resulting video file. You can also use 16:9.</dd>
|
<dt>-aspect <i>4:3</i></dt><dd>declares the aspect ratio of the resulting video file. You can also use 16:9.</dd>
|
||||||
<dt>-target <i>ntsc-dvd</i></dt><dd>specifies the region for your DVD. This could be also pal-dvd.</dd>
|
<dt>-target <i>ntsc-dvd</i></dt><dd>specifies the region for your DVD. This could be also pal-dvd.</dd>
|
||||||
<dt><i>output_file</i>.mpg</dt><dd>path and name of the output file. The extension must be .mpg</dd>
|
<dt><i>output_file</i>.mpg</dt><dd>path and name of the output file. The extension must be <code>.mpg</code></dd>
|
||||||
</dl>
|
</dl>
|
||||||
<p class="link"></p>
|
<p class="link"></p>
|
||||||
</div>
|
</div>
|
||||||
@@ -1093,10 +1089,10 @@
|
|||||||
<dt>[b]afifo[bb];</dt><dd>this buffers the stream "b" to help prevent dropped samples and renames stream to "bb"</dd>
|
<dt>[b]afifo[bb];</dt><dd>this buffers the stream "b" to help prevent dropped samples and renames stream to "bb"</dd>
|
||||||
<dt>[1:a:0][bb]concat=n=2:v=0:a=1[concatout]</dt><dd><code>concat</code> is used to join files. <code>n=2</code> tells the filter there are two inputs. <code>v=0:a=1</code> Tells the filter there are 0 video outputs and 1 audio output. This command appends the audio from the second input to the beginning of stream "bb" and names the output "concatout"</dd>
|
<dt>[1:a:0][bb]concat=n=2:v=0:a=1[concatout]</dt><dd><code>concat</code> is used to join files. <code>n=2</code> tells the filter there are two inputs. <code>v=0:a=1</code> Tells the filter there are 0 video outputs and 1 audio output. This command appends the audio from the second input to the beginning of stream "bb" and names the output "concatout"</dd>
|
||||||
<dt>-map "[a]"</dt><dd>this maps the unmodified audio stream to the first output</dd>
|
<dt>-map "[a]"</dt><dd>this maps the unmodified audio stream to the first output</dd>
|
||||||
<dt>-codec:a libmp3lame -dither_method modified_e_weighted -qscale:a 2</dt><dd>sets up mp3 options (using constant quality)</dd>
|
<dt>-codec:a libmp3lame -dither_method modified_e_weighted -qscale:a 2</dt><dd>sets up MP3 options (using constant quality)</dd>
|
||||||
<dt><i>output_file</i></dt><dd>path, name and extension of the output file (unmodified)</dd>
|
<dt><i>output_file</i></dt><dd>path, name and extension of the output file (unmodified)</dd>
|
||||||
<dt>-map "[concatout]"</dt><dd>this maps the modified stream to the second output</dd>
|
<dt>-map "[concatout]"</dt><dd>this maps the modified stream to the second output</dd>
|
||||||
<dt>-codec:a libmp3lame -dither_method modified_e_weighted -qscale:a 2</dt><dd>sets up mp3 options (using constant quality)</dd>
|
<dt>-codec:a libmp3lame -dither_method modified_e_weighted -qscale:a 2</dt><dd>sets up MP3 options (using constant quality)</dd>
|
||||||
<dt><i>output_file_appended</i></dt><dd>path, name and extension of the output file (with appended notice)</dd>
|
<dt><i>output_file_appended</i></dt><dd>path, name and extension of the output file (with appended notice)</dd>
|
||||||
</dl>
|
</dl>
|
||||||
<p class="link"></p>
|
<p class="link"></p>
|
||||||
@@ -1107,7 +1103,6 @@
|
|||||||
<!-- ends append notice to access mp3 -->
|
<!-- ends append notice to access mp3 -->
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="well">
|
<div class="well">
|
||||||
<h4>Normalize/Equalize Audio</h4>
|
<h4>Normalize/Equalize Audio</h4>
|
||||||
|
|
||||||
@@ -1180,7 +1175,7 @@
|
|||||||
<dt>measured_LRA=<i>input_lra</i></dt><dd>use the 'input_lra' value (loudness range) from the first pass in place of input_lra</dd>
|
<dt>measured_LRA=<i>input_lra</i></dt><dd>use the 'input_lra' value (loudness range) from the first pass in place of input_lra</dd>
|
||||||
<dt>measured_LRA=<i>input_thresh</i></dt><dd>use the 'input_thresh' value (threshold) from the first pass in place of input_thresh</dd>
|
<dt>measured_LRA=<i>input_thresh</i></dt><dd>use the 'input_thresh' value (threshold) from the first pass in place of input_thresh</dd>
|
||||||
<dt>offset=<i>target_offset</i></dt><dd>use the 'target_offset' value (offset) from the first pass in place of target_offset</dd>
|
<dt>offset=<i>target_offset</i></dt><dd>use the 'target_offset' value (offset) from the first pass in place of target_offset</dd>
|
||||||
<dt>linear=true</i></dt><dd>tells loudnorm to use linear normalization</dd>
|
<dt>linear=true</dt><dd>tells loudnorm to use linear normalization</dd>
|
||||||
<dt><i>output_file</i></dt><dd>path, name and extension for output file</dd>
|
<dt><i>output_file</i></dt><dd>path, name and extension for output file</dd>
|
||||||
</dl>
|
</dl>
|
||||||
<p class="link"></p>
|
<p class="link"></p>
|
||||||
@@ -1211,8 +1206,8 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- ends RIAA equalization -->
|
<!-- ends RIAA equalization -->
|
||||||
</div><!-- closes the well -->
|
|
||||||
|
|
||||||
|
</div>
|
||||||
<div class="well">
|
<div class="well">
|
||||||
<h4>Preservation</h4>
|
<h4>Preservation</h4>
|
||||||
|
|
||||||
@@ -1320,7 +1315,8 @@ foreach ($file in $inputfiles) {
|
|||||||
<div class="well">
|
<div class="well">
|
||||||
<h3>Create MD5 checksums (audio samples)</h3>
|
<h3>Create MD5 checksums (audio samples)</h3>
|
||||||
<p><code>ffmpeg -i <i>input_file</i> -af "asetnsamples=<i>n=48000</i>" -f framemd5 -vn <i>output_file</i></code></p>
|
<p><code>ffmpeg -i <i>input_file</i> -af "asetnsamples=<i>n=48000</i>" -f framemd5 -vn <i>output_file</i></code></p>
|
||||||
<p>This will create an MD5 checksum for each group of 48000 audio samples.<br> The number of samples per group can be set arbitrarily, but it's good practice to match the samplerate of the media file (so you will get one checksum per second).</p>
|
<p>This will create an MD5 checksum for each group of 48000 audio samples.<br>
|
||||||
|
The number of samples per group can be set arbitrarily, but it's good practice to match the samplerate of the media file (so you will get one checksum per second).</p>
|
||||||
<p>Examples for other samplerates:</p>
|
<p>Examples for other samplerates:</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>44.1 kHz: "asetnsamples=n=44100"</li>
|
<li>44.1 kHz: "asetnsamples=n=44100"</li>
|
||||||
@@ -1662,6 +1658,33 @@ foreach ($file in $inputfiles) {
|
|||||||
</div>
|
</div>
|
||||||
<!-- ends SMPTE bars + Sine wave -->
|
<!-- ends SMPTE bars + Sine wave -->
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="well">
|
||||||
|
<h4>Repair</h4>
|
||||||
|
|
||||||
|
<!-- Fix A/V async 1 -->
|
||||||
|
<span data-toggle="modal" data-target="#avsync_aresample"><button type="button" class="btn btn-default" data-toggle="tooltip" data-placement="bottom" title="Fix A/V sync issues by resampling audio">Fix AV Sync: Resample audio</button></span>
|
||||||
|
<div id="avsync_aresample" class="modal fade" tabindex="-1" role="dialog">
|
||||||
|
<div class="modal-dialog modal-lg">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="well">
|
||||||
|
<h3>Fix AV Sync: Resample audio</h3>
|
||||||
|
<p><code>ffmpeg -i <i>input_file</i> -c:v copy -c:a pcm_s16le -af "aresample=async=1000" <i>output_file</i></code></p>
|
||||||
|
<dl>
|
||||||
|
<dt>ffmpeg</dt><dd>starts the command</dd>
|
||||||
|
<dt><i>input_file</i></dt><dd>path, name and extension of the input file</dd>
|
||||||
|
<dt>-c:v copy</dt><dd>Copy all mapped video streams.</dd>
|
||||||
|
<dt>-c:a pcm_s16le</dt><dd>Tells ffmpeg to encode the audio stream in 16-bit linear PCM (<a href="https://en.wikipedia.org/wiki/Endianness#Little-endian" target="_blank">little endian</a>)</dd>
|
||||||
|
<dt>-af "aresample=async=1000"</dt><dd>Stretch/squeezes samples to given timestamps, with maximum of 1000 samples per second compensation <a href="https://ffmpeg.org/ffmpeg-filters.html#aresample-1" target="_blank">[more]</a></dd>
|
||||||
|
<dt><i>output_file</i></dt><dd>path, name and extension of the output file. Try different file extensions such as mkv, mov, mp4, or avi.</dd>
|
||||||
|
</dl>
|
||||||
|
<p class="link"></p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- ends Fix A/V async 1 -->
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="well">
|
<div class="well">
|
||||||
<h4>Other</h4>
|
<h4>Other</h4>
|
||||||
@@ -1698,6 +1721,42 @@ e.g.: <code>ffmpeg -f concat -safe 0 -i mylist.txt -c copy <i>output_file</i></c
|
|||||||
</div>
|
</div>
|
||||||
<!-- ends Join files together -->
|
<!-- ends Join files together -->
|
||||||
|
|
||||||
|
<!-- Split file into segments -->
|
||||||
|
<span data-toggle="modal" data-target="#segment_file"><button type="button" class="btn btn-default" data-toggle="tooltip" data-placement="bottom" title="Split one file into several smaller segments">Split file into segments</button></span>
|
||||||
|
<div id="segment_file" class="modal fade" tabindex="-1" role="dialog">
|
||||||
|
<div class="modal-dialog modal-lg">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="well">
|
||||||
|
<h3>Split file into segments</h3>
|
||||||
|
<p><code>ffmpeg -i <i>input_file</i> -c copy -map 0 -f segment -segment_time 60 -reset_timestamps 1 <i>output_file-%03d.mkv</i></code></p>
|
||||||
|
<dl>
|
||||||
|
<dt>ffmpeg</dt><dd>Starts the command.</dd>
|
||||||
|
<dt>-i <i>input_file</i></dt><dd>Takes in a normal file.</dd>
|
||||||
|
<dt>-c copy</dt><dd>Use stream copy mode to re-mux instead of re-encode.</dd>
|
||||||
|
<dt>-map 0</dt><dd>Tells ffmpeg to map all streams of the input to the output.</dd>
|
||||||
|
<dt>-f segment</dt><dd>Use <a href="http://www.ffmpeg.org/ffmpeg-formats.html#toc-segment_002c-stream_005fsegment_002c-ssegment">segment muxer</a> for generating the output.</dd>
|
||||||
|
<dt>-segment_time 60</dt><dd>Set duration of each segment (in seconds). This example creates segments with max. duration of 60s each.</dd>
|
||||||
|
<dt>-reset_timestamps 1</dt><dd>Reset timestamps of each segment to 0. Meant to ease the playback of the generated segments.</dd>
|
||||||
|
<dt><i>output_file-%03d.mkv</i></dt>
|
||||||
|
<dd>
|
||||||
|
<p>Path, name and extension of the output file.<br>
|
||||||
|
In order to have an incrementing number in each segment filename, FFmpeg supports <a href="http://www.cplusplus.com/reference/cstdio/printf/">printf-style</a> syntax for a counter.</p>
|
||||||
|
<p>In this example, '%03d' means: 3-digits, zero-padded<br>
|
||||||
|
Examples:</p>
|
||||||
|
<ul>
|
||||||
|
<li><code>%03d</code>: 000, 001, 002, ... 999</li>
|
||||||
|
<li><code>%05d</code>: 00000, 00001, 00002, ... 99999</li>
|
||||||
|
<li><code>%d</code>: 0, 1, 2, 3, 4, ... 23, 24, etc. </li>
|
||||||
|
</ul>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<p class="link"></p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- ends Split file into segments -->
|
||||||
|
|
||||||
<!-- Play image sequence -->
|
<!-- Play image sequence -->
|
||||||
<span data-toggle="modal" data-target="#play_im_seq"><button type="button" class="btn btn-default" data-toggle="tooltip" data-placement="bottom" title="Play an image sequence directly as moving images">Play an image sequence</button></span>
|
<span data-toggle="modal" data-target="#play_im_seq"><button type="button" class="btn btn-default" data-toggle="tooltip" data-placement="bottom" title="Play an image sequence directly as moving images">Play an image sequence</button></span>
|
||||||
<div id="play_im_seq" class="modal fade" tabindex="-1" role="dialog">
|
<div id="play_im_seq" class="modal fade" tabindex="-1" role="dialog">
|
||||||
@@ -2123,34 +2182,31 @@ e.g.: <code>ffmpeg -f concat -safe 0 -i mylist.txt -c copy <i>output_file</i></c
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- ends Generate Video Fingerprint -->
|
<!-- ends Generate Video Fingerprint -->
|
||||||
</div><!-- closes the well -->
|
|
||||||
|
|
||||||
<div class="well">
|
<!-- Strip metadata -->
|
||||||
<h4>Repair</h4>
|
<span data-toggle="modal" data-target="#strip_metadata"><button type="button" class="btn btn-default" data-toggle="tooltip" data-placement="bottom" title="Strip metadata">Strip metadata</button></span>
|
||||||
|
<div id="strip_metadata" class="modal fade" tabindex="-1" role="dialog">
|
||||||
<!-- Fix A/V async 1 -->
|
|
||||||
<span data-toggle="modal" data-target="#avsync_aresample"><button type="button" class="btn btn-default" data-toggle="tooltip" data-placement="bottom" title="Fix A/V sync issues by resampling audio">Fix AV Sync: Resample audio</button></span>
|
|
||||||
<div id="avsync_aresample" class="modal fade" tabindex="-1" role="dialog">
|
|
||||||
<div class="modal-dialog modal-lg">
|
<div class="modal-dialog modal-lg">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="well">
|
<div class="well">
|
||||||
<h3>Fix AV Sync: Resample audio</h3>
|
<h3>Strips metadata from video file</h3>
|
||||||
<p><code>ffmpeg -i <i>input_file</i> -c:v copy -c:a pcm_s16le -af "aresample=async=1000" <i>output_file</i></code></p>
|
<p><code>ffmpeg -i <i>input_file</i> -map_metadata -1 -c:v copy -c:a copy <i>output_file</i></code></p>
|
||||||
<dl>
|
<dl>
|
||||||
<dt>ffmpeg</dt><dd>starts the command</dd>
|
<dt>ffmpeg</dt><dd>starts the command</dd>
|
||||||
<dt><i>input_file</i></dt><dd>path, name and extension of the input file</dd>
|
<dt>-i <i>input_file</i></dt><dd>path, name and extension of the input file</dd>
|
||||||
<dt>-c:v copy</dt><dd>Copy all mapped video streams.</dd>
|
<dt>-map_metadata -1</dt><dd>sets metadata copying to -1, which copies nothing</dd>
|
||||||
<dt>-c:a pcm_s16le</dt><dd>Tells ffmpeg to encode the audio stream in 16-bit linear PCM (<a href="https://en.wikipedia.org/wiki/Endianness#Little-endian" target="_blank">little endian</a>)</dd>
|
<dt>-vcodec copy</dt><dd>copies video track</dd>
|
||||||
<dt>-af "aresample=async=1000"</dt><dd>Stretch/squeezes samples to given timestamps, with maximum of 1000 samples per second compensation <a href="https://ffmpeg.org/ffmpeg-filters.html#aresample-1" target="_blank">[more]</a></dd>
|
<dt>-acodec copy</dt><dd>copies audio track</dd>
|
||||||
<dt><i>output_file</i></dt><dd>path, name and extension of the output file. Try different file extensions such as mkv, mov, mp4, or avi.</dd>
|
<dt><i>output_file</i></dt><dd>Makes copy of original file and names output file</dd>
|
||||||
</dl>
|
</dl>
|
||||||
<p class="link"></p>
|
<p class="link"></p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- ends Fix A/V async 1 -->
|
<!-- ends Strip metadata -->
|
||||||
</div><!-- closes the well -->
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<!-- sample example -->
|
<!-- sample example -->
|
||||||
|
27
readme.md
27
readme.md
@@ -10,7 +10,17 @@ To facilitate better understanding of FFmpeg through collaborative sharing of us
|
|||||||
|
|
||||||
## How do I see it?
|
## How do I see it?
|
||||||
|
|
||||||
The code is found in the gh-pages branch (the default primary branch). Readme is right here. You can see the site live on [GitHub pages](http://amiaopensource.github.io/ffmprovisr), or you can download a [release](https://github.com/amiaopensource/ffmprovisr/releases) and use it locally.
|
The code is found in the gh-pages branch (the default primary branch). Readme is right here. You can see the site live on [GitHub pages](http://amiaopensource.github.io/ffmprovisr).
|
||||||
|
|
||||||
|
You can also install the latest [release](https://github.com/amiaopensource/ffmprovisr/releases) on your computer with the command:
|
||||||
|
```
|
||||||
|
brew install amiaopensource/amiaos/ffmprovisr
|
||||||
|
```
|
||||||
|
and then call it locally with the command:
|
||||||
|
```
|
||||||
|
ffmprovisr
|
||||||
|
```
|
||||||
|
This works currently under macOS, Linux and the Linux subsystem on Windows. On classic Windows you can install the last [release](https://github.com/amiaopensource/ffmprovisr/releases) manually and the open `index.html` in a browser.
|
||||||
|
|
||||||
## How do I contribute?
|
## How do I contribute?
|
||||||
|
|
||||||
@@ -39,7 +49,7 @@ 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:
|
*GitHub Contributors*:
|
||||||
ablwr (Ashley)
|
ablwr (Ashley)
|
||||||
dericed (Dave Rice)
|
dericed (Dave Rice)
|
||||||
edsu (Ed Summers)
|
edsu (Ed Summers)
|
||||||
@@ -48,33 +58,38 @@ kfrn (Katherine Frances Nagels)
|
|||||||
kgrons (Kathryn Gronsbell)
|
kgrons (Kathryn Gronsbell)
|
||||||
kieranjol (Kieran O'Leary)
|
kieranjol (Kieran O'Leary)
|
||||||
llogan (Lou)
|
llogan (Lou)
|
||||||
|
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
|
||||||
brainwane (Sumana Harihareswara)
|
brainwane (Sumana Harihareswara)
|
||||||
|
bturkus
|
||||||
dericed (Dave Rice)
|
dericed (Dave Rice)
|
||||||
edsu (Ed Summers)
|
edsu (Ed Summers)
|
||||||
Fizz24
|
Fizz24
|
||||||
jamessam (Jim)
|
jamessam (Jim Sam)
|
||||||
jfarbowitz (Jonathan Farbowitz)
|
jfarbowitz (Jonathan Farbowitz)
|
||||||
jronallo (Jason Ronallo)
|
jronallo (Jason Ronallo)
|
||||||
|
kellyhaydon (metacynic)
|
||||||
kfrn (Katherine Frances Nagels)
|
kfrn (Katherine Frances Nagels)
|
||||||
kgrons (Kathryn Gronsbell)
|
kgrons (Kathryn Gronsbell)
|
||||||
kieranjol (Kieran O'Leary)
|
kieranjol (Kieran O'Leary)
|
||||||
llogan (Lou)
|
llogan (Lou)
|
||||||
mulvya
|
mulvya
|
||||||
|
pjotrek-b (Peter B.)
|
||||||
privatezero (Andrew Weaver)
|
privatezero (Andrew Weaver)
|
||||||
retokromer (Reto Kromer)
|
retokromer (Reto Kromer)
|
||||||
rfraimow
|
rfraimow
|
||||||
|
richardpl (Paul B Mahol)
|
||||||
todrobbins (Tod Robbins)
|
todrobbins (Tod Robbins)
|
||||||
|
|
||||||
Repo: amiaopensource/ffmprovisr
|
Repo: amiaopensource/ffmprovisr
|
||||||
GitHub Contributors: 11
|
GitHub Contributors: 12
|
||||||
All Contributors: 18
|
All Contributors: 22
|
||||||
|
|
||||||
## AVHack Team
|
## AVHack Team
|
||||||
|
|
||||||
|
@@ -1,14 +1,21 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
if [[ $OSTYPE = darwin* ]] ; then
|
# This allows to open ffmprovisr locally from the terminal.
|
||||||
|
|
||||||
|
if [[ ${OSTYPE} = "darwin"* ]] ; then
|
||||||
|
default_browser=$(plutil -convert json ~/Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plist -r -o - | grep https -b1 | tail -n1 | cut -d'"' -f4)
|
||||||
if [ -d /usr/local/Cellar/ffmprovisr ] ; then
|
if [ -d /usr/local/Cellar/ffmprovisr ] ; then
|
||||||
ffmprovisr_path=$(find /usr/local/Cellar/ffmprovisr -iname 'index.html' | sort -M | tail -n1)
|
ffmprovisr_path=$(find /usr/local/Cellar/ffmprovisr -iname 'index.html' | sort -M | tail -n1)
|
||||||
fi
|
fi
|
||||||
if [ -z "${ffmprovisr_path}" ] ; then
|
if [ -z "${ffmprovisr_path}" ] ; then
|
||||||
ffmprovisr_path='https://amiaopensource.github.io/ffmprovisr/'
|
ffmprovisr_path='https://amiaopensource.github.io/ffmprovisr/'
|
||||||
fi
|
fi
|
||||||
open "${ffmprovisr_path}"
|
if [ -n "${default_browser}" ] ; then
|
||||||
elif [[ $OSTYPE = linux-gnu ]] ; then
|
open -b "${default_browser}" "${ffmprovisr_path}"
|
||||||
|
else
|
||||||
|
open "${ffmprovisr_path}"
|
||||||
|
fi
|
||||||
|
elif [[ ${OSTYPE} = "linux-gnu" ]] ; then
|
||||||
if [ -d ~/.linuxbrew/Cellar/ffmprovisr ] ; then
|
if [ -d ~/.linuxbrew/Cellar/ffmprovisr ] ; then
|
||||||
ffmprovisr_path=$(find ~/.linuxbrew/Cellar/ffmprovisr -iname 'index.html' | sort -M | tail -n1)
|
ffmprovisr_path=$(find ~/.linuxbrew/Cellar/ffmprovisr -iname 'index.html' | sort -M | tail -n1)
|
||||||
fi
|
fi
|
||||||
|
Reference in New Issue
Block a user