astrofox-io / astrofox Goto Github PK
View Code? Open in Web Editor NEWAstrofox is a motion graphics program that lets you turn audio into amazing videos.
Home Page: https://astrofox.io
License: MIT License
Astrofox is a motion graphics program that lets you turn audio into amazing videos.
Home Page: https://astrofox.io
License: MIT License
Rendering panel (note that the sound wave shows at the correct width for a short while first):
In editor after (note that the width value didn't change):
In editor after changing and re-entering value:
Console log and finished video, just in case:
-1650485390082.log
https://upload.disroot.org/r/DXQWUJve#5tn2z4z4KYXUaJmgEXquve0lRYu5LDqN8tunYXQwBDw=
The v1.3 source code is not released yet, please consider add a release, thanks
Rendering finishes a short way into the full file, citing the error
Uncaught (in promise) Error: Unable to deserialize cloned data. at Object.renderFrames
This error only seems to occur when attempting to render with a canvas size of 1920 by 1080 pixels. Rendering works successfully using the default canvas size.
When changing the frame size to a multiple of the default size (2135x1200) I get
Uncaught Error: write EINVAL
This error does not occur when running with a canvas of (1920x1080) in version 1.2.0, however then the animation is out of sync with the audio.
Astrofox Version: 1.4.0
System: MacOS (ARM) - I have also tried on two seperate windows machines also to no avail.
It looks like the builds at present aren't universal - they're locked to Intel / x86 only.
This means they run emulated at a cost to performance on modern machines that run on ARM such as Apple's Macbook Pro, Mac Studio etc....
It would be great if the build could be released as a universal binary, or if there could be separate x86 and ARM builds.
Recently, I managed to edit a 2 hour audio clip of a podcast and was happy it was done after 2 weeks (phew!) but when I loaded the audio on the Stage it took some time to import. I edit a sample before and just hit render on the same project. It took me 6 hours to render it on lower preset at 30fps for 480p resolution.
I don't know what is the issue.
I thought about some solutions.
I am not great at JS but had some time to think on this, would like this project to improve😀
The program obviously works really well in real time, not just for rendering videos. So is there a way to show the working canvas in full screen to a second monitor? What I mean is that there's the usual interface on your first monitor, and on the second monitor there's only the canvas that takes up the whole screen. This would be extremely useful for live sets and other live activities.
I think that's somewhat easy to implement.
Great project by the way, thanks.
It would be useful if parameter values could be set along a timeline with interpolation between values. E.g. an opacity value could start at 0 and interpolate to 0.77 over a one second span.
Editors might want to display some visual elements at specific segments in an audio file, rather than through the entire recording. E.g. a song title might display for the first few seconds and fade away.
See the Blender dopesheet.
Hi,
Would be excellent if I was able to use custom fonts without having to launch from source :-)
Thank you! And also thank you for providing appimage, all other packaging formats are horrendous!
Design a new plugin architecture
I think it will be more useful if we could modulate effects with audio.
I think it would be nice if you could save an audio file with a project. I see that used images are base64'ed into the gzipped JSON project file, maybe it would fit in there too?
Just a small suggestion :)
Keep up the great work, this is an awesome project!
Hi, I love how easy this software is to use !
I'm diving into js sound manipulation and I think Astrofox is a great way to be introduced to this technology.
I have a super simple need : is it possible to add border radius as a parameter for sound bars ? (same as current position x, y, width, height). If not, I think this would be such a great addition to the software, I personally would like to use rounded bars in one of my projects.
Thanks !
Hi,
It might be an idea to change the UI so that the "Controls" section only shows controls for the currently selected Scene.
Especially when a project becomes serious and has like 5 different scenes with tons of images and text, there is a lot of stuff going on in Controls that is not relevant to what I'm currently editing.
Thanks for reading, and thank you for the excellent application!
View source shows:
<span class="FhvzrOwmD..snip..FCSbxLhBB2U" title="Show Reactor">
<svg viewBox="0 0 20 20" shape-rendering="geometricPrecision">
<use xlink:href=".//home/catpiss/astrofox/src/view/assets/icons/flash.svg">
</use>
</svg>
</span>
I saved this repo after seeing it on reddit to use as an example of how to structure, setup, create, build, and package an electron app. This repo appears to be well organized and tries to work with the latest Electron, React, and Redux versions.
However, since your upgrade from electron 8 to 10, I haven't been able to get this repo to work.
Astrofox was working until Updated Electron and other packages. 52ccc58
Then from that commit up to but not including Merge branch 'master' of https://github.com/chr-ge/astrofox 601a321 I'm met with:
(node:17332) UnhandledPromiseRejectionWarning: Error: ENOENT: no such file or directory, scandir 'C:\Users\Derek\AppData\Local\Google\Chrome\User Data\Default\Extensions\fmkadmapgofadopljbjfkapdkoienihi'
at Object.readdirSync (fs.js:876:3)
at Object.fs.readdirSync (electron/js2c/asar.js:621:39)
at loadExtensions (A:\Code\github\astrofox-io\astrofox\app\main.js:31400:8)
at init (A:\Code\github\astrofox-io\astrofox\app\main.js:31420:11)
at processTicksAndRejections (internal/process/task_queues.js:97:5)
at async App.<anonymous> (A:\Code\github\astrofox-io\astrofox\app\main.js:31309:3)
After which from Merge branch 'master' of https://github.com/chr-ge/astrofox 601a321 to current master Merge pull request #24 from chr-ge/master 180809f I'm met with:
I can't figure out the proper launch.config to debug this app and see your .gitignore
excludes .vscode
.
Can you please remove that entry or add exceptions !.vscode/launch.json
and !.vscode/tasks.json
?
So far I have the following in launch.config but it's not working:
{
"version": "0.2.0",
"configurations": [
{
"name": "Electron: DevServer",
"type": "node",
"request": "launch",
"cwd": "${workspaceFolder}",
"preLaunchTask": "yarn build-electron",
"runtimeExecutable": "yarn",
"runtimeArgs": [ "run", "dev-view" ],
},
{
"name": "Electron: Main",
"type": "node",
"request": "launch",
"cwd": "${workspaceFolder}",
"protocol": "inspector",
// Doesn't work
"runtimeExecutable": "${workspaceFolder}/node_modules/.bin/dotenv",
"runtimeArgs": [ "electron", "./app" ],
// Can't set breakpoints
"runtimeExecutable": "yarn",
"runtimeArgs": [ "start", ],
},
{ // Fails to attach to the renderer
"name": "Electron: Renderer",
"type": "chrome",
"request": "attach",
"port": 9223,
"webRoot": "${workspaceFolder}",
"timeout": 30000
}
],
"compounds": [
{
"name": "Electron: All",
"configurations": [
"Electron: DevServer",
"Electron: Main",
"Electron: Renderer",
]
}
]
}
When attempt to save video, the following error occurs:
ERROR
Frame rendering failed.
Debug log:
-1644765509368.log
When attempt to save video, the following error occurs.
astrofox Starting video render e5d2aa9c1341648e42ef2ee562a025670ac70e29
Logger.js:21 astrofox Starting process: /home/astrofox/bin/ffmpeg -loglevel debug -y -stats -f rawvideo -c:v rawvideo -pix_fmt rgba -s 854x480 -r 60 -i pipe:0 -c:v libx264 -f mp4 -pix_fmt yuv420p -vf vflip -profile:v high -tune animation -movflags +faststart -preset slow -crf 18 /tmp/Astrofox/e5d2aa9c1341648e42ef2ee562a025670ac70e29.mp4
2Logger.js:21 astrofox ffmpeg version 4.4-static https://johnvansickle.com/ffmpeg/ Copyright (c) 2000-2021 the FFmpeg developers
built with gcc 8 (Debian 8.3.0-6)
configuration: --enable-gpl --enable-version3 --enable-static --disable-debug --disable-ffplay --disable-indev=sndio --disable-outdev=sndio --cc=gcc --enable-fontconfig --enable-frei0r --enable-gnutls --enable-gmp --enable-libgme --enable-gray --enable-libaom --enable-libfribidi --enable-libass --enable-libvmaf --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librubberband --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libvorbis --enable-libopus --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libdav1d --enable-libxvid --enable-libzvbi --enable-libzimg
libavutil 56. 70.100 / 56. 70.100
libavcodec 58.134.100 / 58.134.100
libavformat 58. 76.100 / 58. 76.100
libavdevice 58. 13.100 / 58. 13.100
libavfilter 7.110.100 / 7.110.100
libswscale 5. 9.100 / 5. 9.100
libswresample 3. 9.100 / 3. 9.100
libpostproc 55. 9.100 / 55. 9.100
Splitting the commandline.
Reading option '-loglevel' ... matched as option 'loglevel' (set logging level) with argument 'debug'.
Reading option '-y' ... matched as option 'y' (overwrite output files) with argument '1'.
Reading option '-stats' ... matched as option 'stats' (print progress report during encoding) with argument '1'.
Reading option '-f' ... matched as option 'f' (force format) with argument 'rawvideo'.
Reading option '-c:v' ... matched as option 'c' (codec name) with argument 'rawvideo'.
Reading option '-pix_fmt' ... matched as option 'pix_fmt' (set pixel format) with argument 'rgba'.
Reading option '-s' ... matched as option 's' (set frame size (WxH or abbreviation)) with argument '854x480'.
Reading option '-r' ... matched as option 'r' (set frame rate (Hz value, fraction or abbreviation)) with argument '60'.
Reading option '-i' ... matched as input url with argument 'pipe:0'.
Reading option '-c:v' ... matched as option 'c' (codec name) with argument 'libx264'.
Reading option '-f' ... matched as option 'f' (force format) with argument 'mp4'.
Reading option '-pix_fmt' ... matched as option 'pix_fmt' (set pixel format) with argument 'yuv420p'.
Reading option '-vf' ... matched as option 'vf' (set video filters) with argument 'vflip'.
Reading option '-profile:v' ... matched as option 'profile' (set profile) with argument 'high'.
Reading option '-tune' ... matched as AVOption 'tune' with argument 'animation'.
Reading option '-movflags' ... matched as AVOption 'movflags' with argument '+faststart'.
Reading option '-preset' ... matched as AVOption 'preset' with argument 'slow'.
Reading option '-crf' ... matched as AVOption 'crf' with argument '18'.
Reading option '/tmp/Astrofox/e5d2aa9c1341648e42ef2ee562a025670ac70e29.mp4' ... matched as output url.
Finished splitting the commandline.
Parsing a group of options: global .
Applying option loglevel (set logging level) with argument debug.
Applying option y (overwrite output files) with argument 1.
Applying option stats (print progress report during encoding) with argument 1.
Successfully parsed a group of options.
Parsing a group of options: input url pipe:0.
Applying option f (force format) with argument rawvideo.
Applying option c:v (codec name) with argument rawvideo.
Applying option pix_fmt (set pixel format) with argument rgba.
Applying option s (set frame size (WxH or abbreviation)) with argument 854x480.
Applying option r (set frame rate (Hz value, fraction or abbreviation)) with argument 60.
Successfully parsed a group of options.
Opening an input file: pipe:0.
[rawvideo @ 0x5d31f40] Opening 'pipe:0' for reading
[pipe @ 0x5d32c80] Setting default whitelist 'crypto,data'
Logger.js:21 astrofox Frame rendering failed.
TypeError: input.slice is not a function
output @ Logger.js:21
error @ Logger.js:37
raiseError @ error.js:20
renderFrames @ VideoRenderer.js:146
async function (async)
renderFrames @ VideoRenderer.js:129
(anonymous) @ VideoRenderer.js:28
setTimeout (async)
(anonymous) @ VideoRenderer.js:25
(anonymous) @ EventEmitter.js:23
emit @ EventEmitter.js:23
(anonymous) @ RenderProcess.js:23
(anonymous) @ EventEmitter.js:23
emit @ EventEmitter.js:23
onStdErr @ Process.js:19
(anonymous) @ VM113 preload.js:1866
emit @ VM14 node:events:394
addChunk @ VM58 readable:312
readableAddChunk @ VM58 readable:287
Readable.push @ VM58 readable:226
onStreamRead @ VM48 stream_base_commons:190
Logger.js:21 astrofox Video rendering stopped.
Logger.js:21 astrofox Frame rendering failed.
TypeError: input.slice is not a function
output @ Logger.js:21
error @ Logger.js:37
raiseError @ error.js:20
renderFrames @ VideoRenderer.js:146
async function (async)
renderFrames @ VideoRenderer.js:129
(anonymous) @ VideoRenderer.js:28
setTimeout (async)
(anonymous) @ VideoRenderer.js:25
(anonymous) @ EventEmitter.js:23
emit @ EventEmitter.js:23
(anonymous) @ RenderProcess.js:23
(anonymous) @ EventEmitter.js:23
emit @ EventEmitter.js:23
onStdErr @ Process.js:19
(anonymous) @ VM113 preload.js:1866
emit @ VM14 node:events:394
addChunk @ VM58 readable:312
readableAddChunk @ VM58 readable:287
Readable.push @ VM58 readable:226
onStreamRead @ VM48 stream_base_commons:190
Logger.js:21 astrofox Video rendering stopped.
2Logger.js:21 astrofox [rawvideo @ 0x5d31f40] Before avformat_find_stream_info() pos: 0 bytes read:0 seeks:0 nb_streams:1
[rawvideo @ 0x5d31f40] interrupted
[rawvideo @ 0x5d31f40] After avformat_find_stream_info() pos: 0 bytes read:0 seeks:0 frames:0
Input #0, rawvideo, from 'pipe:0':
Duration: N/A, bitrate: 787046 kb/s
Stream #0:0, 0, 1/60: Video: rawvideo, 1 reference frame (RGBA / 0x41424752), rgba, 854x480 (0x0), 0/1, 787046 kb/s, 60 tbr, 60 tbn, 60 tbc
Successfully opened the file.
Parsing a group of options: output url /tmp/Astrofox/e5d2aa9c1341648e42ef2ee562a025670ac70e29.mp4.
Applying option c:v (codec name) with argument libx264.
Applying option f (force format) with argument mp4.
Applying option pix_fmt (set pixel format) with argument yuv420p.
Applying option vf (set video filters) with argument vflip.
Applying option profile:v (set profile) with argument high.
Successfully parsed a group of options.
Opening an output file: /tmp/Astrofox/e5d2aa9c1341648e42ef2ee562a025670ac70e29.mp4.
[file @ 0x5d4b600] Setting default whitelist 'file,crypto,data'
Successfully opened the file.
Stream mapping:
Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (libx264))
Finishing stream 0:0 without any data written to it.
detected 12 logical cores
[graph 0 input from stream 0:0 @ 0x5d4c7c0] Setting 'video_size' to value '854x480'
[graph 0 input from stream 0:0 @ 0x5d4c7c0] Setting 'pix_fmt' to value '26'
[graph 0 input from stream 0:0 @ 0x5d4c7c0] Setting 'time_base' to value '1/60'
[graph 0 input from stream 0:0 @ 0x5d4c7c0] Setting 'pixel_aspect' to value '0/1'
[graph 0 input from stream 0:0 @ 0x5d4c7c0] Setting 'frame_rate' to value '60/1'
[graph 0 input from stream 0:0 @ 0x5d4c7c0] w:854 h:480 pixfmt:rgba tb:1/60 fr:60/1 sar:0/1
[format @ 0x5d4d4c0] Setting 'pix_fmts' to value 'yuv420p'
[auto_scaler_0 @ 0x5d4f2c0] Setting 'flags' to value 'bicubic'
[auto_scaler_0 @ 0x5d4f2c0] w:iw h:ih flags:'bicubic' interl:0
[format @ 0x5d4d4c0] auto-inserting filter 'auto_scaler_0' between the filter 'Parsed_vflip_0' and the filter 'format'
[AVFilterGraph @ 0x5d491c0] query_formats: 4 queried, 2 merged, 1 already done, 0 delayed
[auto_scaler_0 @ 0x5d4f2c0] w:854 h:480 fmt:rgba sar:0/1 -> w:854 h:480 fmt:yuv420p sar:0/1 flags:0x4
[libx264 @ 0x5d46d40] using mv_range_thread = 24
[libx264 @ 0x5d46d40] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 0x5d46d40] profile High, level 3.1, 4:2:0, 8-bit
[libx264 @ 0x5d46d40] 264 - core 161 r3048 b86ae3c - H.264/MPEG-4 AVC codec - Copyleft 2003-2021 - http://www.videolan.org/x264.html - options: cabac=1 ref=10 deblock=1:1:1 analyse=0x3:0x113 me=hex subme=8 psy=1 psy_rd=0.40:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=2 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=15 lookahead_threads=2 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=5 b_pyramid=2 b_adapt=1 b_bias=0 direct=3 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=50 rc=crf mbtree=1 crf=18.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:0.60
Could not write header for output file #0 (incorrect codec parameters ?): Immediate exit requested
Error initializing output stream 0:0 --
[AVIOContext @ 0x5d47b00] Statistics: 0 seeks, 1 writeouts
[AVIOContext @ 0x5d43100] Statistics: 0 bytes read, 0 seeks
Exiting normally, received signal 15.
Logger.js:21 astrofox Process ended with code 1 and signal null
Logger.js:21 astrofox Video rendering stopped.
Logger.js:21 astrofox Video rendering stopped.
I think it'd be nice if there was a way to render without the UI overhead (if there is one / if it's avoidable).
Maybe even spawning multiple instances for multi core rendering...
something like astrofox my_project.afx --audio music.mp3 --instances 4 --end 00:05:00 --out my_video.mp4
Astrofox uses a huge amount of CPU, over 90% when rendering a video from it, even on medium quality and less than 30fps. The particular process that I saw to eat that much CPU is the ffmpeg one.
Effects like shake and zoom would be nice
Whenever I try to export a video, it'll open the video rendering view, show some random number for the elapsed time and claim that it's finished. It doesn't export a video though.
I'm using the v0.1.6 AppImage
Computer | |
---|---|
Processor | Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz |
Memory | 8039MB (2437MB used) |
Device-Type | Notebook |
OS | Manjaro Linux |
Display | |
---|---|
Resolution | 1920x1080 pixels |
Session Display Server | The X.Org Foundation 1.20.9 |
Audio-Devices | |
---|---|
Audio Adapter | HDA-Intel - HDA Intel PCH |
Hello,
The app only allows these extentions.
astrofox/src/view/actions/audio.js
Line 75 in a769113
I traced the loadAudioData function down to where it loads the AudioBuffer, however I couldnt find the source code for the buffer class.
Is the audio engine is able to handle FLAC files?
As said in the title, there are time I can't explain why, but it goes through the whole export, but the output video is juste ~1 to 2seconds long ending abruptly.
The export process goes through all the frames.
And looking at the developer console does not show any warning or error, so I'm not sure what's happening there.
I'm using it on Mac OS X (10.15.7) and it is the last version, at least the check update says so (version 1.2.0) I haven't try to build a version from the sources yet, but most of the changes has been package updates, so I doubt it would fix anything.
Not sure how to help there to give more infos
Here are the log from one export that failed:
astrofox Starting process: /Applications/Astrofox.app/Contents/Resources/bin/ffmpeg -y -i /var/folders/z1/bjw67dmd5bvgbgmq2qhf9xrm0000gn/T/Astrofox/1947a04a1ee7cfb3685d9c3395fd9a8a86e601cb.mp4 -i /var/folders/z1/bjw67dmd5bvgbgmq2qhf9xrm0000gn/T/Astrofox/1947a04a1ee7cfb3685d9c3395fd9a8a86e601cb.aac -codec copy -shortest -movflags +faststart /Users/godzil/Desktop/BankB.mp4
app.js:1 astrofox ffmpeg version 4.3.1-tessus https://evermeet.cx/ffmpeg/ Copyright (c) 2000-2020 the FFmpeg developers
built with Apple clang version 11.0.0 (clang-1100.0.33.17)
configuration: --cc=/usr/bin/clang --prefix=/opt/ffmpeg --extra-version=tessus --enable-avisynth --enable-fontconfig --enable-gpl --enable-libaom --enable-libass --enable-libbluray --enable-libdav1d --enable-libfreetype --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libmysofa --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopus --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvmaf --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-version3 --pkg-config-flags=--static --disable-ffplay
libavutil 56. 51.100 / 56. 51.100
libavcodec 58. 91.100 / 58. 91.100
libavformat 58. 45.100 / 58. 45.100
libavdevice 58. 10.100 / 58. 10.100
libavfilter 7. 85.100 / 7. 85.100
libswscale 5. 7.100 / 5. 7.100
libswresample 3. 7.100 / 3. 7.100
libpostproc 55. 7.100 / 55. 7.100
app.js:1 astrofox Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/var/folders/z1/bjw67dmd5bvgbgmq2qhf9xrm0000gn/T/Astrofox/1947a04a1ee7cfb3685d9c3395fd9a8a86e601cb.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.45.100
Duration: 00:00:00.17, start: 0.000000, bitrate: 9347 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 854x480, 9321 kb/s, 60 fps, 60 tbr, 15360 tbn, 120 tbc (default)
Metadata:
handler_name : VideoHandler
app.js:1 astrofox [aac @ 0x7f843e008800] Estimating duration from bitrate, this may be inaccurate
Input #1, aac, from '/var/folders/z1/bjw67dmd5bvgbgmq2qhf9xrm0000gn/T/Astrofox/1947a04a1ee7cfb3685d9c3395fd9a8a86e601cb.aac':
Duration: 00:00:47.33, bitrate: 167 kb/s
Stream #1:0: Audio: aac (LC), 48000 Hz, stereo, fltp, 167 kb/s
app.js:1 astrofox Output #0, mp4, to '/Users/godzil/Desktop/BankB.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.45.100
app.js:1 astrofox Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 854x480, q=2-31, 9321 kb/s, 60 fps, 60 tbr, 15360 tbn, 15360 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 167 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Stream #1:0 -> #0:1 (copy)
Press [q] to stop, [?] for help
app.js:1 astrofox [mp4 @ 0x7f843d809400] Starting second pass: moving the moov atom to the beginning of the file
app.js:1 astrofox frame= 10 fps=0.0 q=-1.0 Lsize= 194kB time=00:00:00.12 bitrate=12435.4kbits/s speed= 165x
video:190kB audio:3kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.774424%
app.js:1 astrofox Process ended with code 0 and signal null
The format YouTube uses for the audio only streams is OPUS inside of a .webm container (try youtube-dl -F {some url}
). When downloaded, those files can be played in Chrome by just dragging them onto the tab bar; they are natively supported.
BTW, thanks for your work, it really means alot!
Currently, the primary color is a shade of purple. With the use of CSS4, we can set this value as a CSS4 variable via less
, and allow users to change this value solely within the view. This would also change the use of the primary color to be via CSS4 variables.
Some considerations:
Extra considerations:
Checking out v1.4.0 works fine, but with master it's broken.
On Linux it is nice to have a native window decoration for all applications. And most have that. I wonder if you would implement it to this application. Thanks!
Hi!
If it was possible to add two settings to scenes, this could be used to easily create what marketing departments would refer to as "hip, stylish, youthful, dynamic, exciting, engaging" powerpoint-type presentations:
Obviously the next step is to add support for various transitions :-)
Thank you! Excellent app!
The .afx files are globally a JSON compress, would it be possible to read directly a json ?
So, this software seems pretty cool. However, while the UI seems good inside the window, it is terrible outside of the window. First, let me mention the focus of this issue; the categorization in the menu bar is pretty bad. For example, you'd expect the Astrofox menu to contain stuff like "About Astrofox" or "Preferences". What you wouldn't expect to be there is every file-related option. You'd think those would be in a File menu, or if not a File menu, the Edit menu. However, all the Edit menu has are options that should be in a Preferences menu. Second, I'll mention some smaller grievances. If I start to render a scene, I have no idea of how far the rendering process is or how much time is left. All Astrofox does is darken itself and make itself unusable, unless you have it on full screen. When closing out the app, it should say something like "Do you want to save your project?" rather than just closing with no questions asked.
Fantastic software !
I wish there was something equivalent / similar and as simple to render text effects (optionally with no sound 😅). I think most open source video editing programs don't have good text effects (with character animation or typewriting) like one can produce with after effects. That would allow to create good intros by example.
Hey, this seems like a really awesome project. I got everything working fine and was able to create a project and import the audio clip, but for some reason, when I try to export the video, it just doesn't work.
The progress bar goes all the way to 100% and then it says it's trying to output the file, but nothing happens.
Note that I am using the Linux version and my audio file is over an hour long, so it takes a very long time. Could it have something to do with this?
Great project! Makes it super easy to make audio-reactive videos which is always nice.
However, I'd like to go one step further, having MIDI support!
Most basic would be supporting MIDI Clock messages, to make things in sync.
Going further, reacting to MIDI CC messages would allow you to connect visualizations to various knobs you use in music hardware/software.
Going even further, being able to trigger things based on MIDI notes would also further make astrofox a really killer application.
For inspiration, it might be worth looking at Resolume Arena/Avenue and see how it's implemented there. You can basically map any MIDI information to any parameter in the application, so you for example change the brightness of a layer based on when the kick drum happens. The help document for the MIDI setup can be found here: https://resolume.com/support/en/midi-shortcuts
You can see that there is a locales folder in the installation directory, but there is only English on the software interface. When will I18N be ready?
System information:
Operating System: openSUSE Leap 15.2
KDE Plasma Version: 5.18.6
KDE Frameworks Version: 5.71.0
Qt Version: 5.12.7
Kernel Version: 5.3.18-lp152.60-default
OS Type: 64-bit
Processors: 4 × Intel® Core™ i5-3230M CPU @ 2.60GHz
Memory: 7.6 GiB of RAM
Running from 1.1.0. AppImage. Upon startup, the canvas surface is rendered as blank and gray, despite being set to black by default and including some starter elements. Changing this parameter has no effect. Even after importing some audio and an image, the canvas remains blank and unresponsive. Resizing the canvas causes an icon to render in the top-left corner. I tried running Storyboarder to check for issues with my graphics drivers or Electron, but it worked fine. Three.js reported several errors. Any idea what's going on? The full console log and screenshots should be below.
Would love to contribute to this project. I would love to see a "time remaining" feature during rendering. Is this something you'd be interested in? If so, do you care if I add dependencies or would you prefer to write the time remaining logic directly in the source?
Thanks for the awesome project!
Edit: As a followup, it might be nice to have some rules of conduct for PR solicitation, would love to just write this PR knowing you're open to it!
:Linux user here.
This is a really cool project and I am very eager to get export working! Here are the results I am currently getting: https://streamable.com/rlor9r
There seems to be a snag in the ffmpeg encoding--I was thinking it would be fine to bypass some of the complexity and just save each frame to disk and try the command on a terminal. Could you advise me on how to do that?
Again, this is a wonderful project and I appreciate you sharing it with all of us.
Unless I'm doing something wrong, it seems that loading up a project doesn't set the canvas at the size of when that project was saved. It would be nice if it did :)
It would be useful if we could control the visibility of scenes based on a timeline. This would be similar to video editor timeline in that it could toggle scene visibility and possible interpolate scene properties like opacity for smooth transition.
The scene timeline elements would be bound to the audio file timecodes, so scenes could be shown or hidden through specific segments of the audio file. E.g. each scene visibility element would have a start and end time.
It could be possible for the same scene element to (re)appear multiple times within the audio file duration.
Scene visibility control could be also achieved in a more flexible, but slightly more advanced, manner with a parameter interpolation timeline (#87)
Editors might want to display particular visual elements at specific spans within the audio. E.g. a song title and artist text could display for the first five seconds and then fade to zero opacity.
When generating the video the program would report error
I went to the electron console it said EACCESS /home/catpiss/astrofox/bin/ffmpeg
I ran chmod +x /home/catpiss/astrofox/bin/ffmpeg
and that fixed the issue for me
uname -a
Linux black 5.14.11-200.fc34.x86_64 #1 SMP Sun Oct 10 14:39:31 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
So, as far as I can see, when rendering an animation, Astrofox first exports a .png sequence and then calls ffmpeg to render the images into a video file.
I'd really recommend to not use PNGs for that, because:
As alternatives I'd suggest EXR if the goal is to be lossless (I guess TARGA / .tga would be fine too) or just plain old JPEGs.
Here are some references / benchmarks:
https://blender.stackexchange.com/a/148466
https://medium.com/@aeriform.io/what-i-learnt-about-png-files-the-hard-way-f39c69e897ce
https://youtu.be/F1kYBnY6mwg
https://twitter.com/troy_s/status/1157434283776040960
Currently, the visualisers in this project all use a linear scale to display audio. This leads to a lot of visualising on the left side, where the lower frequencies live, and almost no visualising on the right side of the visualiser. Virtually all audio visualisers use a logarithmic scale to display audio activity, as it leads to a much more even division of audio activity.
For example: loading in the video 20Hz to 20kHz, we can see that the visualiser stays at the left for almost the entirety of the video and quickly starts to go right nearing the end of the video. On a logarithmic scale, this would go from left to right at a constant speed.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.