mirror of
https://github.com/amiaopensource/ffmprovisr.git
synced 2025-10-23 06:09:12 +02:00
Compare commits
21 Commits
v2017-06-0
...
v2017-07-1
Author | SHA1 | Date | |
---|---|---|---|
|
0a6204264c | ||
|
c835746c24 | ||
|
86e53b92c8 | ||
|
41423e0917 | ||
|
9a0875b692 | ||
|
0473e85448 | ||
|
b57349a3ec | ||
|
9f3b56305c | ||
|
5593b86ab7 | ||
|
3544828fb1 | ||
|
c8691285cc | ||
|
e4a660967b | ||
|
86138a55e1 | ||
|
4c14af3209 | ||
|
8d18077af5 | ||
|
8871868eda | ||
|
e1fb86ec94 | ||
|
7fe503d324 | ||
|
513631c80b | ||
|
22ff2368ad | ||
|
c81827d98f |
BIN
img/eia608.gif
Normal file
BIN
img/eia608.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 11 MiB |
66
index.html
66
index.html
@@ -396,7 +396,7 @@
|
||||
<div class="modal-content">
|
||||
<div class="well">
|
||||
<h3>Transform 4:3 aspect ratio into 16:9 with pillarbox</h3>
|
||||
<p>Transform a video file with 4:3 aspect ratio into a video file with 16:9 aspect ration by correct pillarboxing.</p>
|
||||
<p>Transform a video file with 4:3 aspect ratio into a video file with 16:9 aspect ratio by correct pillarboxing.</p>
|
||||
<p><code>ffmpeg -i <i>input_file</i> -filter:v "pad=ih*16/9:ih:(ow-iw)/2:(oh-ih)/2" -c:a copy <i>output_file</i></code></p>
|
||||
<dl>
|
||||
<dt>ffmpeg</dt><dd>starts the command</dd>
|
||||
@@ -420,7 +420,7 @@
|
||||
<div class="modal-content">
|
||||
<div class="well">
|
||||
<h3>Transform 16:9 aspect ratio video into 4:3 with letterbox</h3>
|
||||
<p>Transform a video file with 16:9 aspect ratio into a video file with 4:3 aspect ration by correct letterboxing.</p>
|
||||
<p>Transform a video file with 16:9 aspect ratio into a video file with 4:3 aspect ratio by correct letterboxing.</p>
|
||||
<p><code>ffmpeg -i <i>input_file</i> -filter:v "pad=iw:iw*3/4:(ow-iw)/2:(oh-ih)/2" -c:a copy <i>output_file</i></code></p>
|
||||
<dl>
|
||||
<dt>ffmpeg</dt><dd>starts the command</dd>
|
||||
@@ -576,7 +576,7 @@
|
||||
<p><span class="beware">⚠</span> Using this command it is possible to add Rec.709 tags to a file that is actually Rec.601 (etc), so apply with caution!</p>
|
||||
<p>These commands are relevant for H.264 and H.265 videos, encoded with <code>libx264</code> and <code>libx265</code> respectively.</p>
|
||||
<p><b>Note</b>: If you wish to embed colourspace metadata <i>without</i> changing to another colourspace, omit <code>-vf colormatrix=src:dst</code>. However, since it is <code>libx264</code>/<code>libx265</code> that writes the metadata, it’s not possible to add these tags without reencoding the video stream.</p>
|
||||
<p>For all possible values for <code>-color_primaries</code>, <code>-color_trc</code>, and <code>-colorspace</code>, see the ffmpeg documentation on <a href="./index.html#Codec-Options" target="_blank">codec options</a>.</p>
|
||||
<p>For all possible values for <code>-color_primaries</code>, <code>-color_trc</code>, and <code>-colorspace</code>, see the ffmpeg documentation on <a href="https://www.ffmpeg.org/ffmpeg-codecs.html#Codec-Options" target="_blank">codec options</a>.</p>
|
||||
<hr>
|
||||
<p id="fn1" class="footnote">1. Out of step with the regular pattern, <code>-color_trc</code> doesn’t accept <code>bt470bg</code>; it is instead here referred to directly as gamma.<br>
|
||||
In the Rec.601 standard, 525-line/NTSC and 625-line/PAL video have assumed gammas of 2.2 and 2.8 respectively. <a href="#ref1" title="Jump back.">↩</a></p>
|
||||
@@ -809,7 +809,7 @@
|
||||
<dt>-i <i>input01</i> -i <i>input02</i></dt><dd>Designates the files to use for inputs one and two respectively</dd>
|
||||
<dt>-filter_complex</dt><dd>Lets ffmpeg know we will be using a complex filter (this must be used for multiple inputs)</dd>
|
||||
<dt>[0:v:0]tblend=all_mode=difference128[a]</dt><dd>Applies the tblend filter (with the settings all_mode and difference128) to the first video stream from the first input and assigns the result to the output [a]</dd>
|
||||
<dt>[1:v:0]tblend=all_mode=difference128[a]</dt><dd>Applies the tblend filter (with the settings all_mode and difference128) to the first video stream from the second input and assigns the result to the output [b]</dd>
|
||||
<dt>[1:v:0]tblend=all_mode=difference128[b]</dt><dd>Applies the tblend filter (with the settings all_mode and difference128) to the first video stream from the second input and assigns the result to the output [b]</dd>
|
||||
<dt>[a][b]hstack[out]</dt><dd>Takes the outputs from the previous steps ([a] and [b] and uses the hstack (horizontal stack) filter on them to create the side by side output. This output is then named [out])</dd>
|
||||
<dt>-map [out]</dt><dd>Maps the output of the filter chain</dd>
|
||||
<dt>-f nut</dt><dd>Sets the format for the output video stream to <a href="https://www.ffmpeg.org/ffmpeg-formats.html#nut" target="_blank">Nut</a></dd>
|
||||
@@ -924,13 +924,14 @@
|
||||
<div class="modal-content">
|
||||
<div class="well">
|
||||
<h3>Excerpt from beginning</h3>
|
||||
<p><code>ffmpeg -i <i>input_file</i> -t <i>5</i> -c copy <i>output_file</i></code></p>
|
||||
<p><code>ffmpeg -i <i>input_file</i> -t <i>5</i> -c copy -map 0 <i>output_file</i></code></p>
|
||||
<p>This command captures a certain portion of a video file, starting from the beginning and continuing for the amount of time (in seconds) specified in the script. This can be used to create a preview file, or to remove unwanted content from the end of the file. To be more specific, use timecode, such as 00:00:05.</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>-t <i>5</i></dt><dd>Tells ffmpeg to stop copying from the input file after a certain time, and specifies the number of seconds after which to stop copying. In this case, 5 seconds is specified.</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><i>output_file</i></dt><dd>path, name and extension of the output file</dd>
|
||||
</dl>
|
||||
<p class="link"></p>
|
||||
@@ -947,7 +948,7 @@
|
||||
<div class="modal-content">
|
||||
<div class="well">
|
||||
<h3>Trim a video without re-encoding</h3>
|
||||
<p><code>ffmpeg -i <i>input_file</i> -ss 00:02:00 -to 00:55:00 -c copy <i>output_file</i></code></p>
|
||||
<p><code>ffmpeg -i <i>input_file</i> -ss 00:02:00 -to 00:55:00 -c copy -map 0 <i>output_file</i></code></p>
|
||||
<p>This command allows you to create an excerpt from a video file without re-encoding the image data.</p>
|
||||
<dl>
|
||||
<dt>ffmpeg</dt><dd>starts the command</dd>
|
||||
@@ -955,6 +956,7 @@
|
||||
<dt>-ss 00:02:00</dt><dd>sets in point at 00:02:00</dd>
|
||||
<dt>-to 00:55:00</dt><dd>sets out point at 00:55:00</dd>
|
||||
<dt>-c copy</dt><dd>use stream copy mode (no re-encoding)<br>
|
||||
<dt>-map 0</dt><dd>Tells ffmpeg to map all streams of the input to the output.</dd>
|
||||
<i>Note:</i> watch out when using <code>-ss</code> with <code>-c copy</code> if the source is encoded with an interframe codec (e.g., H.264). Since ffmpeg must split on i-frames, it will seek to the nearest i-frame to begin the stream copy.</dd>
|
||||
<dt><i>output_file</i></dt><dd>path, name and extension of the output file</dd>
|
||||
</dl>
|
||||
@@ -978,13 +980,14 @@
|
||||
<div class="modal-content">
|
||||
<div class="well">
|
||||
<h3>Excerpt to end</h3>
|
||||
<p><code>ffmpeg -i <i>input_file</i> -ss <i>5</i> -c copy <i>output_file</i></code></p>
|
||||
<p><code>ffmpeg -i <i>input_file</i> -ss <i>5</i> -c copy -map 0 <i>output_file</i></code></p>
|
||||
<p>This command copies a video file starting from a specified time, removing the first few seconds from the output. This can be used to create an excerpt, or remove unwanted content from the beginning of a video file.</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>-ss <i>5</i></dt><dd>Tells ffmpeg what timecode in the file to look for to start copying, and specifies the number of seconds into the video that ffmpeg should start copying. To be more specific, you can use timecode such as 00:00:05.</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><i>output_file</i></dt><dd>path, name and extension of the output file</dd>
|
||||
</dl>
|
||||
<p class="link"></p>
|
||||
@@ -1001,13 +1004,14 @@
|
||||
<div class="modal-content">
|
||||
<div class="well">
|
||||
<h3>Excerpt from end</h3>
|
||||
<p><code>ffmpeg -sseof <i>-5</i> -i <i>input_file</i> -c copy <i>output_file</i></code></p>
|
||||
<p><code>ffmpeg -sseof <i>-5</i> -i <i>input_file</i> -c copy -map 0 <i>output_file</i></code></p>
|
||||
<p>This command copies a video file starting from a specified time before the end of the file, removing everything before from the output. This can be used to create an excerpt, or extract content from the end of a video file (e.g. for extracting the closing credits).</p>
|
||||
<dl>
|
||||
<dt>ffmpeg</dt><dd>starts the command</dd>
|
||||
<dt>-sseof <i>-5</i></dt><dd>This parameter must stay before the input file. It tells ffmpeg what timecode in the file to look for to start copying, and specifies the number of seconds from the end of the video that ffmpeg should start copying. The end of the file has index 0 and the minus sign is needed to reference earlier portions. To be more specific, you can use timecode such as -00:00:05. Note that in most file formats it is not possible to seek exactly, so ffmpeg will seek to the closest point before.</dd>
|
||||
<dt>-i <i>input_file</i></dt><dd>path, name and extension of the input 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><i>output_file</i></dt><dd>path, name and extension of the output file</dd>
|
||||
</dl>
|
||||
<p class="link"></p>
|
||||
@@ -1218,20 +1222,20 @@
|
||||
<div class="modal-content">
|
||||
<div class="well">
|
||||
<h3>Create Bash script to batch process with ffmpeg</h3>
|
||||
<p>Bash scripts are plain text files saved with a .sh extension. This entry explains how they work with the example of a bash script named “Rewrap-MXF.sh”, which rewraps .MXF files in a given directory to .MOV files.</p>
|
||||
<p>Bash scripts are plain text files saved with a .sh extension. This entry explains how they work with the example of a bash script named “Rewrap-MXF.sh”, which rewraps .mxf files in a given directory to .mov files.</p>
|
||||
<p>“Rewrap-MXF.sh” contains the following text:</p>
|
||||
<p><code>for file in *.MXF; do ffmpeg -i "$file" -map 0 -c copy "${file%.MXF}.mov"; done</code></p>
|
||||
<p><code>for file in *.mxf; do ffmpeg -i "$file" -map 0 -c copy "${file%.mxf}.mov"; done</code></p>
|
||||
<dl>
|
||||
<dt>for file in *.MXF</dt><dd>starts the loop, and states what the input files will be. Here, the ffmpeg command within the loop will be applied to all files with an extension of .MXF.<br>
|
||||
The word ‘file’ is an arbitrary variable which will represent each .MXF file in turn as it is looped over.</dd>
|
||||
<dt>for file in *.mxf</dt><dd>starts the loop, and states what the input files will be. Here, the ffmpeg command within the loop will be applied to all files with an extension of .mxf.<br>
|
||||
The word ‘file’ is an arbitrary variable which will represent each .mxf file in turn as it is looped over.</dd>
|
||||
<dt>do ffmpeg -i "$file"</dt><dd>carry out the following ffmpeg command for each input file.<br>
|
||||
Per Bash syntax, within the command the variable is referred to by <b>“$file”</b>. The dollar sign is used to reference the variable ‘file’, and the enclosing quotation marks prevents reinterpretation of any special characters that may occur within the filename, ensuring that the original filename is retained.</dd>
|
||||
<dt>-map 0</dt><dd>retain all streams</dd>
|
||||
<dt>-c copy</dt><dd>enable stream copy (no re-encode)</dd>
|
||||
<dt>"${file%.MXF}.mov";</dt><dd>retaining the original file name, set the output file wrapper as .mov</dd>
|
||||
<dt>"${file%.mxf}.mov";</dt><dd>retaining the original file name, set the output file wrapper as .mov</dd>
|
||||
<dt>done</dt><dd>complete; all items have been processed.</dd>
|
||||
</dl>
|
||||
<p><b>Note</b>: the shell script (.sh file) and all .MXF files to be processed must be contained within the same directory, and the script must be run from that directory.<br>
|
||||
<p><b>Note</b>: the shell script (.sh file) and all .mxf files to be processed must be contained within the same directory, and the script must be run from that directory.<br>
|
||||
Execute the .sh file with the command <code>sh Rewrap-MXF.sh</code>.</p>
|
||||
<p>Modify the script as needed to perform different transcodes, or to use with ffprobe. :)</p>
|
||||
<p>The basic pattern will look similar to this:<br>
|
||||
@@ -1469,6 +1473,36 @@ foreach ($file in $inputfiles) {
|
||||
</div>
|
||||
<!-- ends QCTools Report (no audio) -->
|
||||
|
||||
<!-- Read/Extract EIA-608 Closed Captions -->
|
||||
<span data-toggle="modal" data-target="#readeia608"><button type="button" class="btn btn-default" data-toggle="tooltip" data-placement="bottom" title="Read or extract EIA-608 (Line 21) closed captioning">Read/Extract EIA-608 Closed Captioning</button></span>
|
||||
<div id="readeia608" class="modal fade" tabindex="-1" role="dialog">
|
||||
<div class="modal-dialog modal-lg">
|
||||
<div class="modal-content">
|
||||
<div class="well">
|
||||
<h3>Read/Extract EIA-608 (Line 21) closed captioning</h3>
|
||||
<p><code>ffprobe -f lavfi -i movie=<i>input_file</i>,readeia608 -show_entries frame=pkt_pts_time:frame_tags=lavfi.readeia608.0.line,lavfi.readeia608.0.cc,lavfi.readeia608.1.line,lavfi.readeia608.1.cc -of csv > <i>input_file</i>.csv</code></p>
|
||||
<p>This command uses FFmpeg's <a href="https://ffmpeg.org/ffmpeg-filters.html#readeia608" target="_blank">readeia608</a> filter to extract the hexidecimal values hidden within <a href="https://en.wikipedia.org/wiki/EIA-608" target="_blank">EIA-608 (Line 21)</a> Closed Captioning, outputting a csv file. For more information about EIA-608, check out Adobe's <a href="https://www.adobe.com/content/dam/Adobe/en/devnet/video/pdfs/introduction_to_closed_captions.pdf" target="_blank">Introduction to Closed Captions</a>.</p>
|
||||
<p>If hex isn't your thing, closed captioning <a href="http://www.theneitherworld.com/mcpoodle/SCC_TOOLS/DOCS/CC_CHARS.HTML" target="_blank">character</a> and <a href="http://www.theneitherworld.com/mcpoodle/SCC_TOOLS/DOCS/CC_CODES.HTML" target="_blank">code</a> sets can be found in the documentation for SCTools.</p>
|
||||
<dl>
|
||||
<dt>ffprobe</dt><dd>starts the command</dd>
|
||||
<dt>-f lavfi</dt><dd>tells ffprobe to use the <a href="http://ffmpeg.org/ffmpeg-devices.html#lavfi" target="_blank">libavfilter</a> input virtual device</a></dd>
|
||||
<dt>-i <i>input_file</i></dt><dd>input file and parameters</dd>
|
||||
<dt>readeia608 -show_entries frame=pkt_pts_time:frame_tags=lavfi.readeia608.0.line,lavfi.readeia608.0.cc,lavfi.readeia608.1.line,lavfi.readeia608.1.cc -of csv</dt><dd>specifies the first two lines of video in which EIA-608 data (hexidecimal byte pairs) are identifiable by ffprobe, outputting comma separated values (CSV)</dt>
|
||||
<dt>></dt><dd>redirects the standard output (the data created by ffprobe about the video)</dt>
|
||||
<dt><i>output_file</i>.csv</dt><dd>names the CSV output file</dt>
|
||||
</dl>
|
||||
<div class="sample-image">
|
||||
<h4>Example</h4>
|
||||
<p>Side-by-side video with true EIA-608 captions on the left, zoomed in view of the captions on the right (with hex values represented). To achieve something similar with your own captioned video, try out the EIA608/VITC viewer in <a href="https://github.com/bavc/qctools" target="_blank">QCTools</a>.</p>
|
||||
<img src="img/eia608.gif" alt="GIF of Closed Captions">
|
||||
</div>
|
||||
<p class="link"></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- ends Read/Extract EIA-608 Closed Captions -->
|
||||
|
||||
</div>
|
||||
<div class="well">
|
||||
<h4>Test files</h4>
|
||||
@@ -2053,12 +2087,12 @@ e.g.: <code>ffmpeg -f concat -safe 0 -i mylist.txt -c copy <i>output_file</i></c
|
||||
<div class="modal-content">
|
||||
<div class="well">
|
||||
<h3>Change field order of an interlaced video</h3>
|
||||
<p><code>ffmpeg -i <i>input_file</i> -c:v prores -filter:v setfield=tff <i>output_file</i></code></p>
|
||||
<p><code>ffmpeg -i <i>input_file</i> -c:v <i>video_codec</i> -filter:v setfield=tff <i>output_file</i></code></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>-filter:v <i>setfield=tff</i></dt><dd>Sets the field order to top field first. Use <code>setfield=bff</code> for bottom field first.</dd>
|
||||
<dt>-c:v prores</dt><dd>Tells ffmpeg to transcode the video stream into Apple ProRes 422. Experiment with using other codecs.</dd>
|
||||
<dt>-c:v <i>video_codec</i></dt><dd>As a video filter is used, it is not possible to use <code>-c copy</code>. The video must be re-encoded with whatever video codec is chosen, e.g. <code>ffv1</code>, <code>v210</code> or <code>prores</code>.</dd>
|
||||
<dt><i>output_file</i></dt><dd>path, name and extension of the output file</dd>
|
||||
</dl>
|
||||
<p class="link"></p>
|
||||
|
@@ -32,7 +32,7 @@ To contribute to this project directly (and more quickly), clone this repository
|
||||
|
||||
#### Make a request
|
||||
|
||||
If you are having trouble with coding it yourself or with github, feel free to [submit an issue](https://github.com/amiaopensource/ffmprovisr/issues) with the kind of command you would like to see added to the site.
|
||||
If you are having trouble with coding it yourself or with GitHub, feel free to [submit an issue](https://github.com/amiaopensource/ffmprovisr/issues) with the kind of command you would like to see added to the site.
|
||||
|
||||
#### General help
|
||||
|
||||
|
@@ -1,19 +1,19 @@
|
||||
#!/usr/bin/env bash
|
||||
SCRIPT=$(basename "${0}")
|
||||
VERSION='2017-04-17'
|
||||
VERSION='2017-07-08'
|
||||
AUTHOR='ffmprovisr'
|
||||
RED='\033[1;31m'
|
||||
BLUE='\033[1;34m'
|
||||
NC='\033[0m'
|
||||
|
||||
if [[ ${OSTYPE} = "cygwin" ]] || [ ! $(which diff) ]; then
|
||||
if [[ "${OSTYPE}" = "cygwin" ]] || [ ! $(which diff) ]; then
|
||||
echo -e "${RED}Error: 'diff' is not installed by default. Please install 'diffutils' from Cygwin.${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
_output_prompt(){
|
||||
cat <<EOF
|
||||
Usage: ${SCRIPT} -h | -i <av_file> -m <md5_file>
|
||||
Usage: ${SCRIPT} -i <av_file> -m <md5_file> | -h
|
||||
EOF
|
||||
exit 1
|
||||
}
|
||||
@@ -21,13 +21,11 @@ EOF
|
||||
_output_help(){
|
||||
cat <<EOF
|
||||
Syntax:
|
||||
${SCRIPT}
|
||||
Prompts a short help message.
|
||||
${SCRIPT} -h
|
||||
This help.
|
||||
${SCRIPT} -i <av_file> -m <md5_file>
|
||||
Pass to the script the audio-visual file and the corresponding MD5
|
||||
file to check.
|
||||
${SCRIPT} -h
|
||||
This help.
|
||||
Dependency:
|
||||
ffmpeg
|
||||
About:
|
||||
@@ -40,11 +38,11 @@ EOF
|
||||
unset input_file
|
||||
unset input_hash
|
||||
|
||||
while getopts ":hi:m:" opt; do
|
||||
while getopts ":i:m:h" opt; do
|
||||
case "${opt}" in
|
||||
i) input_file=${OPTARG} ;;
|
||||
m) input_hash=${OPTARG} ;;
|
||||
h) _output_help ;;
|
||||
i) input_file=$OPTARG ;;
|
||||
m) input_hash=$OPTARG ;;
|
||||
:) echo -e "${RED}Error: option -${OPTARG} requires an argument${NC}" ; _output_prompt ;;
|
||||
*) echo -e "${RED}Error: bad option -${OPTARG}${NC}" ; _output_prompt ;;
|
||||
esac
|
||||
@@ -59,12 +57,12 @@ else
|
||||
md5_tmp="${HOME}/$(basename "${input_hash}").tmp"
|
||||
fi
|
||||
# Find audio frame size for hash calculation
|
||||
unset sample_rate
|
||||
sample_rate=$(grep -v '^#' "${input_hash}" | head -n 1 | tr -d ' ' | cut -d',' -f4)
|
||||
ffmpeg -i "${input_file}" -loglevel 0 -af "asetnsamples=n='$sample_rate'" -f framemd5 -vn "${md5_tmp}"
|
||||
[[ ! -f ${md5_tmp} ]] && { echo -e "${RED}Error: '${input_file}' is not a valid audio-visual file.${NC}" ; _output_prompt ; }
|
||||
unset old_file
|
||||
unset tmp_file
|
||||
unset sample_rate
|
||||
old_file=$(grep -v '^#' "${input_hash}")
|
||||
tmp_file=$(grep -v '^#' "${md5_tmp}")
|
||||
if [[ "${old_file}" = "${tmp_file}" ]]; then
|
||||
|
@@ -1,19 +1,19 @@
|
||||
#!/usr/bin/env bash
|
||||
SCRIPT=$(basename "${0}")
|
||||
VERSION='2017-04-17'
|
||||
VERSION='2017-07-08'
|
||||
AUTHOR='ffmprovisr'
|
||||
RED='\033[1;31m'
|
||||
BLUE='\033[1;34m'
|
||||
NC='\033[0m'
|
||||
|
||||
if [[ ${OSTYPE} = "cygwin" ]] || [ ! $(which diff) ]; then
|
||||
if [[ "${OSTYPE}" = "cygwin" ]] || [ ! $(which diff) ]; then
|
||||
echo -e "${RED}Error: 'diff' is not installed by default. Please install 'diffutils' from Cygwin.${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
_output_prompt(){
|
||||
cat <<EOF
|
||||
Usage: ${SCRIPT} -h | -i <av_file> -m <md5_file>
|
||||
Usage: ${SCRIPT} -i <av_file> -m <md5_file> | -h
|
||||
EOF
|
||||
exit 1
|
||||
}
|
||||
@@ -21,13 +21,11 @@ EOF
|
||||
_output_help(){
|
||||
cat <<EOF
|
||||
Syntax:
|
||||
${SCRIPT}
|
||||
Prompts a short help message.
|
||||
${SCRIPT} -h
|
||||
This help.
|
||||
${SCRIPT} -i <av_file> -m <md5_file>
|
||||
Pass to the script the audio-visual file and the corresponding MD5
|
||||
file to check.
|
||||
${SCRIPT} -h
|
||||
This help.
|
||||
Dependency:
|
||||
ffmpeg
|
||||
About:
|
||||
@@ -40,11 +38,11 @@ EOF
|
||||
unset input_file
|
||||
unset input_hash
|
||||
|
||||
while getopts ":hi:m:" opt; do
|
||||
while getopts ":i:m:h" opt; do
|
||||
case "${opt}" in
|
||||
i) input_file=${OPTARG} ;;
|
||||
m) input_hash=${OPTARG} ;;
|
||||
h) _output_help ;;
|
||||
i) input_file=$OPTARG ;;
|
||||
m) input_hash=$OPTARG ;;
|
||||
:) echo -e "${RED}Error: option -${OPTARG} requires an argument${NC}" ; _output_prompt ;;
|
||||
*) echo -e "${RED}Error: bad option -${OPTARG}${NC}" ; _output_prompt ;;
|
||||
esac
|
||||
@@ -53,7 +51,7 @@ done
|
||||
[[ -z "${#}" || ! ${input_file} || ! ${input_hash} ]] && _output_prompt
|
||||
echo -e "${BLUE}Please wait...${NC}"
|
||||
unset md5_tmp
|
||||
if [[ $OSTYPE = "cygwin" ]]; then
|
||||
if [[ "${OSTYPE}" = "cygwin" ]]; then
|
||||
md5_tmp="${USERPROFILE}/$(basename "${input_hash}").tmp"
|
||||
else
|
||||
md5_tmp="${HOME}/$(basename "${input_hash}").tmp"
|
||||
|
@@ -2,7 +2,7 @@
|
||||
|
||||
# This allows to open ffmprovisr locally from the terminal.
|
||||
|
||||
if [[ ${OSTYPE} = "darwin"* ]] ; then
|
||||
if [[ "$(uname -s)" = "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
|
||||
ffmprovisr_path=$(find /usr/local/Cellar/ffmprovisr -iname 'index.html' | sort -M | tail -n1)
|
||||
@@ -15,7 +15,7 @@ if [[ ${OSTYPE} = "darwin"* ]] ; then
|
||||
else
|
||||
open "${ffmprovisr_path}"
|
||||
fi
|
||||
elif [[ ${OSTYPE} = "linux-gnu" ]] ; then
|
||||
elif [[ "$(uname -s)" = "Linux" ]] ; then
|
||||
if [ -d ~/.linuxbrew/Cellar/ffmprovisr ] ; then
|
||||
ffmprovisr_path=$(find ~/.linuxbrew/Cellar/ffmprovisr -iname 'index.html' | sort -M | tail -n1)
|
||||
fi
|
||||
|
Reference in New Issue
Block a user