Stream copying is fast and preserves encoded quality, but arbitrary cut points can depend on preceding keyframes. For precise visible boundaries, decode and re-encode, then inspect the exported frames.
A cut request is not always a self-contained picture
You ask a utility to trim a clip from 00:12.500, and the result includes a little extra footage or opens awkwardly. The command may be copying compressed packets rather than creating a new independently decodable frame at your requested moment.
Many delivery codecs store some frames using information from other frames. Keyframes provide important random-access points, while dependent frames need surrounding decode context. Stream copying avoids decoding and re-encoding, which makes it fast and preserves the copied encoded data. It also limits the operations available. A crop, resize, burned-in subtitle or arbitrary newly encoded first frame cannot be performed just by moving packets into a new file.
Choose the trim according to the job
| You need | Prefer | Reason |
|---|---|---|
| A rough excerpt for internal review | Stream copy, then check playback | Fast and avoids an extra encode |
| The first spoken word on a precise frame | Decode and re-encode | Allows a new encoded boundary |
| A crop or subtitles with the cut | Decode, filter and re-encode | Filtering changes decoded pixels |
| A production handoff | The recipient’s agreed format | Timing and decode behavior need to be predictable |
Some specialized editors perform smart rendering, re-encoding only a boundary region when the codec and workflow allow it. Do not assume every “lossless trim” tool does this. Read its mode description and verify the output rather than interpreting the word lossless as frame accuracy.
A stream-copy example and its limitation
For a compatible source, an illustrative FFmpeg rough-cut command is:
ffmpeg -ss 00:00:12.500 -i input.mp4 -t 8 -map 0:v:0 -map 0:a:0? -c copy rough-cut.mp4This selects the first video stream, includes the first audio stream if present, requests eight seconds and copies the encoded streams. It deliberately does not collect every subtitle, alternate audio track or attachment. Adjust mapping for your file.
FFmpeg documents that input seeking normally moves to a preceding seek point. With stream copy, the extra segment may be preserved instead of decoded and discarded. Exact behavior also depends on timestamps, the container and player handling. Inspect the actual beginning, end and audio alignment. A duration display that says eight seconds is not sufficient proof that the intended first frame is shown.
Re-encode when the visible boundary matters
For a broadly compatible H.264/AAC delivery copy, try this starting command on a duplicate:
ffmpeg -ss 00:00:12.500 -i input.mp4 -t 8 -map 0:v:0 -map 0:a:0? -c:v libx264 -crf 18 -preset medium -c:a aac -b:a 192k -movflags +faststart exact-cut.mp4Input seeking with transcoding uses accurate seeking by default: the extra decoded segment before the requested position is discarded. The quality value and audio bitrate are examples, not universal delivery specifications. Your FFmpeg build must include the chosen encoders.
The timestamp still has to correspond to a real frame boundary. A 25 fps source has frames 40 milliseconds apart; it cannot contain an actual frame at every possible millisecond. If your edit requires a specific numbered frame, choose that boundary in an editor or use a frame-aware filtering workflow, then verify the first visible frame. Variable frame rate requires extra care because frame intervals differ.
Do not force a new frame rate during a simple trim
Preserve source timing unless a delivery requirement calls for conversion. Adding a new output frame rate can duplicate or drop frames, making the trim test harder to interpret. Do not change 29.97 to 30 just to make the number look tidy.
For dialogue, inspect the cut at the waveform as well as the image. Cutting at a nonzero waveform value can create a click, and encoding may introduce a small audio boundary behavior distinct from the video frame boundary. A very short audio fade in an editor can help when appropriate, but adding that fade requires audio processing. Keep some extra source handles for future edits rather than trimming away every frame outside the chosen excerpt.
Inspect frames, sync and the actual destination player
Import the source and trimmed result into an editor. Compare the intended first frame, last visible frame and a sync event inside the excerpt. Play the first second rather than judging only a paused thumbnail. Also open the file in the player or upload path the recipient will use.
For a controlled exercise, choose a source with a visible clock or a clear action across your cut point. Make both a stream-copy trim and a re-encoded trim from the same request. Compare start behavior, duration and output size. This is a repeatable test on your own files, not a promise that one command behaves identically for every codec. Keep the faster version when it satisfies the task and the precise version when boundary accuracy is material.
Common questions
Does stream copying reduce video quality?
The copied encoded streams are not re-encoded, so it avoids generational encoding loss. Container compatibility and cut-boundary behavior still need checking.
Does re-encoding make any millisecond an exact frame?
No. Video has actual frame boundaries. Re-encoding lets you create a new encoded start at a chosen decoded frame, but it cannot invent a source frame at every timestamp.
Sources & further reading
Written for ToolWillow with original explanations and examples. Consult current product documentation for controls that vary by version.


