# find help ffmpeg -h ffmpeg -codecs ffmpeg -decoders ffmpeg -h decoder=aac ffmpeg -encoders ffmpeg -h encoder=libx264 ffmpeg -filters ffmpeg -pix_fmts # modify container ffmpeg -i mandelbrot.avi -c copy mandelbrot.mov # generate checksums at frame level ffmpeg -i mandelbrot.avi -f framemd5 mandelbrot_avi_framemd5.txt ffmpeg -i mandelbrot.mov -f framemd5 mandelbrot_mov_framemd5.txt # compare checksum files # Linux/Mac/Windows Terminal or WSL: diff -s mandelbrot_avi_framemd5.txt mandelbrot_mov_framemd5.txt # Windows: fc mandelbrot_avi_framemd5.txt mandelbrot_mov_framemd5.txt # play a single image sequence ffplay -loop 0 DUFAY_TIFF/Dufay_%06d.tif # from master to mezzanine (ProRes) ffmpeg -f image2 -framerate 24 -i DUFAY_TIFF/Dufay_%06d.tif -filter:v "scale=1440:1080:flags=lanczos, pad=1920:1080:240:0" -c:v prores_ks -profile:v 3 Dufay_ProRes.mkv # find parameters ffmpeg -h encoder=dnxhd # from master to mezzanine (AVID) ffmpeg -f image2 -framerate 24 -i DUFAY_TIFF/Dufay_%06d.tif -filter:v "scale=1440:1080:flags=lanczos, pad=1920:1080:240:0" -c:v dnxhd -profile:v dnxhr_444 -pix_fmt yuv444p10le Dufay_DNxHR.mxf # from mezzanine (ProRes) to access ffmpeg -i Dufay_ProRes.mkv -pix_fmt yuv420p -c:v libx264 -preset veryslow -crf 30 -movflags +faststart Dufay_ProRes_H264.mp4 # from mezzanine (AVID) to access ffmpeg -i Dufay_DNxHR.mxf -pix_fmt yuv420p -c:v libx264 -preset veryslow -crf 30 -movflags +faststart Dufay_DNxHR_H264.mp4 # from master to access ffmpeg -f image2 -framerate 24 -i DUFAY_TIFF/Dufay_%06d.tif -filter:v "scale=1440:1080:flags=lanczos, pad=1920:1080:240:0" -pix_fmt yuv420p -c:v libx264 -preset veryslow -crf 30 -movflags +faststart Dufay_master_H264.mp4 # split screen master/ProRes ffmpeg -i Dufay_master_H264.mp4 -i Dufay_ProRes_H264.mp4 -filter_complex "[0]crop=iw/2:ih:0:0[left]; [1]crop=iw/2:ih:iw/2:0[right]; [left][right]hstack" Dufay_split_ProRes.mp4 # split screen master/AVID ffmpeg -i Dufay_master_H264.mp4 -i Dufay_DNxHR_H264.mp4 -filter_complex "[0]crop=iw/2:ih:0:0[left]; [1]crop=iw/2:ih:iw/2:0[right]; [left][right]hstack" Dufay_split_DNxHR.mp4 # split screen ProRes/AVID ffmpeg -i Dufay_ProRes_H264.mp4 -i Dufay_DNxHR_H264.mp4 -filter_complex "[0]crop=iw/2:ih:0:0[left]; [1]crop=iw/2:ih:iw/2:0[right]; [left][right]hstack" Dufay_split_mezzanine.mp4 # test filter ffplay -vf "negate" Dufay_master_H264.mp4 # difference file master/ProRes ffmpeg -i Dufay_master_H264.mp4 -i Dufay_ProRes_H264.mp4 -filter_complex "[1]format=yuva444p, lut=c3=128, negate[1_with_alpha]; [0][1_with_alpha]overlay" Dufay_delta_ProRes.mp4 # difference file master/AVID ffmpeg -i Dufay_master_H264.mp4 -i Dufay_DNxHR_H264.mp4 -filter_complex "[1]format=yuva444p, lut=c3=128, negate[1_with_alpha]; [0][1_with_alpha]overlay" Dufay_delta_DNxHR.mp4 # difference file ProRes/AVID ffmpeg -i Dufay_ProRes_H264.mp4 -i Dufay_DNxHR_H264.mp4 -filter_complex "[1]format=yuva444p, lut=c3=128, negate[1_with_alpha]; [0][1_with_alpha]overlay" Dufay_delta_mezzanine.mp4 # find installed fonts # macOS cd /Library/Fonts ls # Windows cd /Windows/Fonts dir # add watermark ffmpeg -i Dufay_master_H264.mp4 -filter:v "drawtext=text='watermark':fontfile='/Library/Fonts/Arial.ttf':fontsize=35:fontcolor=white:alpha=0.25:x=(w-text_w)/2:y=(h-text_h)/2" with_watermark.mp4 # add timecode ffmpeg -i Dufay_master_H264.mp4 -filter:v "drawtext=timecode='01\:00\:30\:00':rate=25:fontfile='/Library/Fonts/Arial.ttf':fontsize=35:fontcolor=white:x=(w-text_w)/2:y=h/1.2" with_timecode.mp4 # add logo ffmpeg -i Dufay_master_H264.mp4 -i logo.png -filter_complex "overlay=10:main_h-overlay_h-10" with_logo.mp4