Last active
November 30, 2019 01:46
-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@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