2 Commits

Author SHA1 Message Date
linesofcodes f1da312b95 Make app more Linux package manager friendly
Build / build (push) Successful in 1m39s
2025-09-23 18:36:35 +07:00
linesofcodes 37568aa0d1 Pixel Format & Audio Encoder fix
Build / build (push) Successful in 1m14s
2025-09-22 00:24:52 +07:00
7 changed files with 200 additions and 112 deletions
+10
View File
@@ -0,0 +1,10 @@
frontend:
cd solid-src; \
pnpm build
build: frontend
neu build
release: frontend
neu build --clean -r --embed-resources
+7
View File
@@ -0,0 +1,7 @@
#!/usr/bin/env xdg-open
[Desktop Entry]
Type=Application
Version=1.5
Name=Vencoder
Exec=/usr/bin/vencoder
Terminal=false
+6 -1
View File
@@ -1,7 +1,7 @@
{ {
"$schema": "https://raw.githubusercontent.com/neutralinojs/neutralinojs/main/schemas/neutralino.config.schema.json", "$schema": "https://raw.githubusercontent.com/neutralinojs/neutralinojs/main/schemas/neutralino.config.schema.json",
"applicationId": "xyz.dailitation.linesofcodes.vencoder", "applicationId": "xyz.dailitation.linesofcodes.vencoder",
"version": "1.0.0", "version": "0.1.1",
"defaultMode": "window", "defaultMode": "window",
"documentRoot": "/solid-src/dist/", "documentRoot": "/solid-src/dist/",
"url": "/", "url": "/",
@@ -17,6 +17,11 @@
"storage.*", "storage.*",
"debug.log" "debug.log"
], ],
"dataLocation": "system",
"storageLocation": "system",
"logging": {
"writeToLogFile": false
},
"modes": { "modes": {
"window": { "window": {
"title": "Vencoder", "title": "Vencoder",
+2 -2
View File
@@ -18,8 +18,8 @@
"@types/node": "^24.5.2", "@types/node": "^24.5.2",
"prettier": "3.6.2", "prettier": "3.6.2",
"typescript": "~5.8.3", "typescript": "~5.8.3",
"vite": "^7.1.6", "vite": "^7.1.7",
"vite-plugin-solid": "^2.11.8" "vite-plugin-solid": "^2.11.8"
}, },
"packageManager": "pnpm@10.17.0+sha512.fce8a3dd29a4ed2ec566fb53efbb04d8c44a0f05bc6f24a73046910fb9c3ce7afa35a0980500668fa3573345bd644644fa98338fa168235c80f4aa17aa17fbef" "packageManager": "pnpm@10.17.1+sha512.17c560fca4867ae9473a3899ad84a88334914f379be46d455cbf92e5cf4b39d34985d452d2583baf19967fa76cb5c17bc9e245529d0b98745721aa7200ecaf7a"
} }
+105 -105
View File
@@ -31,11 +31,11 @@ importers:
specifier: ~5.8.3 specifier: ~5.8.3
version: 5.8.3 version: 5.8.3
vite: vite:
specifier: ^7.1.6 specifier: ^7.1.7
version: 7.1.6(@types/node@24.5.2) version: 7.1.7(@types/node@24.5.2)
vite-plugin-solid: vite-plugin-solid:
specifier: ^2.11.8 specifier: ^2.11.8
version: 2.11.8(solid-js@1.9.9)(vite@7.1.6(@types/node@24.5.2)) version: 2.11.8(solid-js@1.9.9)(vite@7.1.7(@types/node@24.5.2))
packages: packages:
@@ -295,113 +295,113 @@ packages:
'@neutralinojs/lib@6.3.0': '@neutralinojs/lib@6.3.0':
resolution: {integrity: sha512-5HOtqWwylQ5SD6G/QaLNOSfub+/+fh08tTJfsEslg5fYFVbcCdTS50byqWTvkjluW57KaeuCaFpALhT20bFhDQ==} resolution: {integrity: sha512-5HOtqWwylQ5SD6G/QaLNOSfub+/+fh08tTJfsEslg5fYFVbcCdTS50byqWTvkjluW57KaeuCaFpALhT20bFhDQ==}
'@rollup/rollup-android-arm-eabi@4.52.0': '@rollup/rollup-android-arm-eabi@4.52.2':
resolution: {integrity: sha512-VxDYCDqOaR7NXzAtvRx7G1u54d2kEHopb28YH/pKzY6y0qmogP3gG7CSiWsq9WvDFxOQMpNEyjVAHZFXfH3o/A==} resolution: {integrity: sha512-o3pcKzJgSGt4d74lSZ+OCnHwkKBeAbFDmbEm5gg70eA8VkyCuC/zV9TwBnmw6VjDlRdF4Pshfb+WE9E6XY1PoQ==}
cpu: [arm] cpu: [arm]
os: [android] os: [android]
'@rollup/rollup-android-arm64@4.52.0': '@rollup/rollup-android-arm64@4.52.2':
resolution: {integrity: sha512-pqDirm8koABIKvzL59YI9W9DWbRlTX7RWhN+auR8HXJxo89m4mjqbah7nJZjeKNTNYopqL+yGg+0mhCpf3xZtQ==} resolution: {integrity: sha512-cqFSWO5tX2vhC9hJTK8WAiPIm4Q8q/cU8j2HQA0L3E1uXvBYbOZMhE2oFL8n2pKB5sOCHY6bBuHaRwG7TkfJyw==}
cpu: [arm64] cpu: [arm64]
os: [android] os: [android]
'@rollup/rollup-darwin-arm64@4.52.0': '@rollup/rollup-darwin-arm64@4.52.2':
resolution: {integrity: sha512-YCdWlY/8ltN6H78HnMsRHYlPiKvqKagBP1r+D7SSylxX+HnsgXGCmLiV3Y4nSyY9hW8qr8U9LDUx/Lo7M6MfmQ==} resolution: {integrity: sha512-vngduywkkv8Fkh3wIZf5nFPXzWsNsVu1kvtLETWxTFf/5opZmflgVSeLgdHR56RQh71xhPhWoOkEBvbehwTlVA==}
cpu: [arm64] cpu: [arm64]
os: [darwin] os: [darwin]
'@rollup/rollup-darwin-x64@4.52.0': '@rollup/rollup-darwin-x64@4.52.2':
resolution: {integrity: sha512-z4nw6y1j+OOSGzuVbSWdIp1IUks9qNw4dc7z7lWuWDKojY38VMWBlEN7F9jk5UXOkUcp97vA1N213DF+Lz8BRg==} resolution: {integrity: sha512-h11KikYrUCYTrDj6h939hhMNlqU2fo/X4NB0OZcys3fya49o1hmFaczAiJWVAFgrM1NCP6RrO7lQKeVYSKBPSQ==}
cpu: [x64] cpu: [x64]
os: [darwin] os: [darwin]
'@rollup/rollup-freebsd-arm64@4.52.0': '@rollup/rollup-freebsd-arm64@4.52.2':
resolution: {integrity: sha512-Q/dv9Yvyr5rKlK8WQJZVrp5g2SOYeZUs9u/t2f9cQ2E0gJjYB/BWoedXfUT0EcDJefi2zzVfhcOj8drWCzTviw==} resolution: {integrity: sha512-/eg4CI61ZUkLXxMHyVlmlGrSQZ34xqWlZNW43IAU4RmdzWEx0mQJ2mN/Cx4IHLVZFL6UBGAh+/GXhgvGb+nVxw==}
cpu: [arm64] cpu: [arm64]
os: [freebsd] os: [freebsd]
'@rollup/rollup-freebsd-x64@4.52.0': '@rollup/rollup-freebsd-x64@4.52.2':
resolution: {integrity: sha512-kdBsLs4Uile/fbjZVvCRcKB4q64R+1mUq0Yd7oU1CMm1Av336ajIFqNFovByipciuUQjBCPMxwJhCgfG2re3rg==} resolution: {integrity: sha512-QOWgFH5X9+p+S1NAfOqc0z8qEpJIoUHf7OWjNUGOeW18Mx22lAUOiA9b6r2/vpzLdfxi/f+VWsYjUOMCcYh0Ng==}
cpu: [x64] cpu: [x64]
os: [freebsd] os: [freebsd]
'@rollup/rollup-linux-arm-gnueabihf@4.52.0': '@rollup/rollup-linux-arm-gnueabihf@4.52.2':
resolution: {integrity: sha512-aL6hRwu0k7MTUESgkg7QHY6CoqPgr6gdQXRJI1/VbFlUMwsSzPGSR7sG5d+MCbYnJmJwThc2ol3nixj1fvI/zQ==} resolution: {integrity: sha512-kDWSPafToDd8LcBYd1t5jw7bD5Ojcu12S3uT372e5HKPzQt532vW+rGFFOaiR0opxePyUkHrwz8iWYEyH1IIQA==}
cpu: [arm] cpu: [arm]
os: [linux] os: [linux]
'@rollup/rollup-linux-arm-musleabihf@4.52.0': '@rollup/rollup-linux-arm-musleabihf@4.52.2':
resolution: {integrity: sha512-BTs0M5s1EJejgIBJhCeiFo7GZZ2IXWkFGcyZhxX4+8usnIo5Mti57108vjXFIQmmJaRyDwmV59Tw64Ap1dkwMw==} resolution: {integrity: sha512-gKm7Mk9wCv6/rkzwCiUC4KnevYhlf8ztBrDRT9g/u//1fZLapSRc+eDZj2Eu2wpJ+0RzUKgtNijnVIB4ZxyL+w==}
cpu: [arm] cpu: [arm]
os: [linux] os: [linux]
'@rollup/rollup-linux-arm64-gnu@4.52.0': '@rollup/rollup-linux-arm64-gnu@4.52.2':
resolution: {integrity: sha512-uj672IVOU9m08DBGvoPKPi/J8jlVgjh12C9GmjjBxCTQc3XtVmRkRKyeHSmIKQpvJ7fIm1EJieBUcnGSzDVFyw==} resolution: {integrity: sha512-66lA8vnj5mB/rtDNwPgrrKUOtCLVQypkyDa2gMfOefXK6rcZAxKLO9Fy3GkW8VkPnENv9hBkNOFfGLf6rNKGUg==}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@rollup/rollup-linux-arm64-musl@4.52.0': '@rollup/rollup-linux-arm64-musl@4.52.2':
resolution: {integrity: sha512-/+IVbeDMDCtB/HP/wiWsSzduD10SEGzIZX2945KSgZRNi4TSkjHqRJtNTVtVb8IRwhJ65ssI56krlLik+zFWkw==} resolution: {integrity: sha512-s+OPucLNdJHvuZHuIz2WwncJ+SfWHFEmlC5nKMUgAelUeBUnlB4wt7rXWiyG4Zn07uY2Dd+SGyVa9oyLkVGOjA==}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@rollup/rollup-linux-loong64-gnu@4.52.0': '@rollup/rollup-linux-loong64-gnu@4.52.2':
resolution: {integrity: sha512-U1vVzvSWtSMWKKrGoROPBXMh3Vwn93TA9V35PldokHGqiUbF6erSzox/5qrSMKp6SzakvyjcPiVF8yB1xKr9Pg==} resolution: {integrity: sha512-8wTRM3+gVMDLLDdaT6tKmOE3lJyRy9NpJUS/ZRWmLCmOPIJhVyXwjBo+XbrrwtV33Em1/eCTd5TuGJm4+DmYjw==}
cpu: [loong64] cpu: [loong64]
os: [linux] os: [linux]
'@rollup/rollup-linux-ppc64-gnu@4.52.0': '@rollup/rollup-linux-ppc64-gnu@4.52.2':
resolution: {integrity: sha512-X/4WfuBAdQRH8cK3DYl8zC00XEE6aM472W+QCycpQJeLWVnHfkv7RyBFVaTqNUMsTgIX8ihMjCvFF9OUgeABzw==} resolution: {integrity: sha512-6yqEfgJ1anIeuP2P/zhtfBlDpXUb80t8DpbYwXQ3bQd95JMvUaqiX+fKqYqUwZXqdJDd8xdilNtsHM2N0cFm6A==}
cpu: [ppc64] cpu: [ppc64]
os: [linux] os: [linux]
'@rollup/rollup-linux-riscv64-gnu@4.52.0': '@rollup/rollup-linux-riscv64-gnu@4.52.2':
resolution: {integrity: sha512-xIRYc58HfWDBZoLmWfWXg2Sq8VCa2iJ32B7mqfWnkx5mekekl0tMe7FHpY8I72RXEcUkaWawRvl3qA55og+cwQ==} resolution: {integrity: sha512-sshYUiYVSEI2B6dp4jMncwxbrUqRdNApF2c3bhtLAU0qA8Lrri0p0NauOsTWh3yCCCDyBOjESHMExonp7Nzc0w==}
cpu: [riscv64] cpu: [riscv64]
os: [linux] os: [linux]
'@rollup/rollup-linux-riscv64-musl@4.52.0': '@rollup/rollup-linux-riscv64-musl@4.52.2':
resolution: {integrity: sha512-mbsoUey05WJIOz8U1WzNdf+6UMYGwE3fZZnQqsM22FZ3wh1N887HT6jAOjXs6CNEK3Ntu2OBsyQDXfIjouI4dw==} resolution: {integrity: sha512-duBLgd+3pqC4MMwBrKkFxaZerUxZcYApQVC5SdbF5/e/589GwVvlRUnyqMFbM8iUSb1BaoX/3fRL7hB9m2Pj8Q==}
cpu: [riscv64] cpu: [riscv64]
os: [linux] os: [linux]
'@rollup/rollup-linux-s390x-gnu@4.52.0': '@rollup/rollup-linux-s390x-gnu@4.52.2':
resolution: {integrity: sha512-qP6aP970bucEi5KKKR4AuPFd8aTx9EF6BvutvYxmZuWLJHmnq4LvBfp0U+yFDMGwJ+AIJEH5sIP+SNypauMWzg==} resolution: {integrity: sha512-tzhYJJidDUVGMgVyE+PmxENPHlvvqm1KILjjZhB8/xHYqAGeizh3GBGf9u6WdJpZrz1aCpIIHG0LgJgH9rVjHQ==}
cpu: [s390x] cpu: [s390x]
os: [linux] os: [linux]
'@rollup/rollup-linux-x64-gnu@4.52.0': '@rollup/rollup-linux-x64-gnu@4.52.2':
resolution: {integrity: sha512-nmSVN+F2i1yKZ7rJNKO3G7ZzmxJgoQBQZ/6c4MuS553Grmr7WqR7LLDcYG53Z2m9409z3JLt4sCOhLdbKQ3HmA==} resolution: {integrity: sha512-opH8GSUuVcCSSyHHcl5hELrmnk4waZoVpgn/4FDao9iyE4WpQhyWJ5ryl5M3ocp4qkRuHfyXnGqg8M9oKCEKRA==}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@rollup/rollup-linux-x64-musl@4.52.0': '@rollup/rollup-linux-x64-musl@4.52.2':
resolution: {integrity: sha512-2d0qRo33G6TfQVjaMR71P+yJVGODrt5V6+T0BDYH4EMfGgdC/2HWDVjSSFw888GSzAZUwuska3+zxNUCDco6rQ==} resolution: {integrity: sha512-LSeBHnGli1pPKVJ79ZVJgeZWWZXkEe/5o8kcn23M8eMKCUANejchJbF/JqzM4RRjOJfNRhKJk8FuqL1GKjF5oQ==}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@rollup/rollup-openharmony-arm64@4.52.0': '@rollup/rollup-openharmony-arm64@4.52.2':
resolution: {integrity: sha512-A1JalX4MOaFAAyGgpO7XP5khquv/7xKzLIyLmhNrbiCxWpMlnsTYr8dnsWM7sEeotNmxvSOEL7F65j0HXFcFsw==} resolution: {integrity: sha512-uPj7MQ6/s+/GOpolavm6BPo+6CbhbKYyZHUDvZ/SmJM7pfDBgdGisFX3bY/CBDMg2ZO4utfhlApkSfZ92yXw7Q==}
cpu: [arm64] cpu: [arm64]
os: [openharmony] os: [openharmony]
'@rollup/rollup-win32-arm64-msvc@4.52.0': '@rollup/rollup-win32-arm64-msvc@4.52.2':
resolution: {integrity: sha512-YQugafP/rH0eOOHGjmNgDURrpYHrIX0yuojOI8bwCyXwxC9ZdTd3vYkmddPX0oHONLXu9Rb1dDmT0VNpjkzGGw==} resolution: {integrity: sha512-Z9MUCrSgIaUeeHAiNkm3cQyst2UhzjPraR3gYYfOjAuZI7tcFRTOD+4cHLPoS/3qinchth+V56vtqz1Tv+6KPA==}
cpu: [arm64] cpu: [arm64]
os: [win32] os: [win32]
'@rollup/rollup-win32-ia32-msvc@4.52.0': '@rollup/rollup-win32-ia32-msvc@4.52.2':
resolution: {integrity: sha512-zYdUYhi3Qe2fndujBqL5FjAFzvNeLxtIqfzNEVKD1I7C37/chv1VxhscWSQHTNfjPCrBFQMnynwA3kpZpZ8w4A==} resolution: {integrity: sha512-+GnYBmpjldD3XQd+HMejo+0gJGwYIOfFeoBQv32xF/RUIvccUz20/V6Otdv+57NE70D5pa8W/jVGDoGq0oON4A==}
cpu: [ia32] cpu: [ia32]
os: [win32] os: [win32]
'@rollup/rollup-win32-x64-gnu@4.52.0': '@rollup/rollup-win32-x64-gnu@4.52.2':
resolution: {integrity: sha512-fGk03kQylNaCOQ96HDMeT7E2n91EqvCDd3RwvT5k+xNdFCeMGnj5b5hEgTGrQuyidqSsD3zJDQ21QIaxXqTBJw==} resolution: {integrity: sha512-ApXFKluSB6kDQkAqZOKXBjiaqdF1BlKi+/eqnYe9Ee7U2K3pUDKsIyr8EYm/QDHTJIM+4X+lI0gJc3TTRhd+dA==}
cpu: [x64] cpu: [x64]
os: [win32] os: [win32]
'@rollup/rollup-win32-x64-msvc@4.52.0': '@rollup/rollup-win32-x64-msvc@4.52.2':
resolution: {integrity: sha512-6iKDCVSIUQ8jPMoIV0OytRKniaYyy5EbY/RRydmLW8ZR3cEBhxbWl5ro0rkUNe0ef6sScvhbY79HrjRm8i3vDQ==} resolution: {integrity: sha512-ARz+Bs8kY6FtitYM96PqPEVvPXqEZmPZsSkXvyX19YzDqkCaIlhCieLLMI5hxO9SRZ2XtCtm8wxhy0iJ2jxNfw==}
cpu: [x64] cpu: [x64]
os: [win32] os: [win32]
@@ -568,8 +568,8 @@ packages:
engines: {node: '>=14'} engines: {node: '>=14'}
hasBin: true hasBin: true
rollup@4.52.0: rollup@4.52.2:
resolution: {integrity: sha512-+IuescNkTJQgX7AkIDtITipZdIGcWF0pnVvZTWStiazUmcGA2ag8dfg0urest2XlXUi9kuhfQ+qmdc5Stc3z7g==} resolution: {integrity: sha512-I25/2QgoROE1vYV+NQ1En9T9UFB9Cmfm2CJ83zZOlaDpvz29wGQSZXWKw7MiNXau7wYgB/T9fVIdIuEQ+KbiiA==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'} engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true hasBin: true
@@ -630,8 +630,8 @@ packages:
'@testing-library/jest-dom': '@testing-library/jest-dom':
optional: true optional: true
vite@7.1.6: vite@7.1.7:
resolution: {integrity: sha512-SRYIB8t/isTwNn8vMB3MR6E+EQZM/WG1aKmmIUCfDXfVvKfc20ZpamngWHKzAmmu9ppsgxsg4b2I7c90JZudIQ==} resolution: {integrity: sha512-VbA8ScMvAISJNJVbRDTJdCwqQoAareR/wutevKanhR2/1EkoXVZVkkORaYm/tNVCjP/UDTKtcw3bAkwOUdedmA==}
engines: {node: ^20.19.0 || >=22.12.0} engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true hasBin: true
peerDependencies: peerDependencies:
@@ -893,73 +893,73 @@ snapshots:
'@neutralinojs/lib@6.3.0': '@neutralinojs/lib@6.3.0':
optionalDependencies: optionalDependencies:
'@rollup/rollup-darwin-x64': 4.52.0 '@rollup/rollup-darwin-x64': 4.52.2
'@rollup/rollup-linux-x64-gnu': 4.52.0 '@rollup/rollup-linux-x64-gnu': 4.52.2
'@rollup/rollup-android-arm-eabi@4.52.0': '@rollup/rollup-android-arm-eabi@4.52.2':
optional: true optional: true
'@rollup/rollup-android-arm64@4.52.0': '@rollup/rollup-android-arm64@4.52.2':
optional: true optional: true
'@rollup/rollup-darwin-arm64@4.52.0': '@rollup/rollup-darwin-arm64@4.52.2':
optional: true optional: true
'@rollup/rollup-darwin-x64@4.52.0': '@rollup/rollup-darwin-x64@4.52.2':
optional: true optional: true
'@rollup/rollup-freebsd-arm64@4.52.0': '@rollup/rollup-freebsd-arm64@4.52.2':
optional: true optional: true
'@rollup/rollup-freebsd-x64@4.52.0': '@rollup/rollup-freebsd-x64@4.52.2':
optional: true optional: true
'@rollup/rollup-linux-arm-gnueabihf@4.52.0': '@rollup/rollup-linux-arm-gnueabihf@4.52.2':
optional: true optional: true
'@rollup/rollup-linux-arm-musleabihf@4.52.0': '@rollup/rollup-linux-arm-musleabihf@4.52.2':
optional: true optional: true
'@rollup/rollup-linux-arm64-gnu@4.52.0': '@rollup/rollup-linux-arm64-gnu@4.52.2':
optional: true optional: true
'@rollup/rollup-linux-arm64-musl@4.52.0': '@rollup/rollup-linux-arm64-musl@4.52.2':
optional: true optional: true
'@rollup/rollup-linux-loong64-gnu@4.52.0': '@rollup/rollup-linux-loong64-gnu@4.52.2':
optional: true optional: true
'@rollup/rollup-linux-ppc64-gnu@4.52.0': '@rollup/rollup-linux-ppc64-gnu@4.52.2':
optional: true optional: true
'@rollup/rollup-linux-riscv64-gnu@4.52.0': '@rollup/rollup-linux-riscv64-gnu@4.52.2':
optional: true optional: true
'@rollup/rollup-linux-riscv64-musl@4.52.0': '@rollup/rollup-linux-riscv64-musl@4.52.2':
optional: true optional: true
'@rollup/rollup-linux-s390x-gnu@4.52.0': '@rollup/rollup-linux-s390x-gnu@4.52.2':
optional: true optional: true
'@rollup/rollup-linux-x64-gnu@4.52.0': '@rollup/rollup-linux-x64-gnu@4.52.2':
optional: true optional: true
'@rollup/rollup-linux-x64-musl@4.52.0': '@rollup/rollup-linux-x64-musl@4.52.2':
optional: true optional: true
'@rollup/rollup-openharmony-arm64@4.52.0': '@rollup/rollup-openharmony-arm64@4.52.2':
optional: true optional: true
'@rollup/rollup-win32-arm64-msvc@4.52.0': '@rollup/rollup-win32-arm64-msvc@4.52.2':
optional: true optional: true
'@rollup/rollup-win32-ia32-msvc@4.52.0': '@rollup/rollup-win32-ia32-msvc@4.52.2':
optional: true optional: true
'@rollup/rollup-win32-x64-gnu@4.52.0': '@rollup/rollup-win32-x64-gnu@4.52.2':
optional: true optional: true
'@rollup/rollup-win32-x64-msvc@4.52.0': '@rollup/rollup-win32-x64-msvc@4.52.2':
optional: true optional: true
'@solidjs/router@0.15.3(solid-js@1.9.9)': '@solidjs/router@0.15.3(solid-js@1.9.9)':
@@ -1120,32 +1120,32 @@ snapshots:
prettier@3.6.2: {} prettier@3.6.2: {}
rollup@4.52.0: rollup@4.52.2:
dependencies: dependencies:
'@types/estree': 1.0.8 '@types/estree': 1.0.8
optionalDependencies: optionalDependencies:
'@rollup/rollup-android-arm-eabi': 4.52.0 '@rollup/rollup-android-arm-eabi': 4.52.2
'@rollup/rollup-android-arm64': 4.52.0 '@rollup/rollup-android-arm64': 4.52.2
'@rollup/rollup-darwin-arm64': 4.52.0 '@rollup/rollup-darwin-arm64': 4.52.2
'@rollup/rollup-darwin-x64': 4.52.0 '@rollup/rollup-darwin-x64': 4.52.2
'@rollup/rollup-freebsd-arm64': 4.52.0 '@rollup/rollup-freebsd-arm64': 4.52.2
'@rollup/rollup-freebsd-x64': 4.52.0 '@rollup/rollup-freebsd-x64': 4.52.2
'@rollup/rollup-linux-arm-gnueabihf': 4.52.0 '@rollup/rollup-linux-arm-gnueabihf': 4.52.2
'@rollup/rollup-linux-arm-musleabihf': 4.52.0 '@rollup/rollup-linux-arm-musleabihf': 4.52.2
'@rollup/rollup-linux-arm64-gnu': 4.52.0 '@rollup/rollup-linux-arm64-gnu': 4.52.2
'@rollup/rollup-linux-arm64-musl': 4.52.0 '@rollup/rollup-linux-arm64-musl': 4.52.2
'@rollup/rollup-linux-loong64-gnu': 4.52.0 '@rollup/rollup-linux-loong64-gnu': 4.52.2
'@rollup/rollup-linux-ppc64-gnu': 4.52.0 '@rollup/rollup-linux-ppc64-gnu': 4.52.2
'@rollup/rollup-linux-riscv64-gnu': 4.52.0 '@rollup/rollup-linux-riscv64-gnu': 4.52.2
'@rollup/rollup-linux-riscv64-musl': 4.52.0 '@rollup/rollup-linux-riscv64-musl': 4.52.2
'@rollup/rollup-linux-s390x-gnu': 4.52.0 '@rollup/rollup-linux-s390x-gnu': 4.52.2
'@rollup/rollup-linux-x64-gnu': 4.52.0 '@rollup/rollup-linux-x64-gnu': 4.52.2
'@rollup/rollup-linux-x64-musl': 4.52.0 '@rollup/rollup-linux-x64-musl': 4.52.2
'@rollup/rollup-openharmony-arm64': 4.52.0 '@rollup/rollup-openharmony-arm64': 4.52.2
'@rollup/rollup-win32-arm64-msvc': 4.52.0 '@rollup/rollup-win32-arm64-msvc': 4.52.2
'@rollup/rollup-win32-ia32-msvc': 4.52.0 '@rollup/rollup-win32-ia32-msvc': 4.52.2
'@rollup/rollup-win32-x64-gnu': 4.52.0 '@rollup/rollup-win32-x64-gnu': 4.52.2
'@rollup/rollup-win32-x64-msvc': 4.52.0 '@rollup/rollup-win32-x64-msvc': 4.52.2
fsevents: 2.3.3 fsevents: 2.3.3
semver@6.3.1: {} semver@6.3.1: {}
@@ -1190,7 +1190,7 @@ snapshots:
validate-html-nesting@1.2.3: {} validate-html-nesting@1.2.3: {}
vite-plugin-solid@2.11.8(solid-js@1.9.9)(vite@7.1.6(@types/node@24.5.2)): vite-plugin-solid@2.11.8(solid-js@1.9.9)(vite@7.1.7(@types/node@24.5.2)):
dependencies: dependencies:
'@babel/core': 7.28.4 '@babel/core': 7.28.4
'@types/babel__core': 7.20.5 '@types/babel__core': 7.20.5
@@ -1198,25 +1198,25 @@ snapshots:
merge-anything: 5.1.7 merge-anything: 5.1.7
solid-js: 1.9.9 solid-js: 1.9.9
solid-refresh: 0.6.3(solid-js@1.9.9) solid-refresh: 0.6.3(solid-js@1.9.9)
vite: 7.1.6(@types/node@24.5.2) vite: 7.1.7(@types/node@24.5.2)
vitefu: 1.1.1(vite@7.1.6(@types/node@24.5.2)) vitefu: 1.1.1(vite@7.1.7(@types/node@24.5.2))
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
vite@7.1.6(@types/node@24.5.2): vite@7.1.7(@types/node@24.5.2):
dependencies: dependencies:
esbuild: 0.25.10 esbuild: 0.25.10
fdir: 6.5.0(picomatch@4.0.3) fdir: 6.5.0(picomatch@4.0.3)
picomatch: 4.0.3 picomatch: 4.0.3
postcss: 8.5.6 postcss: 8.5.6
rollup: 4.52.0 rollup: 4.52.2
tinyglobby: 0.2.15 tinyglobby: 0.2.15
optionalDependencies: optionalDependencies:
'@types/node': 24.5.2 '@types/node': 24.5.2
fsevents: 2.3.3 fsevents: 2.3.3
vitefu@1.1.1(vite@7.1.6(@types/node@24.5.2)): vitefu@1.1.1(vite@7.1.7(@types/node@24.5.2)):
optionalDependencies: optionalDependencies:
vite: 7.1.6(@types/node@24.5.2) vite: 7.1.7(@types/node@24.5.2)
yallist@3.1.1: {} yallist@3.1.1: {}
+36 -2
View File
@@ -14,6 +14,7 @@ import {
generateOutputCommand, generateOutputCommand,
getAvailableCodecs, getAvailableCodecs,
getLengthMicroseconds, getLengthMicroseconds,
getPixelFormats,
playFile, playFile,
videoFileExtensions, videoFileExtensions,
type CodecInfo, type CodecInfo,
@@ -60,6 +61,8 @@ function App() {
const [outputopts, setOutputopts] = createSignal(""); const [outputopts, setOutputopts] = createSignal("");
const [audioCodec, setAudioCodec] = createSignal("copy"); const [audioCodec, setAudioCodec] = createSignal("copy");
const [audioEncoder, setAudioEncoder] = createSignal(""); const [audioEncoder, setAudioEncoder] = createSignal("");
const [pixelFormatList, setPixelFormatList] = createSignal([] as string[]);
const [pixelFormat, setPixelFormat] = createSignal("");
const logs: { [id: number]: string[] } = {}; const logs: { [id: number]: string[] } = {};
let supportedCodecs: CodecList = { vcodecs: [], acodecs: [] }; let supportedCodecs: CodecList = { vcodecs: [], acodecs: [] };
let ffmpegParams: FFmpegParams = { let ffmpegParams: FFmpegParams = {
@@ -139,6 +142,8 @@ function App() {
ffmpegParams.encoder = firstCodec.encoders[0]; ffmpegParams.encoder = firstCodec.encoders[0];
setSelectedCodec(firstCodec); setSelectedCodec(firstCodec);
setSelectedEncoder(firstCodec.encoders[0]); setSelectedEncoder(firstCodec.encoders[0]);
setPixelFormatList(await getPixelFormats());
}); });
onCleanup(() => { onCleanup(() => {
@@ -231,7 +236,7 @@ function App() {
function getAudioEncoders() { function getAudioEncoders() {
const codec = audioCodec(); const codec = audioCodec();
const encoders = audioCodecList().find( let encoders = audioCodecList().find(
(v) => v.shortName === codec, (v) => v.shortName === codec,
)?.encoders; )?.encoders;
@@ -239,6 +244,10 @@ function App() {
setAudioEncoder(encoders[0]); setAudioEncoder(encoders[0]);
} }
if (encoders instanceof Array && encoders.length === 0) {
encoders = undefined;
}
return encoders; return encoders;
} }
@@ -265,10 +274,18 @@ function App() {
encoder = undefined; encoder = undefined;
} }
let acodec = audioEncoder();
if (acodec === "") {
acodec = audioCodec();
}
const pixFmt = pixelFormat();
ffmpegParams = { ffmpegParams = {
vcodec: selectedCodec()?.shortName ?? "", vcodec: selectedCodec()?.shortName ?? "",
encoder, encoder,
acodec: audioCodec(), acodec,
abitrate: ffmpegParams.abitrate, abitrate: ffmpegParams.abitrate,
crf: ffmpegParams.crf, crf: ffmpegParams.crf,
doNotUseAn: ffmpegParams.doNotUseAn, doNotUseAn: ffmpegParams.doNotUseAn,
@@ -283,6 +300,7 @@ function App() {
input: inputopts(), input: inputopts(),
output: outputopts(), output: outputopts(),
}, },
pixelFormat: pixFmt === "" ? undefined : pixFmt,
}; };
setOutputCommand(generateOutputCommand(ffmpegParams)); setOutputCommand(generateOutputCommand(ffmpegParams));
@@ -542,6 +560,22 @@ function App() {
</For> </For>
</select> </select>
</Show> </Show>
<label for="pixelFormat">Pixel Format</label>
<select
name="pixelFormat"
id="pixelFormat"
class="k-dropdown"
title="This option is here for the people who knows what they're doing. Not all encoders will support every pixel format."
value={pixelFormat()}
oninput={(e) => setPixelFormat(e.target.value)}
>
<option value="">Same as source</option>
<For each={pixelFormatList()}>
{(item, _) => (
<option value={item}>{item}</option>
)}
</For>
</select>
</form> </form>
<Switch fallback={<div></div>}> <Switch fallback={<div></div>}>
<Match <Match
+33 -1
View File
@@ -74,6 +74,28 @@ export async function getAvailableCodecs(): Promise<CodecList> {
}; };
} }
export async function getPixelFormats(): Promise<string[]> {
const seperator = "-----";
const result = await Neutralino.os.execCommand("ffmpeg -pix_fmts");
const rawFormatList = result.stdOut
.substring(result.stdOut.indexOf(seperator) + seperator.length)
.split("\n");
let outputFormats = [];
for (let format of rawFormatList) {
format = format.trim();
const flags = format.substring(0, 5);
if (flags[1] !== "O") continue;
const parts = format.substring(6).split(/ +/);
outputFormats.push(parts[0]);
}
return outputFormats;
}
export function playFile(path: string) { export function playFile(path: string) {
Neutralino.os.execCommand(`ffplay "${path}"`); Neutralino.os.execCommand(`ffplay "${path}"`);
} }
@@ -114,6 +136,7 @@ export interface FFmpegParams {
faststart?: boolean; faststart?: boolean;
doNotUseAn?: boolean; doNotUseAn?: boolean;
speed?: number; speed?: number;
pixelFormat?: string;
/** /**
* Extra parameters defined by users * Extra parameters defined by users
*/ */
@@ -156,8 +179,17 @@ export function generateOutputCommand(params: FFmpegParams) {
globalopts += " " + params.useropts.global; globalopts += " " + params.useropts.global;
} }
if (params.pixelFormat) {
if (params.outputopts === undefined) {
params.outputopts = {};
}
params.outputopts = {
"pix_fmt": params.pixelFormat
};
}
if (params.outputopts !== undefined) { if (params.outputopts !== undefined) {
console.log(params.outputopts);
for (const key of Object.keys(params.outputopts)) { for (const key of Object.keys(params.outputopts)) {
outputopts += ` -${key} ${params.outputopts[key]}`.trimEnd(); outputopts += ` -${key} ${params.outputopts[key]}`.trimEnd();
} }