4127f4ccc7
Even with the filter changes made, there's still some cases where filter chain hangs can result from filter reconfigurations. To solve the issue completely, I have split out pre-processing video files to separate ffmpeg processes, so that the filter chain for compositing will not ever be reconfigured. Each input video now has a separate ffmpeg process run for it which does the scaling, padding, and video extending steps. To avoid issues with disk space usage and extra cpu usage or quality loss, the output from these separate processes is sent to the compositing ffmpeg process as uncompressed video in a pipe. To simplify the setup, named pipes (special files) are used rather than setting up pipes in the ruby code programmatically. The extra ffmpeg processes are configured to log to files, and when complete their log output is copied to the recording processing log. Processes are joined to ensure zombie processes are not created, and the return codes of all the processes are checked so errors can be detected. Due to the overhead of transferring video through pipes, this might be a bit slower than the 2.4 recording processing - but on the other hand, some of the video decoding and scaling happens in parallel, so it might balance out. |
||
---|---|---|
.. | ||
core | ||
notes/scripts | ||
podcast/scripts | ||
presentation | ||
screenshare | ||
slides | ||
.rubocop.yml | ||
changelog.md | ||
deploy.sh | ||
pyproject.toml |