Skip to content
Cloudj

GPU use cases

GPU video transcoding FFmpeg NVENC on a cloud GPU in Asia

A GPU video transcoding FFmpeg NVENC setup for Asian video teams: consumer RTX cards, ready commands, and why bandwidth price matters more than GPU price.

Updated · 4 min read

GPU video transcoding FFmpeg NVENC jobs are one of the best uses of a small, rented consumer GPU. NVIDIA's hardware encoder (NVENC) and decoder (NVDEC) sit on the card next to the CUDA cores, so a modest RTX card can convert video far faster than a CPU of similar cost, while staying headless over SSH. For video teams in Southeast and East Asia, the surprise is usually not the GPU price but the bandwidth bill. This article shows the commands, explains the cost model, and shows how to pick a host near your source files with the SG, HK and JP country codes.

For the wider picture of Asian locations, see the GPU cloud in Asia guide.

Why a consumer RTX card is enough

Every recent GeForce RTX card includes NVENC and NVDEC. For transcoding, the encoder block does the heavy work, so you rarely need a large card:

  • RTX 3060, 12 GB: H.264 and HEVC encoding, plenty of memory for decode and scaling filters.
  • RTX 4070, 12 GB: a newer encoder generation that adds AV1 encoding.
  • RTX 4090, 24 GB: worth it when you combine transcoding with AI steps such as upscaling, subtitles or speech recognition on the same machine.

All three are consumer cards, open to new accounts. GeForce drivers may limit how many encode sessions run at once, so test your parallelism on the card you rent rather than assuming a number.

The cost model: bandwidth first

A transcoding job moves a lot of data: the source comes in, the renditions go out. On Cloudj, a GPU instance is billed per minute for GPU plus disk while it runs, and bandwidth is charged per GB downloaded and uploaded at the machine's listed price. For video, the second part often dominates.

Estimate a job like this:

  1. Data in = total size of source files you upload or pull to the instance.
  2. Data out = total size of all renditions you copy back or publish.
  3. Bandwidth cost = data in x download rate + data out x upload rate.
  4. Compute cost = running price x hours of encoding.

If a library of source footage is large and the renditions are many, the bandwidth line can exceed the compute line, even on a cheap GPU. That is why the bandwidth columns matter more than usual. The GPU cloud cost estimate guide has a template for this calculation. Live prices for each card are on GPU cloud.

Pick a host near the source, with low bandwidth price

Open the deploy page with the RTX 3060 and enter SG, HK, JP in the Country field. Then use two filters on purpose:

  • Maximum bandwidth price per TB for downloads and uploads. This removes hosts that would make a video job expensive.
  • Minimum download speed. Pulling source files fast shortens the time the GPU waits idle.

Choose a country close to where your source files live, for example near your storage or your editors, so transfers are quicker. Each row reports its country at country level only, and stock changes during the day. If nothing fits, loosen the bandwidth limit slightly, try the RTX 4070 or another consumer card, or add TW and KR. For batch transcoding that nobody watches live, a farther host is fine if its transfer prices are good.

The guide to moving data between GPU regions covers fast, resumable transfers.

Commands that work headless

Install FFmpeg in the Ubuntu 22.04 + CUDA template over SSH, or use a public Docker image that ships an NVENC-enabled build. Check that your build sees the hardware:

nvidia-smi
ffmpeg -hide_banner -encoders | grep nvenc

A full-GPU pipeline that decodes, scales and encodes on the card:

ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i input.mp4 \
  -vf scale_cuda=1280:720 -c:v h264_nvenc -preset p5 -cq 23 \
  -c:a copy output_720p.mp4

HEVC for smaller files, or AV1 on cards with an AV1 encoder:

ffmpeg -hwaccel cuda -i input.mp4 -c:v hevc_nvenc -preset p5 -cq 26 -c:a copy out_hevc.mp4
ffmpeg -hwaccel cuda -i input.mp4 -c:v av1_nvenc -preset p5 -cq 30 -c:a copy out_av1.mp4

Presets range from p1 (faster) to p7 (better quality per bit). Tune -cq by watching your own output. The FFmpeg documentation lists every NVENC option.

Running a batch

For a folder of files, keep it simple and resumable:

mkdir -p out
for f in in/*.mp4; do
  [ -f "out/$(basename "$f")" ] && continue
  ffmpeg -hwaccel cuda -i "$f" -c:v h264_nvenc -preset p5 -cq 23 -c:a copy "out/$(basename "$f")"
done

Run it inside tmux, and watch the encoder load with nvidia-smi dmon. If the GPU is idle while the disk or network is busy, more GPU will not help; a faster download or local caching will. The resource monitoring guide explains how to read CPU, disk and network pressure on a Linux server.

Keep the front end separate

If you publish video to users, do not serve it straight from the GPU host. Its "available until" date will arrive, and there is no automatic move if it goes offline. Copy finished renditions to your storage or CDN origin, and keep a stable Singapore VPS for the upload portal, job queue and API. The GPU becomes a worker you replace freely.

FAQ

Do I need a datacenter GPU for transcoding?

Usually not. Consumer RTX cards include NVENC and NVDEC, and they are open to new accounts.

Why is my bill higher than the GPU price suggested?

Bandwidth. Video moves a lot of data in and out, charged per GB at the host's listed price. Filter by bandwidth price.

Is there a desktop to run a GUI encoder?

No. GPU instances are headless; use ffmpeg over SSH.

Which country should I choose?

One close to your source files with acceptable bandwidth prices. Try SG, HK, JP and compare.

Start encoding

Open the deploy page with the RTX 3060, enter SG, HK, JP and set a maximum bandwidth price before anything else. Run a short test batch, measure data in and out, and scale up once the numbers make sense.

Deploy a server or order proxies

Pick a location in the console, see the live price, and pay from your balance.