mpvScripts: update convert script patch to work with current mpv

mpv has finally made some options an error that they removed in 0.30,
a few versions ago.

Plus, refactors the tool overrides a bit.

Fixes https://github.com/NixOS/nixpkgs/issues/113202

+70 -35
+12 -12
pkgs/applications/video/mpv/scripts/convert.nix
··· 12 13 patches = [ ./convert.patch ]; 14 15 - postPatch = 16 - let 17 - t = k: v: '' 'local ${k} = "${v}"' ''; 18 - subs = var: orig: repl: "--replace " + t var orig + t var repl; 19 - in '' 20 - substituteInPlace convert_script.lua \ 21 - ${subs "NOTIFY_CMD" "notify-send" "${libnotify}/bin/notify-send"} \ 22 - ${subs "YAD_CMD" "yad" "${yad}/bin/yad"} \ 23 - ${subs "MKVMERGE_CMD" "mkvmerge" "${mkvtoolnix-cli}/bin/mkvmerge"} 24 ''; 25 26 dontBuild = true; ··· 38 When this script is loaded into mpv, you can hit Alt+W to mark the beginning 39 and Alt+W again to mark the end of the clip. Then a settings window opens. 40 ''; 41 license = licenses.unfree; 42 - # script crashes mpv. See https://github.com/NixOS/nixpkgs/issues/113202 43 - broken = true; 44 }; 45 } 46 -
··· 12 13 patches = [ ./convert.patch ]; 14 15 + postPatch = '' 16 + substituteInPlace convert_script.lua \ 17 + --replace 'mkvpropedit_exe = "mkvpropedit"' \ 18 + 'mkvpropedit_exe = "${mkvtoolnix-cli}/bin/mkvpropedit"' \ 19 + --replace 'mkvmerge_exe = "mkvmerge"' \ 20 + 'mkvmerge_exe = "${mkvtoolnix-cli}/bin/mkvmerge"' \ 21 + --replace 'yad_exe = "yad"' \ 22 + 'yad_exe = "${yad}/bin/yad"' \ 23 + --replace 'notify_send_exe = "notify-send"' \ 24 + 'notify_send_exe = "${libnotify}/bin/notify-send"' \ 25 + 26 ''; 27 28 dontBuild = true; ··· 40 When this script is loaded into mpv, you can hit Alt+W to mark the beginning 41 and Alt+W again to mark the end of the clip. Then a settings window opens. 42 ''; 43 + # author was asked to add a license https://gist.github.com/Zehkul/25ea7ae77b30af959be0#gistcomment-3715700 44 license = licenses.unfree; 45 }; 46 }
+58 -23
pkgs/applications/video/mpv/scripts/convert.patch
··· 1 - --- convert/convert_script.lua 2016-03-18 19:30:49.675401969 +0100 2 - +++ convert_script.lua 2016-03-19 01:18:00.801897043 +0100 3 - @@ -3,6 +3,10 @@ 4 local opt = require 'mp.options' 5 local utils = require 'mp.utils' 6 7 - +local NOTIFY_CMD = "notify-send" 8 - +local YAD_CMD = "yad" 9 - +local MKVMERGE_CMD = "mkvmerge" 10 + 11 -- default options, convert_script.conf is read 12 local options = { 13 bitrate_multiplier = 0.975, -- to make sure the file won’t go over the target file size, set it to 1 if you don’t care 14 - @@ -247,12 +247,12 @@ 15 if string.len(vf) > 0 then 16 vf = vf .. "," 17 end ··· 26 local audio_file = "" 27 for index, param in pairs(audio_file_table) do 28 audio_file = audio_file .. " --audio-file='" .. string.gsub(tostring(param), "'", "'\\''") .. "'" 29 - @@ -354,9 +358,9 @@ 30 if ovc == "gif" then 31 full_command = full_command .. ' --vf-add=lavfi=graph=\\"framestep=' .. framestep .. '\\" && convert ' 32 .. tmpfolder .. '/*.png -set delay ' .. delay .. ' -loop 0 -fuzz ' .. fuzz .. '% ' .. dither .. ' -layers optimize ' 33 - .. full_output_path .. ' && rm -rf ' .. tmpfolder .. ' && notify-send "Gif done") & disown' 34 - + .. full_output_path .. ' && rm -rf ' .. tmpfolder .. ' && ' .. NOTIFY_CMD .. ' "Gif done") & disown' 35 else 36 - full_command = full_command .. ' && notify-send "Encoding done"; mkvpropedit ' 37 - + full_command = full_command .. ' && ' .. NOTIFY_CMD .. ' "Encoding done"; mkvpropedit ' 38 .. full_output_path .. ' -s title="' .. metadata_title .. '") & disown' 39 end 40 41 - @@ -409,7 +413,7 @@ 42 sep = ",+" 43 44 if enc then 45 - local command = "mkvmerge '" .. video .. "' " .. mkvmerge_parts .. " -o " .. full_output_path 46 - + local command = MKVMERGE_CMD .. " '" .. video .. "' " .. mkvmerge_parts .. " -o " .. full_output_path 47 msg.info(command) 48 os.execute(command) 49 clear() 50 - @@ -508,7 +512,7 @@ 51 end 52 53 54 - local yad_command = [[LC_NUMERIC=C yad --title="Convert Script" --center --form --fixed --always-print-result \ 55 - + local yad_command = [[LC_NUMERIC=C ]] .. YAD_CMD .. [[ --title="Convert Script" --center --form --fixed --always-print-result \ 56 --name "convert script" --class "Convert Script" --field="Resize to height:NUM" "]] .. scale_sav --yad_table 1 57 .. [[" --field="Resize to width instead:CHK" ]] .. resize_to_width_instead .. " " --yad_table 2 58 if options.legacy_yad then 59 - @@ -543,7 +547,7 @@ 60 - yad_command = yad_command .. [[ --button="Crop:1" --button="gtk-cancel:2" --button="gtk-ok:0"; ret=$? && echo $ret]] 61 - 62 - if gif_dialog then 63 - - yad_command = [[echo $(LC_NUMERIC=C yad --title="Gif settings" --name "convert script" --class "Convert Script" \ 64 - + yad_command = [[echo $(LC_NUMERIC=C ]] .. YAD_CMD .. [[ --title="Gif settings" --name "convert script" --class "Convert Script" \ 65 - --center --form --always-print-result --separator="…" \ 66 - --field="Fuzz Factor:NUM" '1!0..100!0.5!1' \ 67 - --field="Framestep:NUM" '3!1..3!1' \
··· 1 + diff --git "a/Convert Script \342\200\223 README.md" "b/Convert Script \342\200\223 README.md" 2 + index 8e062c1..6e0d798 100644 3 + --- "a/Convert Script \342\200\223 README.md" 4 + +++ "b/Convert Script \342\200\223 README.md" 5 + @@ -68,7 +68,7 @@ and set some options in ``mpv/lua-settings/convert_script.conf`` or with ``--scr 6 + If you don’t want to upgrade your yad. Features like appending segments won’t be available. 7 + 8 + libvpx_fps 9 + - Default: --oautofps 10 + + Default: "" 11 + FPS settings (or any other settings really) for libvpx encoding. Set it to --ofps=24000/1001 for example. 12 + 13 + -Warning: Some of these options aren’t very robust and setting them to bogus values will break the script. 14 + \ No newline at end of file 15 + +Warning: Some of these options aren’t very robust and setting them to bogus values will break the script. 16 + diff --git a/convert_script.lua b/convert_script.lua 17 + index 17d3100..90f88ec 100644 18 + --- a/convert_script.lua 19 + +++ b/convert_script.lua 20 + @@ -3,6 +3,12 @@ local msg = require 'mp.msg' 21 local opt = require 'mp.options' 22 local utils = require 'mp.utils' 23 24 + +-- executables 25 + +local mkvpropedit_exe = "mkvpropedit" 26 + +local mkvmerge_exe = "mkvmerge" 27 + +local yad_exe = "yad" 28 + +local notify_send_exe = "notify-send" 29 + 30 -- default options, convert_script.conf is read 31 local options = { 32 bitrate_multiplier = 0.975, -- to make sure the file won’t go over the target file size, set it to 1 if you don’t care 33 + @@ -14,7 +20,7 @@ local options = { 34 + libvpx_options = "--ovcopts-add=cpu-used=0,auto-alt-ref=1,lag-in-frames=25,quality=good", 35 + libvpx_vp9_options = "", 36 + legacy_yad = false, -- if you don’t want to upgrade to at least yad 0.18 37 + - libvpx_fps = "--oautofps", -- --ofps=24000/1001 for example 38 + + libvpx_fps = "", -- --ofps=24000/1001 for example 39 + audio_bitrate = 112, -- mpv default, in kbps 40 + } 41 + 42 + @@ -247,12 +253,12 @@ function encode(enc) 43 if string.len(vf) > 0 then 44 vf = vf .. "," 45 end ··· 54 local audio_file = "" 55 for index, param in pairs(audio_file_table) do 56 audio_file = audio_file .. " --audio-file='" .. string.gsub(tostring(param), "'", "'\\''") .. "'" 57 + @@ -354,9 +360,9 @@ function encode(enc) 58 if ovc == "gif" then 59 full_command = full_command .. ' --vf-add=lavfi=graph=\\"framestep=' .. framestep .. '\\" && convert ' 60 .. tmpfolder .. '/*.png -set delay ' .. delay .. ' -loop 0 -fuzz ' .. fuzz .. '% ' .. dither .. ' -layers optimize ' 61 - .. full_output_path .. ' && rm -rf ' .. tmpfolder .. ' && notify-send "Gif done") & disown' 62 + + .. full_output_path .. ' && rm -rf ' .. tmpfolder .. ' && ' .. notify_send_exe .. ' "Gif done") & disown' 63 else 64 - full_command = full_command .. ' && notify-send "Encoding done"; mkvpropedit ' 65 + + full_command = full_command .. ' && ' .. notify_send_exe .. ' "Encoding done"; ' .. mkvpropedit_exe .. ' ' 66 .. full_output_path .. ' -s title="' .. metadata_title .. '") & disown' 67 end 68 69 + @@ -409,7 +415,7 @@ function encode_copy(enc) 70 sep = ",+" 71 72 if enc then 73 - local command = "mkvmerge '" .. video .. "' " .. mkvmerge_parts .. " -o " .. full_output_path 74 + + local command = mkvmerge_exe .. " '" .. video .. "' " .. mkvmerge_parts .. " -o " .. full_output_path 75 msg.info(command) 76 os.execute(command) 77 clear() 78 + @@ -508,7 +514,7 @@ function call_gui () 79 end 80 81 82 - local yad_command = [[LC_NUMERIC=C yad --title="Convert Script" --center --form --fixed --always-print-result \ 83 + + local yad_command = [[LC_NUMERIC=C ]] .. yad_exe .. [[ --title="Convert Script" --center --form --fixed --always-print-result \ 84 --name "convert script" --class "Convert Script" --field="Resize to height:NUM" "]] .. scale_sav --yad_table 1 85 .. [[" --field="Resize to width instead:CHK" ]] .. resize_to_width_instead .. " " --yad_table 2 86 if options.legacy_yad then 87 + @@ -524,7 +530,7 @@ function call_gui () 88 + yad_command = yad_command 89 + .. [[--field="2pass:CHK" "false" ]] --yad_table 5 90 + .. [[--field="Encode options::CBE" '! --ovcopts=b=2000,cpu-used=0,auto-alt-ref=1,lag-in-frames=25,quality=good,threads=4' ]] --yad_table 6 91 + - .. [[--field="Output format::CBE" ' --ovc=libx264! --oautofps --of=webm --ovc=libvpx' ]] 92 + + .. [[--field="Output format::CBE" ' --ovc=libx264! --of=webm --ovc=libvpx' ]] 93 + .. [[--field="Simple:FBTN" 'bash -c "echo \"simple\" && kill -s SIGUSR1 \"$YAD_PID\""' ]] 94 + advanced = true 95 + else 96 + @@ -734,4 +740,4 @@ mp.set_key_bindings({ 97 + 98 + mp.add_key_binding("alt+w", "convert_script", convert_script_hotkey_call) 99 + 100 + -mp.register_event("tick", tick) 101 + \ No newline at end of file 102 + +mp.register_event("tick", tick)