diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8f095407a31..068b39fa715 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -52,9 +52,17 @@ jobs: mkdir -p ~/.appstoreconnect/private_keys/ echo '${{ secrets.api_key }}' > ~/.appstoreconnect/private_keys/AuthKey_${{ secrets.api_key_id }}.p8 - - name: Download custom ffmpeg for Mac + - name: Download ffmpeg for Mac if: startsWith(matrix.os, 'macos') - run: yarn download-ffmpeg + run: yarn download-ffmpeg-mac + + - name: Download ffmpeg for Windows + if: startsWith(matrix.os, 'windows') + run: yarn download-ffmpeg-windows + + - name: Download ffmpeg for Linux + if: startsWith(matrix.os, 'linux') + run: yarn download-ffmpeg-linux - name: Build/release Electron app uses: samuelmeuli/action-electron-builder@v1 diff --git a/.gitignore b/.gitignore index f186e4f4f55..f0427ee480c 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,4 @@ build icon-build icns-build doc -/ffmpeg-mac +/ffmpeg diff --git a/package.json b/package.json index 263136061d3..5056034102b 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,9 @@ "scripts": { "start": "concurrently -k \"cross-env BROWSER=none PORT=3001 DISABLE_ESLINT_PLUGIN=true react-scripts start\" \"wait-on http://localhost:3001 && electron .\"", "icon-gen": "mkdirp icon-build && svg2png src/icon.svg -o ./icon-build/app-512.png -w 512 -h 512 && mkdirp icns-build && icon-gen -i src/icon.svg -o ./icns-build --icns --icns-sizes 512,1024 && mkdirp build-resources/appx && npx svg2png src/icon.svg --output=build-resources/appx/StoreLogo.png --width=50 --height=50 && npx svg2png src/icon.svg --output=build-resources/appx/Square150x150Logo.png --width=300 --height=300 && npx svg2png src/icon.svg --output=build-resources/appx/Square44x44Logo.png --width=44 --height=44 && npx svg2png src/icon.svg --output=build-resources/appx/Wide310x150Logo.png --width=620 --height=300", - "download-ffmpeg": "mkdir -p ffmpeg-mac && wget https://github.com/mifi/ffmpeg-build-script/releases/download/n4.3.1/ffmpeg -O ffmpeg-mac/ffmpeg && wget https://github.com/mifi/ffmpeg-build-script/releases/download/n4.3.1/ffprobe -O ffmpeg-mac/ffprobe && chmod +x ffmpeg-mac/ffmpeg && chmod +x ffmpeg-mac/ffprobe", + "download-ffmpeg-mac": "mkdir -p ffmpeg/darwin && cd ffmpeg/darwin && wget https://github.com/mifi/ffmpeg-build-script/releases/download/n4.3.1/ffmpeg -O ffmpeg && wget https://github.com/mifi/ffmpeg-build-script/releases/download/n4.3.1/ffprobe -O ffprobe && chmod +x ffmpeg && chmod +x ffprobe", + "download-ffmpeg-linux": "mkdir -p ffmpeg/linux && cd ffmpeg/linux && wget https://github.com/mifi/ffmpeg-builds/releases/download/4.4.1/ffmpeg-release-amd64-static.tar.xz -O ffmpeg.xz && tar xvf ffmpeg.xz && mv ffmpeg-4.4.1-amd64-static/{ffmpeg,ffprobe} ./", + "download-ffmpeg-windows": "npx shx mkdir -p ffmpeg/win32 && cd ffmpeg/win32 && npx download-cli https://github.com/mifi/ffmpeg-builds/releases/download/4.4.1/ffmpeg-n4.4.1-2-gcc33e73618-win64-gpl-4.4.zip --out . --filename ffmpeg.zip && 7z x ffmpeg.zip && npx shx mv ffmpeg-n4.4.1-2-gcc33e73618-win64-gpl-4.4/bin/ffmpeg.exe ./ && npx shx mv ffmpeg-n4.4.1-2-gcc33e73618-win64-gpl-4.4/bin/ffprobe.exe ./", "build": "yarn icon-gen && react-scripts build", "test": "react-scripts test", "eject": "react-scripts eject", @@ -97,7 +99,6 @@ "electron-store": "5.1.1", "electron-unhandled": "^3.0.2", "execa": "^5.0.0", - "ffmpeg-ffprobe-static": "4.3.1-rc.2", "file-type": "^12.4.0", "fs-extra": "^8.1.0", "github-api": "^3.2.2", @@ -130,9 +131,7 @@ "buildResources": "build-resources" }, "files": [ - "build/**/*", - "!node_modules/ffmpeg-ffprobe-static/ffmpeg", - "!node_modules/ffmpeg-ffprobe-static/ffprobe" + "build/**/*" ], "asar": { "smartUnpack": false @@ -156,11 +155,11 @@ ], "extraResources": [ { - "from": "ffmpeg-mac/ffmpeg", + "from": "ffmpeg/darwin/ffmpeg", "to": "ffmpeg" }, { - "from": "ffmpeg-mac/ffprobe", + "from": "ffmpeg/darwin/ffprobe", "to": "ffprobe" } ], @@ -280,8 +279,14 @@ "appx" ], "extraResources": [ - "node_modules/ffmpeg-ffprobe-static/ffmpeg.exe", - "node_modules/ffmpeg-ffprobe-static/ffprobe.exe" + { + "from": "ffmpeg/win32/ffmpeg.exe", + "to": "ffmpeg.exe" + }, + { + "from": "ffmpeg/win32/ffprobe.exe", + "to": "ffprobe.exe" + } ], "icon": "icon-build/app-512.png", "fileAssociations": [ @@ -390,8 +395,14 @@ "linux": { "executableName": "losslesscut", "extraResources": [ - "node_modules/ffmpeg-ffprobe-static/ffmpeg", - "node_modules/ffmpeg-ffprobe-static/ffprobe" + { + "from": "ffmpeg/linux/ffmpeg", + "to": "ffmpeg" + }, + { + "from": "ffmpeg/linux/ffprobe", + "to": "ffprobe" + } ], "icon": "icon-build/app-512.png", "target": [ diff --git a/src/ffmpeg.js b/src/ffmpeg.js index 9d6817f1372..50a7ef301b3 100644 --- a/src/ffmpeg.js +++ b/src/ffmpeg.js @@ -5,7 +5,7 @@ import moment from 'moment'; import i18n from 'i18next'; import Timecode from 'smpte-timecode'; -import { getOutPath, isDurationValid, getExtensionForFormat, isMac, isWindows } from './util'; +import { getOutPath, isDurationValid, getExtensionForFormat, isMac, isWindows, platform } from './util'; const execa = window.require('execa'); const { join } = window.require('path'); @@ -21,17 +21,10 @@ export function getFfCommandLine(cmd, args) { } function getFfPath(cmd) { - // Testing non-mac setup on mac: - // return `node_modules/ffmpeg-ffprobe-static/${cmd}`; - - if (isMac) { - return isDev ? `ffmpeg-mac/${cmd}` : join(window.process.resourcesPath, cmd); - } - const exeName = isWindows ? `${cmd}.exe` : cmd; - return isDev - ? `node_modules/ffmpeg-ffprobe-static/${exeName}` - : join(window.process.resourcesPath, `node_modules/ffmpeg-ffprobe-static/${exeName}`); + + if (isDev) return `ffmpeg/${platform}/${exeName}`; + return join(window.process.resourcesPath, exeName); } export const getFfmpegPath = () => getFfPath('ffmpeg'); diff --git a/src/mifi.js b/src/mifi.js index c2b529464c1..4dc8c4764fe 100644 --- a/src/mifi.js +++ b/src/mifi.js @@ -5,6 +5,7 @@ export async function loadMifiLink() { try { // In old versions: https://mifi.no/losslesscut/config.json const resp = await axios.get('https://losslesscut.mifi.no/config.json'); + // const resp = await axios.get('http://localhost:8080/config-dev.json'); return resp.data; } catch (err) { return undefined; diff --git a/src/util.js b/src/util.js index 0892e90c200..a05c0774df1 100644 --- a/src/util.js +++ b/src/util.js @@ -147,7 +147,7 @@ export const isStoreBuild = isMasBuild || isWindowsStoreBuild; export const isDurationValid = (duration) => Number.isFinite(duration) && duration > 0; -const platform = os.platform(); +export const platform = os.platform(); export const isWindows = platform === 'win32'; export const isMac = platform === 'darwin'; diff --git a/yarn.lock b/yarn.lock index 9e372213d6b..776a367fabf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1194,16 +1194,6 @@ resolved "https://registry.yarnpkg.com/@csstools/normalize.css/-/normalize.css-10.1.0.tgz#f0950bba18819512d42f7197e56c518aa491cf18" integrity sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg== -"@derhuerst/http-basic@^8.2.0": - version "8.2.1" - resolved "https://registry.yarnpkg.com/@derhuerst/http-basic/-/http-basic-8.2.1.tgz#11e3964cf1f2fb40806f9a0fff0c451bb7526093" - integrity sha512-Rmn7qQQulw2sxJ8qGfZ7OuqMWuhz8V+L5xnYKMF5cXVcYqmgWqlVEAme90pF7Ya8OVhxVxLmhh0rI2k6t7ITWw== - dependencies: - caseless "^0.12.0" - concat-stream "^1.6.2" - http-response-object "^3.0.1" - parse-cache-control "^1.0.1" - "@develar/schema-utils@~2.6.5": version "2.6.5" resolved "https://registry.yarnpkg.com/@develar/schema-utils/-/schema-utils-2.6.5.tgz#3ece22c5838402419a6e0425f85742b961d9b6c6" @@ -1946,11 +1936,6 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.37.tgz#a3dd8da4eb84a996c36e331df98d82abd76b516e" integrity sha512-XYmBiy+ohOR4Lh5jE379fV2IU+6Jn4g5qASinhitfyO71b/sCo6MKsMLF5tc7Zf2CE8hViVQyYSobJNke8OvUw== -"@types/node@^10.0.3": - version "10.17.56" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.56.tgz#010c9e047c3ff09ddcd11cbb6cf5912725cdc2b3" - integrity sha512-LuAa6t1t0Bfw4CuSR0UITsm1hP17YL+u82kfHGrHUWdhlBtH7sa7jGY5z7glGaIj/WDYDkRtgGd+KCjCzxBW1w== - "@types/node@^12.0.12": version "12.20.7" resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.7.tgz#1cb61fd0c85cb87e728c43107b5fd82b69bc9ef8" @@ -2474,13 +2459,6 @@ adjust-sourcemap-loader@3.0.0: loader-utils "^2.0.0" regex-parser "^2.2.11" -agent-base@6: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - aggregate-error@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" @@ -3638,7 +3616,7 @@ case-sensitive-paths-webpack-plugin@2.3.0: resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.3.0.tgz#23ac613cc9a856e4f88ff8bb73bbb5e989825cf7" integrity sha512-/4YgnZS8y1UXXmC02xD5rRrBEu6T5ub+mQHLNRj0fzTRbgdBYhsNo2V5EqwgqrExjxsjtF/OpAKAMkKsxbD5XQ== -caseless@^0.12.0, caseless@~0.12.0: +caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= @@ -4670,13 +4648,6 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.8, debug@^2.6. dependencies: ms "2.0.0" -debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" - integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== - dependencies: - ms "2.1.2" - debug@^3.1.1, debug@^3.2.6: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" @@ -4684,6 +4655,13 @@ debug@^3.1.1, debug@^3.2.6: dependencies: ms "^2.1.1" +debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + dependencies: + ms "2.1.2" + debug@^4.3.2: version "4.3.2" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" @@ -6051,16 +6029,6 @@ fd-slicer@~1.1.0: dependencies: pend "~1.2.0" -ffmpeg-ffprobe-static@4.3.1-rc.2: - version "4.3.1-rc.2" - resolved "https://registry.yarnpkg.com/ffmpeg-ffprobe-static/-/ffmpeg-ffprobe-static-4.3.1-rc.2.tgz#f12d865d5a5ff3ced1128175e23403f099a4f0ad" - integrity sha512-8PfynXZOHxCNI3R/8MBYeNqpGQt8JYOK6YwW8UFQ1CatpQ9ELBxXjFWsWUvqBc4raooUi9O6JyXVHgb40QQvhw== - dependencies: - "@derhuerst/http-basic" "^8.2.0" - env-paths "^2.2.0" - https-proxy-agent "^5.0.0" - progress "^2.0.3" - figgy-pudding@^3.5.1: version "3.5.2" resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" @@ -7053,13 +7021,6 @@ http-proxy@^1.17.0: follow-redirects "^1.0.0" requires-port "^1.0.0" -http-response-object@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/http-response-object/-/http-response-object-3.0.2.tgz#7f435bb210454e4360d074ef1f989d5ea8aa9810" - integrity sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA== - dependencies: - "@types/node" "^10.0.3" - http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" @@ -7074,14 +7035,6 @@ https-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= -https-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" - integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== - dependencies: - agent-base "6" - debug "4" - human-signals@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" @@ -9894,11 +9847,6 @@ parse-asn1@^5.0.0, parse-asn1@^5.1.5: pbkdf2 "^3.0.3" safe-buffer "^5.1.1" -parse-cache-control@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parse-cache-control/-/parse-cache-control-1.0.1.tgz#8eeab3e54fa56920fe16ba38f77fa21aacc2d74e" - integrity sha1-juqz5U+laSD+Fro493+iGqzC104= - parse-entities@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8"