From fd4e3af740fc00804e3f1b932462b44f795b1095 Mon Sep 17 00:00:00 2001 From: wm4 Date: Sat, 28 Dec 2013 16:32:49 +0100 Subject: Install encoding-profiles.conf by default This is probably useful. Note that this includes a small, stupid hack to prevent loading of the config file if vf_lavfi is not available. The profile by default uses vf_lavfi, and the config parser will output errors if vf_lavfi is not available. As another caveat, we install the example profile even if encoding is disabled (though we don't load it, since this would print errors). --- etc/encoding-example-profiles.conf | 261 ------------------------------------ etc/encoding-profiles.conf | 262 +++++++++++++++++++++++++++++++++++++ 2 files changed, 262 insertions(+), 261 deletions(-) delete mode 100644 etc/encoding-example-profiles.conf create mode 100644 etc/encoding-profiles.conf (limited to 'etc') diff --git a/etc/encoding-example-profiles.conf b/etc/encoding-example-profiles.conf deleted file mode 100644 index cedb8066a2..0000000000 --- a/etc/encoding-example-profiles.conf +++ /dev/null @@ -1,261 +0,0 @@ -# -# mpv configuration file -# - -######################### -# encoding profile file # -######################### -# -# Usage of this file: copy/symlink it to a fixed location, and add -# include = /path/to/this/encoding-example-profiles.conf -# to your ~/.mpv/config -# -# Then, list all profiles by -# mpv -profile help | grep enc- -# -# The following kinds of encoding profiles exist: -# enc-a-*: initialize an audio codec including good defaults -# enc-v-*: initialize a video codec including good defaults -# enc-f-*: initialize a file format including good defaults, including -# selecting and initializing a good audio and video codec -# enc-to-*: load known good settings for a target device; this typically -# includes selecting an enc-f-* profile, then adjusting some -# settings like frame rate, resolution and codec parameters -# -# AFTER including a profile of these, you can of course still change -# options, or even switch to another codec. -# -# You can view the exact options a profile sets by -# mpv -show-profile enc-to-bb-9000 -# -# Examples: -# mpv -profile enc-to-dvdpal -o outfile.mpg infile.mkv -# mpv -profile enc-f-avi -ofps 30 -o outfile.avi infile.mkv -# mpv -profile enc-v-mpeg4 -ovcopts-add qscale=7 -profile enc-a-mp3 -oacopts-add b=320k -o outfile.avi infile.mkv - -################ -# audio codecs # -################ -[enc-a-aac] -profile-desc = "AAC (libfaac or FFmpeg)" -oac = libfdk_aac,libfaac,libvo_aacenc,aac -oacopts = b=96k - -[enc-a-ac3] -profile-desc = "AC3 (FFmpeg)" -oac = ac3 -oacopts = b=448k - -[enc-a-mp3] -profile-desc = "MP3 (LAME)" -oac = libmp3lame -oacopts = b=128k - -[enc-a-vorbis] -profile-desc = "Vorbis (libvorbis)" -oac = libvorbis,vorbis -oacopts = qscale=3 - -################ -# video codecs # -################ -[enc-v-h263] -profile-desc = "H.263 (FFmpeg)" -ovc = h263 -ovcopts = qscale=4 - -[enc-v-h264] -profile-desc = "H.264 (x264)" -ovc = libx264 -ovcopts = preset=medium,crf=23,threads=0 -vf-add = noformat=444p,noformat=444p9,noformat=444p10,noformat=422p,noformat=422p9,noformat=422p10 - -[enc-v-mpeg2] -profile-desc = "MPEG-2 Video (FFmpeg)" -ovc = mpeg2video -ovcopts-clr = yes - -[enc-v-mpeg4] -profile-desc = "MPEG-4 Part 2 (FFmpeg)" -ovc = mpeg4 -ovcopts = qscale=4 - -[enc-v-vp8] -profile-desc = "VP8 (libvpx)" -ovc = libvpx -ovcopts = qmin=4,b=10000000k # ought to be enough for anyone; for CBR use, set b=; for VBR use, set qmin= to quality - -########### -# formats # -########### -[enc-f-3gp] -profile-desc = "H.263 + AAC (for 3GP)" -of = 3gp -ocopyts = yes -profile = enc-v-h263 -profile = enc-a-aac -ofopts-clr = yes - -[enc-f-avi] -profile-desc = "MPEG-4 + MP3 (for AVI)" -of = avi -ocopyts = no -oautofps = yes -profile = enc-v-mpeg4 -profile = enc-a-mp3 -ofopts-clr = yes - -[enc-f-mp4] -profile-desc = "H.264 + AAC (for MP4)" -of = mp4 -ocopyts = yes -profile = enc-v-h264 -profile = enc-a-aac -ofopts-clr = yes - -[enc-f-webm] -profile-desc = "VP8 + Vorbis (for WebM)" -of = webm -ocopyts = yes -profile = enc-v-vp8 -profile = enc-a-vorbis -ofopts-clr = yes - -################## -# target devices # -################## -[enc-to-dvdpal] -profile-desc = "DVD-Video PAL, use dvdauthor -v pal -a ac3+en (MUST be used with 4:3 or 16:9 aspect, and 720x576, 704x576, 352x576 or 352x288 resolution)" -profile = enc-v-mpeg2 -profile = enc-a-ac3 -of = dvd -ofopts-add = packetsize=2048,muxrate=10080000 -ofps = 25 -oharddup = yes -ovfirst = yes # dvdauthor needs this -srate = 48000 -ovcopts-add = g=15,b=6000000,maxrate=9000000,minrate=0,bufsize=1835008 - -[enc-to-dvdntsc] -profile-desc = "DVD-Video NTSC, use dvdauthor -v ntsc -a ac3+en (MUST be used with 4:3 or 16:9 aspect, and 720x480, 704x480, 352x480 or 352x240 resolution)" -profile = enc-v-mpeg2 -profile = enc-a-ac3 -of = dvd -ofopts-add = packetsize=2048,muxrate=10080000 -ofps = 24000/1001 -oharddup = yes -ovfirst = yes # dvdauthor needs this -srate = 48000 -ovcopts-add = g=18,b=6000000,maxrate=9000000,minrate=0,bufsize=1835008 - -[enc-to-bb-9000] -profile-desc = "MP4 for Blackberry Bold 9000" -profile = enc-f-mp4 -vf-add = dsize=480:360:0:2,scale=w=0:h=0,dsize=-1:-1 # native screen res, letterbox -ovcopts-add = maxrate=1500k,bufsize=1000k,rc_init_occupancy=900k,refs=1,profile=baseline -omaxfps = 30 - -[enc-to-nok-n900] -profile-desc = "MP4 for Nokia N900" -profile = enc-f-mp4 -# DW = 800, DH = 480, SAR = 1 -vf-add = lavfi=graph="scale=floor(min(min(800\,dar*480)\,in_w*max(1\,sar))/2+0.5)*2:floor(min(min(800/dar\,480)\,in_h*max(1/sar\,1))/2+0.5)*2,setsar=sar=1" -ovcopts-add = profile=baseline,level=30,maxrate=10000k,bufsize=10000k,rc_init_occupancy=9000k,refs=5 -omaxfps = 30 - -[enc-to-nok-6300] -profile-desc = "3GP for Nokia 6300" -profile = enc-f-3gp -ofps = 25 -vf-add = scale=w=176:h=144 -srate = 16000 -channels = 1 -oacopts-add = b=32k - -[enc-to-psp] -profile-desc = "MP4 for PlayStation Portable" -profile = enc-f-mp4 -ofps = 30000/1001 -vf-add = scale=w=480:h=272,dsize=480:270 -srate = 48000 -channels = 2 -ovcopts-add = b=512k,profile=baseline - -[enc-to-iphone-noscale] -profile-desc = "MP4 for iPhone (no scaling)" -profile = enc-f-mp4 -oautofps = yes # iphone supports 30fps max -ovcopts-add = maxrate=2500k,bufsize=1000k,rc_init_occupancy=900k,level=30,profile=baseline -omaxfps = 30 - -[enc-to-iphone] -profile-desc = "MP4 for iPhone (480x320)" -profile = enc-to-iphone-noscale -vf-add = dsize=480:320:1:2,scale=w=0:h=0,dsize=-1:-1 # panscan -omaxfps = 30 - -[enc-to-iphone-4] -profile-desc = "MP4 for iPhone 4 (960x640)" -profile = enc-to-iphone-noscale -vf-add = dsize=960:480:1:2,scale=w=0:h=0,dsize=-1:-1 # panscan -omaxfps = 30 - -[enc-to-iphone-5] -profile-desc = "MP4 for iPhone 5 (1136x640)" -profile = enc-to-iphone-noscale -vf-add = dsize=1136:480:1:2,scale=w=0:h=0,dsize=-1:-1 # panscan -omaxfps = 30 - -[enc-to-hp-slate-7] -profile-desc = "MP4 for HP Slate 7 (1024x600, crazy aspect)" -profile = enc-f-mp4 -omaxfps = 30 -ovcopts-add = profile=high -# DW = 1024, DH = 600, DAR = 97:54 (=> SAR = 2425:2304) -vf-add = lavfi=graph="scale=floor(min(1024*min(1\,dar/(97/54))\,in_w*max(1\,sar/(2425/2304)))/2+0.5)*2:floor(min(600*min((97/54)/dar\,1)\,in_h*max((2425/2304)/sar\,1))/2+0.5)*2,setsar=sar=1" - -[enc-to-hp-slate-7-git] -profile-desc = "MP4 for HP Slate 7 (1024x600, crazy aspect), FFmpeg-git" -profile = enc-f-mp4 -omaxfps = 30 -ovcopts-add = profile=high -# DW = 1024, DH = 600, DAR = 97:54 (=> SAR = 2425:2304) -vf-add = lavfi=graph="scale=floor(min(1024*min(1\,dar/(97/54))\,in_w)/2+0.5)*2:floor(min(600*min((97/54)/dar\,1)\,in_h)/2+0.5)*2,setsar=sar=sar/(2425/2304)" - -# Advanced scaling for specific output devices - how it works: -# DW = display width (px) (1024) -# DH = display height (px) (600) -# SAR = display sample aspect ratio, i.e. DAR * DH / DW (2425:2304) -# DAR = display aspect ratio, i.e. SAR * DW / DH (97:54) -# Variant: zoomed out -# vf-add = lavfi=graph="scale=floor(min(DW*min(1\,dar/DAR)\,in_w*max(1\,sar/SAR))/2+0.5)*2:floor(min(DH*min(DAR/dar\,1)\,in_h*max(SAR/sar\,1))/2+0.5)*2,setsar=sar=1" -# Variant: zoomed in -# vf-add = lavfi=graph="scale=floor(min(DW*max(1\,dar/DAR)\,in_w*max(1\,sar/SAR))/2+0.5)*2:floor(min(DH*max(DAR/dar\,1)\,in_h*max(SAR/sar\,1))/2+0.5)*2,setsar=sar=1" -# How it works: -# 1a: DW, DH*dar/DAR - fit to display width -# 1b: DH*DAR/dar, DH - fit to display height -# 1: the min of 1a and 1b these (i.e. fit inside both width and height); for zoomed in view, use the max -# 2a: in_w, in_h*SAR/sar - fit to original width -# 2b: in_w*sar/SAR, in_h - fit to original height -# 2: the max of 2a and 2b (i.e. avoid enlarging both dimensions - let HW scaling handle this) -# output: the min of 1 and 2 (i.e. fulfill both constraints) -# setsar=sar=1 to prevent scaling on the device (skip this if the device actually wants the proper SAR to be specified for not performing needless scaling) -# -# Simplified special case for SAR == 1, DAR == DW/DH: -# Variant: zoomed out -# vf-add = lavfi=graph="scale=floor(min(min(DW\,dar*DH)\,in_w*max(1\,sar))/2+0.5)*2:floor(min(min(DW/dar\,DH)\,in_h*max(1/sar\,1))/2+0.5)*2,setsar=sar=1" -# Variant: zoomed in -# vf-add = lavfi=graph="scale=floor(min(max(DW\,dar*DH)\,in_w*max(1\,sar))/2+0.5)*2:floor(min(max(DW/dar\,DH)\,in_h*max(1/sar\,1))/2+0.5)*2,setsar=sar=1" -# setsar=sar=1 to prevent nasty almost-1 SAR to be passed to the codec due to the rounding which can fail -# -# If the device supports file SAR properly, we can make use of it to avoid -# upscaling. The setsar=sar=sar/SAR at the end serves to fake the SAR for devices that don't know their own display's SAR. -# Variant: zoomed out -# vf-add = lavfi=graph="scale=floor(min(DW*min(1\,dar/DAR)\,in_w)/2+0.5)*2:floor(min(DH*min(DAR/dar\,1)\,in_h)/2+0.5)*2,setsar=sar=sar/SAR" -# Variant: zoomed in -# vf-add = lavfi=graph="scale=floor(min(DW*max(1\,dar/DAR)\,in_w)/2+0.5)*2:floor(min(DH*max(DAR/dar\,1)\,in_h)/2+0.5)*2,setsar=sar=sar/SAR" -# Simplified special case for SAR == 1, DAR == DW/DH: -# Variant: zoomed out -# vf-add = lavfi=graph="scale=floor(min(min(DW\,dar*DH)\,in_w)/2+0.5)*2:floor(min(min(DW/dar\,DH)\,in_h)/2+0.5)*2" -# Variant: zoomed in -# vf-add = lavfi=graph="scale=floor(min(max(DW\,dar*DH)\,in_w)/2+0.5)*2:floor(min(max(DW/dar\,DH)\,in_h)/2+0.5)*2" diff --git a/etc/encoding-profiles.conf b/etc/encoding-profiles.conf new file mode 100644 index 0000000000..dfa1dc4871 --- /dev/null +++ b/etc/encoding-profiles.conf @@ -0,0 +1,262 @@ +# +# mpv configuration file +# + +######################### +# encoding profile file # +######################### +# +# Note: by default, this file is installed to /etc/mpv/encoding-profiles.conf +# (or a different location, depending on --prefix). mpv will load it by +# default on program start. If ~/.mpv/encoding-profiles.conf exists, this file +# will be loaded instead. +# +# Then, list all profiles by +# mpv -profile help | grep enc- +# +# The following kinds of encoding profiles exist: +# enc-a-*: initialize an audio codec including good defaults +# enc-v-*: initialize a video codec including good defaults +# enc-f-*: initialize a file format including good defaults, including +# selecting and initializing a good audio and video codec +# enc-to-*: load known good settings for a target device; this typically +# includes selecting an enc-f-* profile, then adjusting some +# settings like frame rate, resolution and codec parameters +# +# AFTER including a profile of these, you can of course still change +# options, or even switch to another codec. +# +# You can view the exact options a profile sets by +# mpv -show-profile enc-to-bb-9000 +# +# Examples: +# mpv -profile enc-to-dvdpal -o outfile.mpg infile.mkv +# mpv -profile enc-f-avi -ofps 30 -o outfile.avi infile.mkv +# mpv -profile enc-v-mpeg4 -ovcopts-add qscale=7 -profile enc-a-mp3 -oacopts-add b=320k -o outfile.avi infile.mkv + +################ +# audio codecs # +################ +[enc-a-aac] +profile-desc = "AAC (libfaac or FFmpeg)" +oac = libfdk_aac,libfaac,libvo_aacenc,aac +oacopts = b=96k + +[enc-a-ac3] +profile-desc = "AC3 (FFmpeg)" +oac = ac3 +oacopts = b=448k + +[enc-a-mp3] +profile-desc = "MP3 (LAME)" +oac = libmp3lame +oacopts = b=128k + +[enc-a-vorbis] +profile-desc = "Vorbis (libvorbis)" +oac = libvorbis,vorbis +oacopts = qscale=3 + +################ +# video codecs # +################ +[enc-v-h263] +profile-desc = "H.263 (FFmpeg)" +ovc = h263 +ovcopts = qscale=4 + +[enc-v-h264] +profile-desc = "H.264 (x264)" +ovc = libx264 +ovcopts = preset=medium,crf=23,threads=0 +vf-add = noformat=444p,noformat=444p9,noformat=444p10,noformat=422p,noformat=422p9,noformat=422p10 + +[enc-v-mpeg2] +profile-desc = "MPEG-2 Video (FFmpeg)" +ovc = mpeg2video +ovcopts-clr = yes + +[enc-v-mpeg4] +profile-desc = "MPEG-4 Part 2 (FFmpeg)" +ovc = mpeg4 +ovcopts = qscale=4 + +[enc-v-vp8] +profile-desc = "VP8 (libvpx)" +ovc = libvpx +ovcopts = qmin=4,b=10000000k # ought to be enough for anyone; for CBR use, set b=; for VBR use, set qmin= to quality + +########### +# formats # +########### +[enc-f-3gp] +profile-desc = "H.263 + AAC (for 3GP)" +of = 3gp +ocopyts = yes +profile = enc-v-h263 +profile = enc-a-aac +ofopts-clr = yes + +[enc-f-avi] +profile-desc = "MPEG-4 + MP3 (for AVI)" +of = avi +ocopyts = no +oautofps = yes +profile = enc-v-mpeg4 +profile = enc-a-mp3 +ofopts-clr = yes + +[enc-f-mp4] +profile-desc = "H.264 + AAC (for MP4)" +of = mp4 +ocopyts = yes +profile = enc-v-h264 +profile = enc-a-aac +ofopts-clr = yes + +[enc-f-webm] +profile-desc = "VP8 + Vorbis (for WebM)" +of = webm +ocopyts = yes +profile = enc-v-vp8 +profile = enc-a-vorbis +ofopts-clr = yes + +################## +# target devices # +################## +[enc-to-dvdpal] +profile-desc = "DVD-Video PAL, use dvdauthor -v pal -a ac3+en (MUST be used with 4:3 or 16:9 aspect, and 720x576, 704x576, 352x576 or 352x288 resolution)" +profile = enc-v-mpeg2 +profile = enc-a-ac3 +of = dvd +ofopts-add = packetsize=2048,muxrate=10080000 +ofps = 25 +oharddup = yes +ovfirst = yes # dvdauthor needs this +srate = 48000 +ovcopts-add = g=15,b=6000000,maxrate=9000000,minrate=0,bufsize=1835008 + +[enc-to-dvdntsc] +profile-desc = "DVD-Video NTSC, use dvdauthor -v ntsc -a ac3+en (MUST be used with 4:3 or 16:9 aspect, and 720x480, 704x480, 352x480 or 352x240 resolution)" +profile = enc-v-mpeg2 +profile = enc-a-ac3 +of = dvd +ofopts-add = packetsize=2048,muxrate=10080000 +ofps = 24000/1001 +oharddup = yes +ovfirst = yes # dvdauthor needs this +srate = 48000 +ovcopts-add = g=18,b=6000000,maxrate=9000000,minrate=0,bufsize=1835008 + +[enc-to-bb-9000] +profile-desc = "MP4 for Blackberry Bold 9000" +profile = enc-f-mp4 +vf-add = dsize=480:360:0:2,scale=w=0:h=0,dsize=-1:-1 # native screen res, letterbox +ovcopts-add = maxrate=1500k,bufsize=1000k,rc_init_occupancy=900k,refs=1,profile=baseline +omaxfps = 30 + +[enc-to-nok-n900] +profile-desc = "MP4 for Nokia N900" +profile = enc-f-mp4 +# DW = 800, DH = 480, SAR = 1 +vf-add = lavfi=graph="scale=floor(min(min(800\,dar*480)\,in_w*max(1\,sar))/2+0.5)*2:floor(min(min(800/dar\,480)\,in_h*max(1/sar\,1))/2+0.5)*2,setsar=sar=1" +ovcopts-add = profile=baseline,level=30,maxrate=10000k,bufsize=10000k,rc_init_occupancy=9000k,refs=5 +omaxfps = 30 + +[enc-to-nok-6300] +profile-desc = "3GP for Nokia 6300" +profile = enc-f-3gp +ofps = 25 +vf-add = scale=w=176:h=144 +srate = 16000 +channels = 1 +oacopts-add = b=32k + +[enc-to-psp] +profile-desc = "MP4 for PlayStation Portable" +profile = enc-f-mp4 +ofps = 30000/1001 +vf-add = scale=w=480:h=272,dsize=480:270 +srate = 48000 +channels = 2 +ovcopts-add = b=512k,profile=baseline + +[enc-to-iphone-noscale] +profile-desc = "MP4 for iPhone (no scaling)" +profile = enc-f-mp4 +oautofps = yes # iphone supports 30fps max +ovcopts-add = maxrate=2500k,bufsize=1000k,rc_init_occupancy=900k,level=30,profile=baseline +omaxfps = 30 + +[enc-to-iphone] +profile-desc = "MP4 for iPhone (480x320)" +profile = enc-to-iphone-noscale +vf-add = dsize=480:320:1:2,scale=w=0:h=0,dsize=-1:-1 # panscan +omaxfps = 30 + +[enc-to-iphone-4] +profile-desc = "MP4 for iPhone 4 (960x640)" +profile = enc-to-iphone-noscale +vf-add = dsize=960:480:1:2,scale=w=0:h=0,dsize=-1:-1 # panscan +omaxfps = 30 + +[enc-to-iphone-5] +profile-desc = "MP4 for iPhone 5 (1136x640)" +profile = enc-to-iphone-noscale +vf-add = dsize=1136:480:1:2,scale=w=0:h=0,dsize=-1:-1 # panscan +omaxfps = 30 + +[enc-to-hp-slate-7] +profile-desc = "MP4 for HP Slate 7 (1024x600, crazy aspect)" +profile = enc-f-mp4 +omaxfps = 30 +ovcopts-add = profile=high +# DW = 1024, DH = 600, DAR = 97:54 (=> SAR = 2425:2304) +vf-add = lavfi=graph="scale=floor(min(1024*min(1\,dar/(97/54))\,in_w*max(1\,sar/(2425/2304)))/2+0.5)*2:floor(min(600*min((97/54)/dar\,1)\,in_h*max((2425/2304)/sar\,1))/2+0.5)*2,setsar=sar=1" + +[enc-to-hp-slate-7-git] +profile-desc = "MP4 for HP Slate 7 (1024x600, crazy aspect), FFmpeg-git" +profile = enc-f-mp4 +omaxfps = 30 +ovcopts-add = profile=high +# DW = 1024, DH = 600, DAR = 97:54 (=> SAR = 2425:2304) +vf-add = lavfi=graph="scale=floor(min(1024*min(1\,dar/(97/54))\,in_w)/2+0.5)*2:floor(min(600*min((97/54)/dar\,1)\,in_h)/2+0.5)*2,setsar=sar=sar/(2425/2304)" + +# Advanced scaling for specific output devices - how it works: +# DW = display width (px) (1024) +# DH = display height (px) (600) +# SAR = display sample aspect ratio, i.e. DAR * DH / DW (2425:2304) +# DAR = display aspect ratio, i.e. SAR * DW / DH (97:54) +# Variant: zoomed out +# vf-add = lavfi=graph="scale=floor(min(DW*min(1\,dar/DAR)\,in_w*max(1\,sar/SAR))/2+0.5)*2:floor(min(DH*min(DAR/dar\,1)\,in_h*max(SAR/sar\,1))/2+0.5)*2,setsar=sar=1" +# Variant: zoomed in +# vf-add = lavfi=graph="scale=floor(min(DW*max(1\,dar/DAR)\,in_w*max(1\,sar/SAR))/2+0.5)*2:floor(min(DH*max(DAR/dar\,1)\,in_h*max(SAR/sar\,1))/2+0.5)*2,setsar=sar=1" +# How it works: +# 1a: DW, DH*dar/DAR - fit to display width +# 1b: DH*DAR/dar, DH - fit to display height +# 1: the min of 1a and 1b these (i.e. fit inside both width and height); for zoomed in view, use the max +# 2a: in_w, in_h*SAR/sar - fit to original width +# 2b: in_w*sar/SAR, in_h - fit to original height +# 2: the max of 2a and 2b (i.e. avoid enlarging both dimensions - let HW scaling handle this) +# output: the min of 1 and 2 (i.e. fulfill both constraints) +# setsar=sar=1 to prevent scaling on the device (skip this if the device actually wants the proper SAR to be specified for not performing needless scaling) +# +# Simplified special case for SAR == 1, DAR == DW/DH: +# Variant: zoomed out +# vf-add = lavfi=graph="scale=floor(min(min(DW\,dar*DH)\,in_w*max(1\,sar))/2+0.5)*2:floor(min(min(DW/dar\,DH)\,in_h*max(1/sar\,1))/2+0.5)*2,setsar=sar=1" +# Variant: zoomed in +# vf-add = lavfi=graph="scale=floor(min(max(DW\,dar*DH)\,in_w*max(1\,sar))/2+0.5)*2:floor(min(max(DW/dar\,DH)\,in_h*max(1/sar\,1))/2+0.5)*2,setsar=sar=1" +# setsar=sar=1 to prevent nasty almost-1 SAR to be passed to the codec due to the rounding which can fail +# +# If the device supports file SAR properly, we can make use of it to avoid +# upscaling. The setsar=sar=sar/SAR at the end serves to fake the SAR for devices that don't know their own display's SAR. +# Variant: zoomed out +# vf-add = lavfi=graph="scale=floor(min(DW*min(1\,dar/DAR)\,in_w)/2+0.5)*2:floor(min(DH*min(DAR/dar\,1)\,in_h)/2+0.5)*2,setsar=sar=sar/SAR" +# Variant: zoomed in +# vf-add = lavfi=graph="scale=floor(min(DW*max(1\,dar/DAR)\,in_w)/2+0.5)*2:floor(min(DH*max(DAR/dar\,1)\,in_h)/2+0.5)*2,setsar=sar=sar/SAR" +# Simplified special case for SAR == 1, DAR == DW/DH: +# Variant: zoomed out +# vf-add = lavfi=graph="scale=floor(min(min(DW\,dar*DH)\,in_w)/2+0.5)*2:floor(min(min(DW/dar\,DH)\,in_h)/2+0.5)*2" +# Variant: zoomed in +# vf-add = lavfi=graph="scale=floor(min(max(DW\,dar*DH)\,in_w)/2+0.5)*2:floor(min(max(DW/dar\,DH)\,in_h)/2+0.5)*2" -- cgit v1.2.3