Skip to content

Instantly share code, notes, and snippets.

@frank-e
Last active November 30, 2019 01:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save frank-e/86fde53ef053337bd81b to your computer and use it in GitHub Desktop.
Save frank-e/86fde53ef053337bd81b to your computer and use it in GitHub Desktop.
FFmpeg.exe command line help script for selected topics (mostly codecs + muxers) on Windows
@echo off & @rem based on XNT.kex script template version 2016-03-05
setlocal enableextensions & prompt @
if not "%~2" == "" call "%~0" "%*"
if not "%~2" == "" goto DONE & @rem expect one argument
if "%~1" == "" goto DOIT & @rem permit no arguments
if "%~1" == "?" goto HELP & @rem missing switch char
if "%~1" == "/?" goto HELP & @rem minimal requirement
if "%~1" == "-?" goto HELP & @rem permit DOS SWITCHAR
if exist "%~1\*" goto HELP & @rem bypass subdirectory
:DOIT --------------------------------------------------------------
set NEED=ffmpeg.exe
for %%x in (%NEED%) do if not exist "%%~f$PATH:x" goto NEED
set EXEC=ansicon.exe -m %NEED%
set OPTS=ansicon.exe
for %%x in (%OPTS%) do if exist "%%~f$PATH:x" goto OPTS
set EXEC=%NEED%
set AV_LOG_FORCE_NOCOLOR=1
:OPTS --------------------------------------------------------------
set EXEC=%EXEC% -hide_banner
set OPTS=-h
set NEED=encoder=%~1
set LIST=aac alac bmp dca dpx eac3 flv pam pbm pgm pgmyuv ppm pcx
set LIST=%LIST% png sgi sunrast targa tiff tta vp8 vp9 xbm xwd
for %%x in (%LIST%) do if /I "%~1" == "%%x" goto EXEC
rem upper case: well-known extension, lower case: ffmpeg encoder
set NEED=encoder=libaom-av1
for %%x in (AV1 libaom-av1) do if /I "%~1" == "%%x" goto EXEC
set NEED=encoder=libopenjpeg
for %%x in (J2K libopenjpeg) do if /I "%~1" == "%%x" goto EXEC
set NEED=encoder=jpegls
for %%x in (JLS jpegls) do if /I "%~1" == "%%x" goto EXEC
set NEED=encoder=jpeg2000
for %%x in (JP2 jpeg2000) do if /I "%~1" == "%%x" goto EXEC
set NEED=encoder=mjpeg
for %%x in (JPG mjpeg) do if /I "%~1" == "%%x" goto EXEC
set NEED=encoder=ljpeg
for %%x in (JPEG ljpeg) do if /I "%~1" == "%%x" goto EXEC
set NEED=encoder=libvorbis
for %%x in (OGA libvorbis) do if /I "%~1" == "%%x" goto EXEC
set NEED=encoder=libtheora
for %%x in (OGV libtheora) do if /I "%~1" == "%%x" goto EXEC
:XTRA --------------------------------------------------------------
set NEED=muxer=%~1
set LIST=3g2 3gp adts amr asf au avi avm2 caca caf dvd f4v filmstrip
set LIST=%LIST% ffmetadata gxf ico image2 ipod ismv latm matroska
set LIST=%LIST% md5 mov mp4 mpeg mpegts mxf nut ogg rm sdl sox
set LIST=%LIST% spdif svcd swf tee vcd vob w64 wav webm
for %%x in (%LIST%) do if /I "%~1" == "%%x" goto EXEC
set LIST=bit oma truehd
for %%x in (%LIST%) do if /I "%~1" == "%%x" goto XENC
set NEED=muxer=yuv4mpegpipe
for %%x in (Y4M yuv4mpegpipe) do if /I "%~1" == "%%x" goto EXEC
set NEED=demuxer=%~1
set LIST=avisynth bink concat dshow frwu gdigrab lavfi libgme
set LIST=%LIST% mpc nuv smk sbg vfwcap
for %%x in (%LIST%) do if /I "%~1" == "%%x" goto EXEC
set LIST=bmp_pipe dpx_pipe exr_pipe j2k_pipe jpeg_pipe
set LIST=%LIST% jpegls_pipe pictor_pipe png_pipe sgi_pipe
set LIST=%LIST% sunrast_pipe tiff_pipe image2pipe
for %%x in (%LIST%) do if /I "%~1" == "%%x" goto EXEC
set NEED=decoder=%~1
set LIST=atrac3 flic g729 mlp mp4als tak truehd vc1
for %%x in (%LIST%) do if /I "%~1" == "%%x" goto EXEC
set NEED=filter=%~1
set LIST=aformat aresample afade crop cropdetect curves eq
set LIST=%LIST% format geq hqdn3d hqx metadata pp removelogo
set LIST=%LIST% scale smartblur thumbnail unsharp
for %%x in (%LIST%) do if /I "%~1" == "%%x" goto EXEC
set NEED=%~1
for %%x in (full long) do if /I "%~1" == "%%x" goto EXEC
set LIST=ac3 apng dirac dnxhd dts fits flac g722 gif h263 h264
set LIST=%LIST% hevc mp2 mp3 opus rawvideo speex webp
for %%x in (%LIST%) do if /I "%~1" == "%%x" goto ENCX
set LIST= s8 u8 alaw mulaw f64le f64be f32le f32be
set LIST=%LIST% s16le s16be s24le s24be s32le s32be
set LIST=%LIST% u16le u16be u24le u24be u32le u32be
for %%x in (%LIST%) do if /I "%~1" == "%%x" goto EPCM
if "%NEED%" == "" goto EXEC
if /I "%NEED%" == "types" goto MIME
if /I "%NEED%" == "sizes" goto SIZE
set LIST=bsfs buildconf codecs decoders encoders colors devices
set LIST=%LIST% filters formats demuxers muxers layouts protocols
set LIST=%LIST% pix_fmts sample_fmts protocols hwaccels version L
set OPTS=-%~1
set NEED=
for %%x in (%LIST%) do if /I "%~1" == "%%x" goto EXEC
:FIND encoder, filter, muxer (ffmpeg -h always returns 0) ----------
echo/
set OPTS=-h
set NEED=encoder=%~1
ffmpeg.exe -hide_banner %OPTS% %NEED%|find "not recognized">nul
if errorlevel 1 goto EXEC
set NEED=filter=%~1
ffmpeg.exe -hide_banner %OPTS% %NEED%|find "Unknown filter">nul
if errorlevel 1 goto EXEC
set NEED=muxer=%~1
ffmpeg.exe -hide_banner %OPTS% %NEED%|find "Unknown format">nul
if errorlevel 1 goto EXEC
set NEED=%~1
set LIST=asyncts azmq flite ladspa ocv openal opengl zmq
for %%x in (%LIST%) do if /I "%~1" == "%%x" goto AWOL
echo Error: %0 found no ffmpeg -h encoder^|filter^|muxer=%~1
goto HELP
:XENC --------------------------------------------------------------
echo/
echo ffmpeg might have no encoder for %NEED%
goto EXEC
:AWOL --------------------------------------------------------------
echo This ffmpeg does not support %NEED%, cf. "%~nx0 buildconf"
goto WAIT
:ENCX encoder and muxer --------------------------------------------
set NEED=muxer=%~1
call :EXEC
set NEED=encoder=%~1
goto EXEC
:EPCM encoder and muxer --------------------------------------------
set NEED=muxer=%~1
call :EXEC
set NEED=encoder=pcm_%~1
goto EXEC
:EXEC --------------------------------------------------------------
echo %EXEC% %OPTS% %NEED% 1>&2
%EXEC% %OPTS% %NEED%
if errorlevel 1 echo Error: %0 got exit code [%ERRORLEVEL%]
goto WAIT
:MIME --------------------------------------------------------------
echo muxers audio/video extensions MIME
echo 3g2,3gp amr_nb/h263 3g2,3gp
echo ac3 ac3 ac3 audio/x-ac3
echo adts aac aac,adts audio/aac
echo aiff pcm_s16be/png aiff,aif,aifc audio/aiff
echo amr amr_nb amr audio/amr
echo asf wmav2/msmpeg4v3 asf,wmv,wma video/x-ms-asf
echo au pcm_s16be au,snd audio/basic
echo avi mp3/mpeg4 avi video/x-msvideo
echo caf pcm_s16be caf audio/x-caf
echo ...
echo dts dca dts audio/x-dca
echo ...
echo ipod aac/h264 m4v,m4a application/mp4
echo ismv aac/h264 ismv,isma application/mp4
echo latm aac latm,loas audio/mp4a-latm
echo matroska vorbis/h264 mkv,mka video/x-matroska
echo ...
echo mov aac/h264 mov
echo mp4 aac/h264 mp4 application/mp4
echo mpegts mp2/mpeg2video m2t,mts,m2ts video/mp2t
echo ...
echo mxf pcm_s16le/mpeg2video mxf application/mxf
echo ...
echo nut vorbis/mpeg4 nut video/x-nut
echo ogg vorbis/theora ogg,ogv,oga application/ogg
echo ...
echo rm ac3/rv10 ra,rm application/vnd.rn-realmedia
echo ...
echo swf,avm2 mp3/flv1 swf application/x-shockwave-flash
echo ...
echo vcd,svcd mp2/mpeg1video mpg,vcd video/mpeg
echo vob,dvd mp2/mpeg2video vob,ifo video/mpeg
goto WAIT
:SIZE --------------------------------------------------------------
echo shortcuts: -target [film-^|ntsc-^|pal-]dv^|dv50^|dvd^|svcd^|vcd
echo ntsc-film 352x240 @ 24000/1001
echo film 352x240 @ 24/1
echo qntsc 352x240 @ 30000/1001 (NTSC VCD)
echo qpal (cif) 352x288 @ 25/1 ( PAL VCD)
echo 480x480 @ 30000/1001 (NTSC SVCD)
echo 480x576 @ 25/1 ( PAL SVCD)
echo 704x480 @ 30000/1001 (NTSC DVD)
echo (4cif) 704x576 @ 25/1 ( PAL DVD)
echo ntsc 720x480 (3:2) @ 30000/1001 (NTSC DVD)
echo pal 720x576 (5:4) @ 25/1 ( PAL DVD)
echo sntsc (vga) 640x480 (4:3) @ 30000/1001
echo spal 768x576 (4:3) @ 25/1
echo hvga 480x320 (3:2) , nhd 640x360 (16:9)
echo wvga 852x480 , hd480 852x480 (~16:9)
echo svga 800x600 (4:3) , qhd 960x540 (16:9)
echo xga 1024x768 (4:3) , hd720 1280x720 (16:9)
echo wxga 1366x768 , hd1080 1920x1080 (16:9)
echo [WQHD] 2560x1440 , uhd2160 3840x2160 (16:9)
goto WAIT
:NEED --------------------------------------------------------------
echo/
echo Error: %0 found no "%NEED%" & @rem line 1 of 24
:HELP --------------------------------------------------------------
echo Usage: %0 TOPIC & @rem line 2 of 24
echo/
echo This script uses ffmpeg.exe (as found in the PATH) to show the command
echo line help for any known encoder^|filter^|muxer or some selected topics.
echo Encoders: & @rem line 6 of 24
echo aac alac bmp dpx dca eac3 flv h264 pam pbm pcm pgm pgmyuv png ppm sgi
echo sunrast targa tiff tta vp8 vp9 xbm xwd J2K JLS JP2 JPG JPEG OGA OGV
echo Encoders with native muxer: & @rem line 9 of 24
echo ac3 apng dirac dnxhd dts fits flac g722 gif h263 h264 hevc mp2 mp3
echo opus rawvideo speex webp
echo Formats: & @rem line 12 of 24
echo 3g2 3gp adts amr asf au avi avisynth avm2 caca caf concat dshow dv
echo dvd f4v ffmetadata filmstrip frwu gdigrab gfx ico image2 ipod ismv latm
echo lavfi libgme matroska md5 mov mp4 mpc mpeg mxf nut ogg rm sdl sox spdif
echo svcd swf tee vcd vfwcap vob w64 wav webm yuv4mpegpipe Y4M
echo Filters: & @rem line 17 of 24
echo aformat aresample crop cropdetect curves eq format geq hqdn3d hqx
echo metadata pp removelogo scale smartblur thumbnail unsharp
echo Extras: & @rem line 20 of 24
echo bsfs buildconf codecs colors decoders devices demuxers encoders filters
echo formats hwaccels layouts muxers pix_fmts protocols sample_fmts version
echo L SIZES TYPES
echo/ & @rem line 24 of 24
:WAIT if first CMD line option was /c ------------------------------
set NEED=usebackq tokens=2 delims=/
for /F "%NEED% " %%c in ('%CMDCMDLINE%') do if /I "%%c" == "c" pause
:DONE -------------- (Frank Ellermann, 2016) -----------------------
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment