You can try using the MPEG2 codec
MPEG2 is quite fast to encode. This should work -c:v mpeg2video -r 25 -b:v 8192k
increasing the bitrate should give the rate control more slack and give faster encoding speed. You can also try the -intra
option which disables motion estimation at the cost of significantly higher bitrate. If that's not enough there should be a quantization step parameter which you can use to speed up the encoding at expense of visual quality.
You can also try lower resolution H264 with ultrafast preset
I'm not sure how low-end you mean when you say low-end, I'm successfully transcoding to 720p H264 in realtime on a Core 2 Duo 2ghz CPU... so I'm providing this if your idea of low-end is similar to my idea of low-end :)
The libx264
codec accepts presets to the encoder which trade of encoding speed for bitrate at constant visual quality.
You could try with the fastest preset:
-c:v libx264 -preset ultrafast -tune zerolatency -profile high10 \
-bsf:v h264_mp4toannexb
(The -bsf:v
parameter is necessary if you're going to stream)
You can also try playing with the -cbr
parameter, it controls bit allocation and thus visual quality/bitrate. The default value is 23; 0 is lossless and 51 is worst quality/lowest bitrate.
The resolution plays a big role in encoding speed and I've found that a lower resolution h264 video that has been upsampled looks comparable to mpeg2 that has not been downsampled (at a much lower bitrate and hopefully faster encoding speed, don't quote me on that :3).
So you can try playing with that as well:
-filter:v scale=-1:480
This will re-scale your video to be 480 lines high and keep the same aspect ratio.
(I just setup transcoding to H264 myself, here: Realtime transcoding to H264+AAC in Matroska container if you want to look.)