Automated release: version and notes generated from pull requests merged since 3.1.7.
Fixed
render.pywith both anexportand achaptersstage failed withoutput_existson a fresh
output path (its dry run said completed), leaving the delivery without chapters: the chapters
stage replaced a file export.py had written as a child process, which the guard took for someone
else's. A file a stage of this run wrote now counts as the run's own (#415).metadata.py(and so render's chapters stage) wrote an MP4 with its index at the end, undoing
the export's faststart; MP4/MOV/M4A/M4V output is now+faststart(#415).- The re-encoding tools named a
.webmsource's default output.webm, which their x264/AAC
encodes cannot be written into: the dry run said completed and the run failed in the muxer. The
default is now<stem>_<suffix>.mp4;metadata.py, a stream copy, keeps.webm(#415). waveform.py --title/--srt/--text --dry-runplanned the text at font size 0 without saying the
numbers were placeholders; a note now says so (#415).batch.pynever removed its.workintermediates, so two sources with one stem (clip.mp4,
clip.mov) refused each other's, and a later run was refused on the previous run's. Each item now
works in a directory of its own, removed when it ends (#415).batch.pymarked an itemokwith an output that was never written when the last step names no
{out}(a recipe ending incheck.py), and its cache entry then missed on every run. Such a step
passes its input on and the last written file is delivered. A recipe in which no step writes (a QC
pass withcheck.pyorprobe.py) reports each row withwritten: falseand a note, and its
cache entries no longer miss asoutput_missingon every run (#415).batch.py's final-name collision check missed names that differ only in case, which are one file
on macOS and Windows (#415).- After a full disk, a missing encoder or an unreadable input,
export.py's subtitle/data fallback,
color.py --retag,cut.py's copy paths andsync.py's copy paths encoded again (up to three
times) and blamed the subtitles or the copy; they now report the first failure, as
run_keeping_subtitles()does since #389 (#415). - A timeout or interrupt after the deliverable was written (
export.py --normalize,render.py's
chapters and check stages) said "nothing was written" while the file stayed; the message now names
the kept file and the document carries it asoutput.export.py --normalizeexited 1 when its
loudness pass timed out or was interrupted; it now exits 124 / 130 / 143 like render.py (#415). - ffprobe calls ignored a
--timeoutbelow 120 s, and a probe that hit its own 120 s ceiling advised
raising--timeout, which could not help. Probes now takemin(120 s, --timeout)(#415). - Follow-ups from the #428 review:
export.py --preset copykeeps a.webmsource's extension;
render.pyexits 124/130/143 when an executed plan's tool or a pack destination is stopped, and
carries the delivery an export stage kept asoutput;export.pysays the export is kept when a
read after the write is stopped;batch.pynames a delivered intermediate by its own container
(.mp4), delivers under the output lock through a sibling temp across filesystems, refuses an
existing output in--dry-runtoo, handles stems near the 255-byte name limit, and refuses an
output_dirthat is the input folder (which letsuffix: ""with--overwritereplace the sources);
its cache key covers the files a step names (check.py --compare REF, a LUT), so editing or
removing one reruns the items;check.py --dry-runon a not-yet-written file no longer crashes; a child killed by a signal exits 128 + the
signal (#415). - Dry-run honesty, process handling, faststart and batch/render orchestration (#415) (#428)
What's Changed
- Dry-run honesty, process handling, faststart and batch/render orchestration (#415) by @kajisho5 in #428
Full Changelog: v3.1.7...v3.1.8