Skip to content

FFmpeg commands

Curated, field-tested invocations for QC, mezzanine exports, loudness, and routing. Assumes 48 kHz PCM unless noted.


1) Mezzanine masters (editing-friendly)

ProRes 422 HQ (Rec.709, timecode tag)

ffmpeg -i input.mov
-c:v prores_ks -profile:v 3 -pix_fmt yuv422p10le
-color_primaries bt709 -color_trc bt709 -colorspace bt709
-movflags +write_colr
-timecode 01:00:00:00
-c:a pcm_s24le -ar 48000
output_prores422hq_rec709_tc.mov

DNxHD 185 (1080i50, MXF OP1a, PCM 24-bit)

ffmpeg -i input.mov
-c:v dnxhd -profile:v dnxhd -b:v 185M -pix_fmt yuv422p
-flags +ildct+ilme -r 25 -s 1920x1080 -aspect 16:9
-c:a pcm_s24le -ar 48000
-f mxf_op1a output_dnxhd185_1080i50.mxf

DNxHR HQX (UHD progressive mezzanine)

ffmpeg -i input.mov
-c:v dnxhr -profile:v dnxhr_hqx -pix_fmt yuv422p10le
-c:a pcm_s24le -ar 48000
-f mxf_op1a output_dnxhr_hqx_2160p25.mxf


2) Timecode (DF/NDF) tagging

MOV timecode (NDF example)

ffmpeg -i input.mov -c copy -timecode 10:00:00:00 output_tc.mov

NTSC Drop-Frame (29.97) in MOV

DF uses semicolons in display; ffmpeg takes SMPTE string:

ffmpeg -i input.mov -c copy -timecode 01:00:00;00 output_tc_df.mov

MXF start timecode (OP1a, PAL example)

ffmpeg -i input.mov -c:v dnxhd -b:v 120M -r 25
-c:a pcm_s24le -ar 48000
-timecode 10:00:00:00
-f mxf_op1a output_tc_1080i50.mxf


3) Loudness (R128 / A/85) — measure & normalise

Measure only (EBU R128; print integrated, LRA, TP)

ffmpeg -nostats -i input.wav -filter:a ebur128 -f null - 2> loudness_report.txt

Two-pass loudnorm (transparent) to −23 LUFS / −1 dBTP

Pass 1 (measure):

ffmpeg -i input.wav -filter:a loudnorm=I=-23:TP=-1:LRA=7:print_format=json -f null - 2> loud.json

Extract measured values (I, LRA, TP, thresh) and feed into pass 2:

ffmpeg -i input.wav -filter:a loudnorm=I=-23:TP=-1:LRA=7:measured_I=MEAS_I:measured_LRA=MEAS_LRA:measured_TP=MEAS_TP:measured_thresh=MEAS_TH:offset=MEAS_OFF:linear=true:print_format=summary -c:a pcm_s24le output_r128.wav

Single-pass “monitoring normalise” (low-latency)

ffmpeg -i input.wav -filter:a loudnorm=I=-23:TP=-1:LRA=7:linear=true -f wav - | play -


4) Channel routing / solo / pair monitoring

Route CH1+CH2 (stereo pair) from a 16-ch input

ffmpeg -i input_16ch.wav -filter_complex “[0:a]pan=stereo|c0=c0|c1=c1[aout]” -map “[aout]” out_1-2.wav

Solo CH5 to dual-mono (L/R both = CH5)

ffmpeg -i input_16ch.wav -filter_complex “[0:a]pan=stereo|c0=c4|c1=c4[a]” -map “[a]” out_ch5_mono2st.wav

Fold all 16 to stereo with RMS-oriented weights (clipping-safe headroom)

ffmpeg -i input_16ch.wav -filter_complex “[0:a]pan=stereo|c0=(c0+c2+c4+c6+c8+c10+c12+c14)/4|c1=(c1+c3+c5+c7+c9+c11+c13+c15)/4[a]” -map “[a]” out_sum.wav -af dynaudnorm


5) Network ingest/monitor (UDP multicast, low latency)

Sender (H.264 in MPEG-TS, ultrafast, zerolatency)

ffmpeg -re -i input.mp4 -c:v libx264 -preset ultrafast -tune zerolatency -x264-params “keyint=60:min-keyint=60:scenecut=0”
-c:a aac -ar 48000 -b:a 192k
-f mpegts “udp://239.1.1.1:5000?pkt_size=1316&ttl=16&overrun_nonfatal=1”

mpv receive (example)

mpv “udp://239.1.1.1:5000?timeout=1000000&fifo_size=1048576” —profile=qc-realtime


6) Still frames / QC grabs

Exact frame PNG (no OSD)

ffmpeg -ss 00:01:23.456 -i input.mov -frames:v 1 -map 0:v:0 -an -sn -c:v png qc_0123456.png

Every X frames (e.g., every 50th) as PNG sequence

ffmpeg -i input.mov -vf “select=not(mod(n,50)),setpts=N/FRAME_RATE/TB” -vsync vfr frame_%06d.png


7) Colour signalling (Rec.709 tagging & convert)

Tag as Rec.709 (no matrix change; set flags)

ffmpeg -i input.mov -c:v copy
-color_primaries bt709 -color_trc bt709 -colorspace bt709
-movflags +write_colr
-c:a copy output_tagged_rec709.mov

ffmpeg -i input.mov -vf “scale=in_range=full:out_range=tv,format=yuv420p” -c:v prores_ks -profile:v 3 -c:a copy output_legal.mov


8) Interlace tools (inspection & deinterlace)

Detect field order / interlace cadence (idet)

ffmpeg -i input.mxf -filter:v idet -frames:v 500 -an -f rawvideo -y /dev/null 2> idet_report.txt

YADIF (double-rate deinterlace 50i→50p)

ffmpeg -i input_1080i50.mxf -vf “yadif=1:1:0” -r 50 -c:v prores_ks -profile:v 3 -c:a copy output_1080p50.mov