{"version": 2, "width": 100, "height": 32, "timestamp": 1790236331, "idle_time_limit": 5.0, "env": {"SHELL": "/bin/zsh", "TERM": "xterm-256color"}}
[0.022161, "o", "\u001b[1;35mPyFFmpegCore 0.3.0 — 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.037217, "o", "\r\n\u001b[1;36m$ python3 -m venv demo-env\u001b[0m\r\n"]
[11.464568, "o", "\r\n\u001b[1;36m$ demo-env/bin/python -m pip install pyffmpegcore==0.3.0\u001b[0m\r\n"]
[12.993773, "o", "Collecting pyffmpegcore==0.3.0 (from -r /var/folders/7b/80dmndy11t904kbw93kk1z180000gp/T/tmp.6nxJKEFgvu (line 1))\r\n"]
[13.142926, "o", "  Downloading pyffmpegcore-0.3.0-py3-none-any.whl (101 kB)\r\n"]
[13.183648, "o", "Installing collected packages: pyffmpegcore\r\n"]
[13.286944, "o", "Successfully installed pyffmpegcore-0.3.0\r\n"]
[17.343013, "o", "\r\n\u001b[1;36m$ demo-env/bin/pyffmpegcore --version\u001b[0m\r\n"]
[18.859931, "o", "pyffmpegcore 0.3.0\r\n"]
[21.887568, "o", "\r\n\u001b[1;36m$ demo-env/bin/pyffmpegcore doctor\u001b[0m\r\n"]
[23.449121, "o", "PyFFmpegCore CLI 0.3.0\r\nPlatform: Darwin 25.6.0 (arm64)\r\nPython: 3.14.6 (/private/tmp/pyffmpegcore-terminal-demo.RaeQdq/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\n"]
[23.449249, "o", "ffprobe: 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\nSubtitles: encoders=ass,mov_text,srt,webvtt, burn-filter=no\r\nHardware acceleration: videotoolbox\r\nOptional core filters missing: drawtext, subtitles\r\n"]
[27.481877, "o", "\r\n\u001b[1;36m$ demo-env/bin/pyffmpegcore smoke-test --keep-dir media\u001b[0m\r\n"]
[29.235425, "o", "Smoke test: PASS\r\nSynthetic input: mpeg4 320x180 (64.8 KB)\r\n"]
[29.235534, "o", "Verified thumbnail: 160x90 (3.6 KB)\r\nArtifacts: /private/tmp/pyffmpegcore-terminal-demo.RaeQdq/media\r\n"]
[33.2647, "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.372845, "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.847127, "o", "Plan 1.0 — convert\r\nOverwrite policy: refuse\r\nTimeout: none\r\nInputs:\r\n  /private/tmp/pyffmpegcore-terminal-demo.RaeQdq/media/demo-input.mp4\r\nExpected outputs:\r\n  /private/tmp/pyffmpegcore-terminal-demo.RaeQdq/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.RaeQdq/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.RaeQdq/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.84724, "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.RaeQdq/media/demo-input.mp4: Input is readable\r\n[OK] output//private/tmp/pyffmpegcore-terminal-demo.RaeQdq/media/web.mp4: Output parent is writable: /private/tmp/pyffmpegcore-terminal-demo.RaeQdq/media\r\n[OK] collision//private/tmp/pyffmpegcore-terminal-demo.RaeQdq/media/web.mp4: No blocking output collision\r\n[OK] disk//private/tmp/pyffmpegcore-terminal-demo.RaeQdq/media/web.mp4: Free space 163214168064 bytes; estimate 3802982\r\n[OK] container//private/tmp/pyffmpegcore-terminal-demo.RaeQdq/media/web.mp4: Muxer available: mp4\r\n"]
[44.879431, "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.936038, "o", "\rProgress:  39.3% (23.59s)"]
[47.442136, "o", "\rProgress:  67.6% (40.56s)"]
[47.947156, "o", "\rProgress:  96.7% (58.02s)"]
[48.023716, "o", "\rProgress: 100% complete  \r\n"]
[48.267218, "o", "Output: /private/tmp/pyffmpegcore-terminal-demo.RaeQdq/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.267324, "o", "Receipt: /private/tmp/pyffmpegcore-terminal-demo.RaeQdq/media/web.receipt.json\r\n"]
[54.299249, "o", "\r\n\u001b[1;36m$ demo-env/bin/pyffmpegcore receipt validate media/web.receipt.json\u001b[0m\r\n"]
[55.482561, "o", "Valid receipt: schema 1.0, 1 item(s)\r\n"]
[59.510002, "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.529449, "o", "Recording complete — replay the commands against any local media file.\r\n"]
