Skip to content
streamneo.
Setup Guides11 min read

How to Rotate Product Demo Videos on a YouTube Live Stream with FFmpeg on Windows

Prepare, rotate and sequence product demos with FFmpeg on Windows, then test playback and connect to YouTube Live safely.

sn.
StreamNeoPublished 5 October 2026
Worth sharing?

To rotate product demo videos on a YouTube Live stream from Windows, inspect the clips, apply the right FFmpeg rotation filter, and build and test the playlist before sending it to YouTube. Then pace the file input in real time, encode to YouTube’s current live guidance, and use the RTMPS URL and stream key shown in Live Control Room.

The important distinction is that correcting orientation, arranging files, pacing playback and connecting to YouTube are separate jobs. A command that works for one clip is not proof that a multi-file playlist will transition or repeat correctly, so rehearse the exact set of files you intend to use.

Prepare and inspect your Windows demo files

Use a current FFmpeg Windows build from a trusted distribution, and confirm that ffmpeg -version runs in Command Prompt or PowerShell. Keep the source videos together in a working folder, and make a copy before changing or re-encoding anything. FFmpeg can read the source files directly; a separate capture card or camera is not part of this file-based workflow.

Before writing a filter or playlist, inspect each video’s dimensions, frame rate, video codec and audio stream. You need to know whether a clip is landscape or portrait, whether its picture is already sideways, and whether sound is present. For a product close-up, for example, rotating a portrait phone clip can make the item upright but still leave a portrait-shaped image. That is a framing decision as well as an orientation decision.

One way to inspect a file is ffprobe -hide_banner -i "demo-one.mp4". FFprobe reports stream details and may report metadata such as rotation; that information is useful, but watch the actual picture too. The intended direction can depend on how the clip was recorded and whether rotation metadata is present. If the command reports an error, resolve that before treating the file as ready for a playlist.

Make a simple inventory, noting each filename, dimensions, frame rate and whether it has audio. Confirm that the files play from beginning to end and that dialogue, music or product sounds are usable at the transitions. A sequence can have technically readable files but still look abrupt if one opens with a long blank frame or its audio begins at a different level. If the clips need to be prepared in separate steps, preserve originals and test the prepared versions rather than assuming every file will combine cleanly.

This approach suits a fixed catalogue or a sequence of recorded demonstrations. If you need to combine prerecorded clips with a presenter, live camera or frequent hands-on scene changes, a live production tool gives you different controls; see how to add a folder of videos to OBS for continuous playback for a different workflow.

Correct orientation with transpose or rotate

Choose the filter after watching the clip, not from the filename or the fact that it came from a phone. FFmpeg’s transpose filter is for a quarter-turn: use transpose=dir=clock for clockwise rotation or transpose=dir=cclock for counter-clockwise rotation. Render or preview a short test and inspect the result. If the product remains sideways, try the opposite direction rather than changing several other settings at once.

For a turn that is not a quarter-turn, FFmpeg’s rotate filter accepts an angle in radians. Positive angles rotate clockwise and negative angles counter-clockwise. A command fragment might use -vf "rotate=ANGLE", but ANGLE is a placeholder, not a value to paste literally. Non-quarter-turn rotation can expose empty corners; you must decide how those areas should appear and what output dimensions you want. The FFmpeg filters documentation describes the filter options and rotation behaviour.

A quarter-turn changes the image geometry. A clip that was portrait may become landscape, and vice versa. Decide whether to retain that shape, fit it inside a chosen landscape canvas with empty space around it, or crop a portion of the image. Cropping can remove product details near the frame edge; fitting can leave bars. Check logos, packaging text and the edges of the product in the actual output frame before selecting a treatment.

Apply rotation consistently across the playlist only if the clips need the same correction. One demo may need clockwise rotation while another is already upright. If the playlist contains both kinds, prepare or filter them individually, then ensure their output dimensions and stream layout are compatible for the concatenation method you choose. A filter written for one clip does not infer the required orientation of every subsequent clip.

For more context on sending local media through an encoder, the FFmpeg podcast visualizer workflow is a related example, though its visualizer choices are not needed for a product demo.

Build and validate a file sequence

For a sequence of multiple files, FFmpeg’s concat demuxer reads a text file listing the inputs in order. Create a plain text playlist such as demo-list.txt:

file 'demo-one.mp4'
file 'demo-two.mp4'
file 'demo-three.mp4'

The names are examples only; replace them with your own filenames. Keeping the list and media in the same folder and using simple relative filenames makes the paths easier to check. The concat demuxer has safe-path validation enabled by default. Absolute Windows paths, paths outside the working folder and names with special characters can be rejected or require careful quoting. Read the FFmpeg concat demuxer documentation before changing safe-path settings; do not disable validation reflexively.

The demuxer is not a general-purpose repair tool. Its inputs need compatible streams and timestamps for clean joining. Differences in codecs, stream layout, dimensions, frame rates or audio can cause errors or unexpected transitions. Test the exact playlist on the target FFmpeg build before connecting it to a public broadcast. If it fails, standardise or prepare the clips separately, or choose a different workflow rather than assuming the list syntax is the only issue.

There are two distinct questions: can FFmpeg read the sequence, and does the sequence play as you intend? A successful read does not establish that audio is continuous, that the first frames of each product are sensible, or that the order is right. Play through every boundary and note whether there is a pause, a flash, a mismatched crop or an audio gap. Reorder the list and test again if needed.

For a single input, FFmpeg documents -stream_loop -1 as looping an input indefinitely. That option and -re—which reads input at its native frame rate—do different things. Neither alone proves that a multi-file concat construction repeats the whole playlist as intended. Test the exact arrangement across the end-to-start boundary. If dependable rotation of a long product catalogue is the main concern and you would rather not keep a Windows machine running, moving a 24/7 YouTube stream from OBS to a cloud service describes a different operational choice.

Pace playback and encode for YouTube ingest

A local file can be read faster than it was recorded unless you pace it. FFmpeg’s -re option reads the input at its native frame rate, which is the relevant starting point when a file is meant to behave like a live source. It is not a promise that the Windows computer, network or output will remain uninterrupted. Watch the output during tests and avoid treating a successful short run as proof of a long unattended session.

YouTube’s general encoder guidance calls for H.264 video, constant bitrate (CBR), AAC or MP3 audio, and a recommended keyframe interval of two seconds that should not exceed four seconds. Use the YouTube live encoder settings as the current reference. Set resolution and frame rate to suit the source and choose a bitrate the available upload can sustain reliably; the right profile depends on your material and connection, not a universal command.

When building an FFmpeg command, identify which inputs are being read, which filter applies to video, how audio is handled, and which output settings are being used. If some clips have no audio or different audio layouts, decide whether to supply a quiet bed, preserve the available sound or stream without audio, and test the result. Avoid copying a command template unless its assumptions match your files, FFmpeg build and intended output. In particular, a rotation filter, output size or frame rate that suits one demo might distort another.

Before using the final profile, run a speed test and compare the available upload with the selected output bitrate, leaving room for normal network variation. If the image freezes or the connection falls behind, lowering output resolution, frame rate or bitrate may be more useful than repeatedly restarting the same configuration. Conversely, encoding far above the detail in the source does not restore detail that was never recorded.

If you are weighing a local process against a workflow that avoids leaving a PC on, consider the practical difference, not just the command syntax. StreamNeo removes the need to keep a Windows machine playing the uploaded file by letting you upload it once and run the YouTube broadcast with your computer switched off. It is a YouTube-only workflow and does not replace FFmpeg’s file preparation or let you mix in live sources.

Connect to YouTube with RTMPS

In YouTube Studio, open Live Control Room and create or select the stream. Copy the stream URL and stream key from that stream’s settings. YouTube recommends RTMPS, an encrypted form of RTMP, and the endpoint can differ by stream settings. Use the RTMPS URL shown to you, not an address copied from a tutorial or a remembered configuration. The YouTube Help guide to setting up a live stream with an encoder explains the Control Room workflow.

Treat the stream key as a password. Do not paste it into a public script, source-control repository, screen recording or support post. Avoid placing a working key directly in a command that will remain in shell history or a log. Use a private local configuration method suitable for your setup, and confirm that screenshots or copied diagnostics do not reveal it. This article intentionally gives no real key, and a placeholder such as YOUR_STREAM_KEY must be replaced only in your private configuration.

Some encoders combine the stream URL and key into a single destination address; others request them in separate fields. Follow the instructions for the FFmpeg build and YouTube settings you are actually using. If FFmpeg reports a connection or SSL error, first check that you copied the RTMPS endpoint, rather than ordinary RTMP, and that there are no missing characters. YouTube’s troubleshooting guidance also points to port 443 where the RTMPS address is correct but SSL errors persist.

Make sure the stream selected in Live Control Room is the one whose key you used. If you have separate test and public events, label private notes clearly and avoid reusing a key by guesswork. Should a key appear in a public place, reset it in YouTube’s stream settings and update the encoder before testing again.

Test orientation, order and looping behaviour

Run a private or unlisted test before a public product demonstration. Use representative clips with the same movement and audio as the planned stream, not a static title card alone. Check the initial frame, every file boundary and the transition from the final file back to the first if you intend to repeat the playlist. YouTube recommends testing and checking stream health, and the Live Control Room preview lets you inspect what the platform is receiving.

Keep a short checklist beside the Windows machine: correct orientation on each clip; product stays within frame; list order is right; sound is present and not abruptly changed; no concat error appears; output reaches the preview; and the repeat behaviour is what you intended. A problem should be isolated by changing one element at a time. For instance, first verify an individual rotated file, then the playlist, then the live output. This makes it easier to tell whether an issue belongs to a source clip, a filter, an input sequence or the connection.

Check stream health while the test is running. If a clip transition stalls, inspect compatibility and timestamps; if the picture is sideways, verify the filter direction and any rotation metadata; if the output stops at the end, verify the playlist’s repeat construction rather than assuming -stream_loop -1 applies to the entire concatenated set. Test again after changes. A clean preview is useful evidence, but it does not guarantee that a longer session will be uninterrupted.

Once the orientation and sequencing are verified, decide whether a local Windows workflow is appropriate for the hours you plan to broadcast. A home PC must stay powered, connected and available to run FFmpeg, and you remain responsible for monitoring it. For a prerecorded-only channel, you can also compare streaming prerecorded videos to YouTube Live with Restream Studio; choose based on the controls and operating arrangement you need, not an assumption that one method suits every channel.

Before committing, compare the operating options on the pricing page. When the file and channel are ready, start free — 24-hour trial, no card.

FAQ

Does transpose=dir=clock always make a phone video upright?

No. It rotates the picture clockwise, but the source may need a counter-clockwise turn or may already display correctly. Watch the clip and test the output rather than inferring direction from its filename or metadata alone.

Can I use one concat list for any MP4 files?

No. The concat demuxer expects compatible streams and timestamps, and MP4 is only a container name, not proof that the underlying tracks match. Test the exact files and prepare them separately if the sequence fails or transitions poorly.

Does -stream_loop -1 make a whole multi-file playlist repeat?

It is documented as infinite looping for an input, but a playlist made through concat needs its own tested construction. Check the end-to-start transition in a private or unlisted test before relying on it for a live session.

What should I do if the stream key leaks?

Reset the key in YouTube Live Control Room, then update the encoder with the replacement. Treat shell history, screenshots and logs as places a key can be exposed, and remove or secure any copies you control.

YOU’VE REACHED THE END

Keep the ideas coming.

More guides, useful tools and a little help for your next broadcast.

Back to the journal ↗
YOUR NEXT READ

A little more to explore.

More Setup Guides guides ↗ · All topics ↗