使用FFMPEG和GPU将H265转换为MP4

时间:2019-02-28 13:13:55

标签: video ffmpeg mp4

我正在尝试将视频输出从摄像机转换为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使用率的替代方案的任何想法?

2 个答案:

答案 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,用于加速解码(非编码)。