# # 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-hp-slate-7 # # 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 (libfdk-aac or FFmpeg)" oac = libfdk_aac,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 or FFmpeg)" oac = libvorbis,vorbis oacopts = qscale=3 [enc-a-opus] profile-desc = "Opus (libopus or FFmpeg)" oac = libopus,opus audio-samplerate = 48000 oacopts = b=96k ################ # 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 # If you want to restrict the output video to something compatible with most # hardware and basic decoders, add "profile=high,level=41" to ovcopts above and # uncomment the following line to avoid errors when source video isn't yuv420p: #vf-add = format=yuv420p [enc-v-mpeg2] profile-desc = "MPEG-2 Video (FFmpeg)" ovc = mpeg2video [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 = speed=0,lag-in-frames=8,slices=2,threads=0,b=2M,crf=10,qmin=0,qmax=36 [enc-v-vp9] profile-desc = "VP9 (libvpx)" ovc = libvpx-vp9 ovcopts = speed=6,lag-in-frames=8,slices=2,threads=0,crf=18,qmin=0,qmax=36 ########### # 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 ## equivalent to using qt-faststart tool ## can be used to speed up seeking when streaming # ofopts = movflags=+faststart [enc-f-webm] profile-desc = "VP9 + Opus (for WebM)" of = webm ocopyts = yes profile = enc-v-vp9 profile = enc-a-opus 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-append = packetsize=2048 ofopts-append = muxrate=10080000 ofps = 25 oharddup = yes audio-samplerate = 48000 ovcopts = 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-append = packetsize=2048 ofopts-append = muxrate=10080000 ofps = 24000/1001 oharddup = yes audio-samplerate = 48000 ovcopts = g=18,b=6000000,maxrate=9000000,minrate=0,bufsize=1835008 [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-append = profile=baseline ovcopts-append = level=30 ovcopts-append = maxrate=10000k ovcopts-append = bufsize=10000k ovcopts-append = rc_init_occupancy=9000k ovcopts-append = refs=5 omaxfps = 30 [enc-to-nok-6300] profile-desc = "3GP for Nokia 6300" profile = enc-f-3gp ofps = 25 vf-add = lavfi=graph="scale=176:144" audio-samplerate = 16000 audio-channels = 1 oacopts-add = b=32k [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)/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"