我正在尝试将视频输出从摄像机转换为MP4,但它使用的是 CPU过多(但是我们不能限制程序,因为我们需要尽快完成此程序),因此我们认为使用某些GPU 。
目前为止我们一直在使用它:
#include <iostream>
enum enum_type : std::size_t
{ DEFAULT = 0, ONE, TWO, THREE, FOUR, MAX = FOUR, };
enum enum_type2 : std::size_t
{ DEFAULTbis = 0, ONEbis, TWObis, THREEbis, MAXbis = THREEbis, };
template <auto>
struct traits
{ static void do_something() {} };
template <auto F, typename TT = traits<F>, typename = void>
struct attr_engine
{
static void set ()
{
std::cout << "Number: " << F << std::endl;
TT::do_something();
attr_engine<static_cast<decltype(F)>(F - 1u)>::set();
}
};
template <auto F>
struct attr_engine<F, traits<F>, typename std::enable_if<0u == F>::type>
{ static void set() { std::cout << "Reached the end" << std::endl; } };
int main ()
{
attr_engine<MAX>::set();
attr_engine<MAXbis>::set();
}
尝试使用:
ffmpeg.exe -i "old.mkv" "new.mp4"
但是它会引发错误:
ffmpeg.exe -hwaccel cuvid -i "old.mkv" "new.mp4"
我无法处理视频输入,但我正在寻找减少CPU使用量的替代方法。
视频编码为 HEVC 。
我认为GPU可能是个好主意,但这似乎与视频输入不兼容。
关于如何使ffmpeg在GPU上运行或降低CPU使用率的替代方案的任何想法?
答案 0 :(得分:1)
此bash脚本应适用于 Nvidia GPU 。 我用1050 Ti进行了测试,nvidia-gpu-support-matrix似乎是第一代使用NVDEC芯片进行加速解码的NVENC芯片进行加速编码的第一代产品。
#! /usr/bin/sh
# requires a properly compiled ffmpeg; CUDA and a supported GPU from Nvidia https://developer.nvidia.com/video-encode-decode-gpu-support-matrix
# Take in some inputs, this will not check the validity
# there are many more rendering options available.
printf "input file: "
read INPUT
printf "output file: "
read OUTPUT
printf "choose audio [codec ac3, aac, etc]: "
read AUDIO
printf "video resolution [1920x1080, 1024x720, etc]: "
read RESOLUTION
printf "video bitrate [1200~48000]: "
read V_BITRATE
ffmpeg -hide_banner -hwaccel cuvid -c:v hevc_cuvid -resize $RESOLUTION -autorotate 0 -i $INPUT -c:a $AUDIO -c:v h264_nvenc -preset slow -b:v $V_BITRATE $OUTPUT
答案 1 :(得分:0)
实际上没有GPU编码之类的东西。有些GPU带有板载视频编码芯片,有些则没有。您需要知道系统中有什么,以及是否已编译ffmpeg以支持它。查看NVENC(如果是Nvidia GPU),VCE(如果是AMD)或quicksync(如果是Intel)。 -hwaccel cuvid
,用于加速解码(非编码)。