FFMPEG
FFMPEG is the best, fastest transcode and swiss-army knife for video and audio files. It’s easy to install and use on a Mac (using homebrew). It sucks to install on a PC, but it can run faster - if you have a system that outperforms your Mac. All the cheat sheet things below can be modified for different codecs, and an infinite number of other ways.
Installation
On mac, I recommend installing FFMPEG through Homebrew. Very easy. Google it.
On windoze, I recommend installing FFMPEG through Scoop. You install Scoop via Powershell (non-admin), and then you run FFMPEG via Command Prompt. FFMPEG in a WSL environment, while easier to install in some cases, does not perform nearly as well without significant tweaking of the FFMPEG commands. Vanilla FFMPEG doesn’t work well in WSL(!)
Updating
If you used homebrew to install FFMPEG, it’s this easy:
brew update && brew upgrade ffmpeg
Cheat Sheet
Directory
You can easily CD your target directory so you don’t have those big old file strings.
Get Frame Count / Duration
(source)
ffprobe -v error -select_streams v:0 -count_packets \
-show_entries stream=nb_read_packets -of csv=p=0 input.mp4
FFProbe - Audit Files and Create Log
Replace path with your directory path (both times). This audits for broken quicktime files and skips any that are encoded with NotchLC.
find /path -type f -name "*.mov" -exec sh -c 'dir="/path/"; ffprobe -v error -select_streams v:0 -show_entries stream=codec_name -of default=noprint_wrappers=1:nokey=1 "$1" | grep -q "NotchLC" && exit 0 || (ffprobe -v error -show_error -count_frames -select_streams v:0 -read_intervals "%+#1" -skip_frame nokey -i "$1" 2>&1 | grep -v "Referenced QT chapter track not found" && echo "$1" >> "$dir/incomplete_files.txt")' sh {} \;
CRF Low Bitrate MP4
“-crf 24” is bitrate / quality
ffmpeg -i input.mp4 -vcodec libx264 -crf 24 output.mp4
PNG+Alpha to WebM+ Alpha
ffmpeg -framerate 24 -i YourFile-%04d.png -c:v libvpx-vp9 -pix_fmt yuva420p -crf 24 YourOutPutFileNameHere.webm
%04d = number of #s in the image sequence file name
CONCAT to HAP
If Start Number is required
ffmpeg -framerate 30 -start_number 00126 -i /Users/can/Desktop/SCRATCH/_somefolder/INTER/SQNCS/Grid-Render-PNG/Grid-Render_%05d.png -c:v hap /Users/can/Desktop/SCRATCH/_somefolder/INTER/SQNCS/Grid-Render-PNG/Grid-Render_test.mov
If Start Number is not required
ffmpeg -framerate 30 -i /Users/can/Desktop/SCRATCH/_somefolder/INTER/SQNCS/Grid-Render-PNG/Grid-Render_%05d.png -c:v hap /Users/can/Desktop/SCRATCH/_somefolder/INTER/SQNCS/Grid-Render-PNG/Grid-Render_test.mov
HAP Alpha
Tiff+alpha to HAP+A
ffmpeg -framerate 30 -i /Users/can/Desktop/SCRATCH/_somefolder/INTER/SQNCS/Grid-Overlay/Grid-Overlay_%05d.tif -c:v hap -format hap_alpha -chunks 6 /Users/can/Desktop/SCRATCH/_somefolder/INTER/SQNCS/Grid-Overlay/Grid-Overlay.mov
Transcode 422 to HAP
ffmpeg -i /Users/can/Desktop/7x4k-1800frms-APR422.mov -c:v hap -chunks 6 /Users/can/Desktop/7x4k-1800frms-HAP.mov
HEVC Straight Transcode
ffmpeg -i /Users/can/Desktop/220902_somename_hapq_60fps.mov -c:v hevc /Users/can/Desktop/220902_somename_hevc.mp4
Simple Repackaging + Audio Add
This will take an existing video file and add an audio file to it.
ffmpeg -i /Volumes/SSD-01/01-Projects/somename/SOME-EXPORT/V3-HAP10.mov -i "/Users/can/Desktop/matchv3.aif" -c:a copy -shortest -y -c:v copy /Volumes/SSD-01/01-Projects/somename/SOME-EXPORT/V4-HAP10-AIF.mov
Repackaging 8-Channel Audio
ffmpeg -i /Volumes/SSD-01/01-Projects/somename/CRTV/V4-422.mov -i "/Volumes/SSD-01/01-Projects/somename/CRTV/V5B.aif" -c:a copy -shortest -y -c:v hap -chunks 10 -map 0:v:0 -map 1:a:0 /Volumes/SSD-01/01-Projects/somename/SOME-EXPORT/VID_V4-AUD_V5B-HAP.mov
Combining Files AKA Getting Hacky
This example sets an in and out of file A and file B. Then it combines them referencing a simple text file that’s just a list of the files. Then it adds audio. All files were already HAP so no transcoding needed to happen.
FILE-A
ffmpeg -ss 00:00:00.000 -i /Volumes/CT_FAST-02/somename_creative-HAPV7-chunk10.mov -t 00:08:00.000 -c copy /Users/can/Desktop/7A-StartPatch.mov
FILE-B
ffmpeg -ss 00:08:00.000 -i /Users/can/Desktop/somename_DELIVERY_V7B.mov -to 00:09:29.464 -c copy /Users/can/Desktop/7B-EndPatch.mov
COMBO
ffmpeg -f concat -safe 0 -i /Users/can/Desktop/farts.txt -c copy /Users/can/Desktop/7ABCOMBO.mov
Contents of fart.txt
file '/Users/can/Desktop/fileA.mov'
file '/Users/can/Desktop/fileBmov'
ADD AUDIO
ffmpeg -i /Users/can/Desktop/7ABCOMBO.mov -i "/Volumes/CT_FAST-02/Citizen_NYC_v10_8chan.wav" -c:a copy -shortest -y -c:v copy -map 0:v:0 -map 1:a:0 /Volumes/CT_FAST-02/somename_DELIVERY_V7B-HAP-6CHUNK.mov
Removing Audio
Remove Audio
ffmpeg -i /vidinput.mov -c:v copy -an /videonoaudio.mov
REMOVE AUDIO BATCH
cd (the directory)
then
for i in `ls *.MOV`; do ffmpeg -i $i -c:v copy -an /Volumes/SSD-01/_AudioRemove/$i; done