{"version": 2, "width": 100, "height": 32, "timestamp": 1790238861, "idle_time_limit": 5.0, "env": {"SHELL": "/bin/zsh", "TERM": "xterm-256color"}}
[0.022076, "o", "\u001b[1;35mPyFFmpegCore 0.3.1 — public artifact to privacy-safe proof\u001b[0m\r\nEverything below runs now in this terminal; the media is synthetic and stays local.\r\n"]
[6.03694, "o", "\r\n\u001b[1;36m$ python3 -m venv demo-env\u001b[0m\r\n"]
[11.484899, "o", "\r\n\u001b[1;36m$ demo-env/bin/python -m pip install pyffmpegcore==0.3.1\u001b[0m\r\n"]
[12.921079, "o", "Collecting pyffmpegcore==0.3.1 (from -r /var/folders/7b/80dmndy11t904kbw93kk1z180000gp/T/tmp.6WBUqNRddN (line 1))\r\n"]
[13.063804, "o", "  Downloading pyffmpegcore-0.3.1-py3-none-any.whl (101 kB)\r\n"]
[13.092385, "o", "Installing collected packages: pyffmpegcore\r\n"]
[13.185733, "o", "Successfully installed pyffmpegcore-0.3.1\r\n"]
[17.240631, "o", "\r\n\u001b[1;36m$ demo-env/bin/pyffmpegcore --version\u001b[0m\r\n"]
[18.760342, "o", "pyffmpegcore 0.3.1\r\n"]
[21.787993, "o", "\r\n\u001b[1;36m$ demo-env/bin/pyffmpegcore doctor\u001b[0m\r\n"]
[23.332389, "o", "PyFFmpegCore CLI 0.3.1\r\nPlatform: Darwin 25.6.0 (arm64)\r\nPython: 3.14.6 (/private/tmp/pyffmpegcore-terminal-demo.uysL2q/demo-env/bin/python)\r\nffmpeg: OK (/opt/homebrew/bin/ffmpeg)\r\n  ffmpeg version 9.0.1 Copyright (c) 2000-2026 the FFmpeg developers\r\nffprobe: OK (/opt/homebrew/bin/ffprobe)\r\n  ffprobe version 9.0.1 Copyright (c) 2007-2026 the FFmpeg developers\r\nCapabilities: 190 encoders, 527 decoders, 481 filters, 184 muxers, 365 demuxers\r\nProtocols: 37 input, 30 output\r\n"]
[23.332534, "o", "Subtitles: encoders=ass,mov_text,srt,webvtt, burn-filter=no\r\nHardware acceleration: videotoolbox\r\nOptional core filters missing: drawtext, subtitles\r\n"]
[27.365318, "o", "\r\n\u001b[1;36m$ demo-env/bin/pyffmpegcore smoke-test --keep-dir media\u001b[0m\r\n"]
[29.118954, "o", "Smoke test: PASS\r\nSynthetic input: mpeg4 320x180 (64.8 KB)\r\nVerified thumbnail: 160x90 (3.6 KB)\r\nArtifacts: /private/tmp/pyffmpegcore-terminal-demo.uysL2q/media\r\n"]
[33.152708, "o", "\r\nMake the one-second synthetic input longer so structured progress is visible.\r\n\r\n\u001b[1;36m$ ffmpeg -stream_loop 59 -i media/synthetic-input.mp4 -t 60 -c copy media/demo-input.mp4\u001b[0m\r\n"]
[37.260598, "o", "\r\n\u001b[1;36m$ demo-env/bin/pyffmpegcore profile run web/mp4-compatible --input media/demo-input.mp4 --output media/web.mp4 --explain\u001b[0m\r\n"]
[38.719908, "o", "Plan 1.0 — convert\r\nOverwrite policy: refuse\r\nTimeout: none\r\nInputs:\r\n  /private/tmp/pyffmpegcore-terminal-demo.uysL2q/media/demo-input.mp4\r\nExpected outputs:\r\n  /private/tmp/pyffmpegcore-terminal-demo.uysL2q/media/web.mp4\r\nArgument vectors (display only; no shell is used):\r\n  1. convert: ffmpeg -n -nostdin -progress pipe:1 -nostats -i /private/tmp/pyffmpegcore-terminal-demo.uysL2q/media/demo-input.mp4 -map '0:v:0?' -map '0:a:0?' -map_metadata 0 -map_chapters 0 -c:v libx264 -c:a aac -pix_fmt yuv420p -movflags +faststart /private/tmp/pyffmpegcore-terminal-demo.uysL2q/media/web.mp4\r\nSelected streams:\r\n  video\r\n  audio\r\nOperations and trade-offs:\r\n  apply profile web/mp4-compatible v1\r\n  select the first video and first audio streams when present\r\n  preserve compatible container metadata and chapters\r\n  video codec: libx264\r\n  audio codec: aac\r\n  pixel format: yuv420p\r\n  hardware acceleration: none; use the software path\r\nRequired capabilities:\r\n  encoder:libx264\r\n  encoder:aac\r\n  muxer:mp4\r\nWarnings:\r\n  Only "]
[38.720031, "o", "the first video and first audio streams are selected. Other video or audio streams, subtitles, data streams, and attachments are omitted. Use --preserve-all-streams when the output container supports their codecs.\r\n\r\nPreflight PASS — convert\r\n[OK] ffmpeg: Executable: /opt/homebrew/bin/ffmpeg\r\n[OK] capability/encoder:libx264: Available\r\n[OK] capability/encoder:aac: Available\r\n[OK] capability/muxer:mp4: Available\r\n[OK] input//private/tmp/pyffmpegcore-terminal-demo.uysL2q/media/demo-input.mp4: Input is readable\r\n[OK] output//private/tmp/pyffmpegcore-terminal-demo.uysL2q/media/web.mp4: Output parent is writable: /private/tmp/pyffmpegcore-terminal-demo.uysL2q/media\r\n[OK] collision//private/tmp/pyffmpegcore-terminal-demo.uysL2q/media/web.mp4: No blocking output collision\r\n[OK] disk//private/tmp/pyffmpegcore-terminal-demo.uysL2q/media/web.mp4: Free space 163027517440 bytes; estimate 3802982\r\n[OK] container//private/tmp/pyffmpegcore-terminal-demo.uysL2q/media/web.mp4: Muxer available: mp4\r\n"]
[44.751736, "o", "\r\n\u001b[1;36m$ demo-env/bin/pyffmpegcore profile run web/mp4-compatible --input media/demo-input.mp4 --output media/web.mp4 --receipt media/web.receipt.json\u001b[0m\r\n"]
[46.8038, "o", "\rProgress:  35.6% (21.38s)"]
[47.303785, "o", "\rProgress:  65.3% (39.21s)"]
[47.813776, "o", "\rProgress:  95.1% (57.09s)"]
[47.9183, "o", "\rProgress: 100% complete  \r\n"]
[48.112674, "o", "Output: /private/tmp/pyffmpegcore-terminal-demo.uysL2q/media/web.mp4\r\nContainer: mov,mp4,m4a,3gp,3g2,mj2\r\nDuration: 60.02 seconds\r\nSize: 2.5 MB\r\nVideo: h264 320x180\r\nAudio: aac\r\n"]
[48.112781, "o", "Receipt: /private/tmp/pyffmpegcore-terminal-demo.uysL2q/media/web.receipt.json\r\n"]
[54.145395, "o", "\r\n\u001b[1;36m$ demo-env/bin/pyffmpegcore receipt validate media/web.receipt.json\u001b[0m\r\n"]
[55.329175, "o", "Valid receipt: schema 1.0, 1 item(s)\r\n"]
[59.356889, "o", "\r\n\u001b[1;32mPASS\u001b[0m — public install, preflight, plan, progress, output, and receipt all verified.\r\nNo upload. No telemetry. Content hashing stayed off.\r\n"]
[63.378221, "o", "Recording complete — replay the commands against any local media file.\r\n"]
