A collection of tricks to become more productive with
If I am too lazy to open Audacity to trim songs I downloaded from YouTube:
ffmpeg -i "track.mp3" -ss 00:00:00 -t 00:00:08 -c:a libopus -b:a 96k "output.ogg"
The time is in
hh:mm:ss format. With
-t, specify the start time and duration. By replacing
-to, user can specify start time and end time.
Pipe From PV
pv is a terminal-based tool to monitor progress of data being sent through a pipe. It is a great tool to visualize an encoding progress. A minimal working example is shown below:
pv input.ext | ffmpeg -i pipe:0 -c:v hevc -c:a libopus output.ext
Making FFmpeg Less Verbose
I frequently encode videos into HEVC format. It gets noisy, especially when running from bash script to perform encoding over a bulk of files. To suppress verbosity for both
hevc, here is the minimal working example:
ffmpeg -i input.ext -v warning -c:v hevc -x265-params log-level=warning output.ext
-v flag tells
ffmpeg to reduce its verbosity to show all warnings and errors.
FFmpeg has other loglevels too such as
-x265-params is for sending user-defined parameters to the
x265 encoder itself, which in this case telling the encoder to be less verbose with
How Long Did It Take
To know the duration of an encoding, excute
/usr/bin/time (do not confuse with
time shell builtin).
/usr/bin/time --format='took %e seconds' \ ffmpeg -i input.ext -c:v hevc output.ext
The command above will output
took n seconds after the encoding is done. Definitely useful, but to make it more useful for data collection purposes, let’s write the output into a file.
/usr/bin/time --format='took %e seconds' -a -o output.time.txt
-a flag tells it to append,
-o is to specify the output.