ubuntu容器化部署ffmpeg通过GPU硬件加速处理视频流
FFmpeg 是一个开源的音视频处理工具,它可以对音视频进行录制、转码、剪辑、合并等操作。FFmpeg 支持多种音视频格式,包括 MP4、AVI、FLV、MOV、WMV、MP3、AAC 等。FFmpeg 的命令行工具非常强大,可以通过命令行对音视频进行各种操作。例如,可以使用 FFmpeg 将一个视频文件转换成另一个格式的视频文件,也可以使用 FFmpeg 将一个视频文件中的音频提取出来,还可以使用 FFmpeg 将多个视频文件合并成一个视频文件。除了命令行工具之外,FFmpeg 还提供了一些库,可以在 C 语言等编程语言中使用这些库来对音视频进行处理。
FFmpeg 本身不支持 GPU 加速,但是可以通过一些第三方库来实现 GPU 加速。例如,可以使用 CUDA SDK 来实现 FFmpeg 的 GPU 加速。CUDA SDK 是 NVIDIA 公司开发的一个 GPU 加速库,可以在 NVIDIA 的 GPU 上实现各种计算密集型任务的加速。CUDA SDK 提供了一些 API,可以在 C 语言等编程语言中使用这些 API 来实现 GPU 加速。除了 CUDA SDK 之外,还有一些其他的第三方库,例如 OpenCL、Vulkan 等,也可以用来实现 FFmpeg 的 GPU 加速。
英伟达官方开发基础包:https://hub.docker.com/r/nvidia/cuda
1、构建镜像
root@10-60-193-90:~# cat Dockerfile
# 基于nvidia/cuda:11.3.1-devel-ubuntu16.04基础包,通过UCloud Uhub加速
FROM uhub.service.ucloud.cn/stargaome/cuda:11.3.1-devel-ubuntu16.04
WORKDIR /tmp
ADD build-ffmpeg.sh build-ffmpeg.sh
#此步骤主要是拉取官方的源码比较慢的时候 采取在外面拉取了添加目录进去
#ADD ffmpeg ffmpeg
RUN chmod +x build-ffmpeg.sh
RUN apt-get update -y && apt-get install -y git build-essential yasm cmake libtool libc6 libc6-dev unzip wget libnuma1 libnuma-dev frei0r-plugins-dev libgnutls28-dev libass-dev \
libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libopus-dev librtmp-dev libsoxr-dev libspeex-dev libtheora-dev libvo-amrwbenc-dev libvorbis-dev libvpx-dev libwebp-dev \
libx264-dev libx265-dev libxvidcore-dev libopenjpeg-dev
RUN ./build-ffmpeg.sh
root@10-60-193-90:~# cat build-ffmpeg.sh
#!/bin/bash
#git clone https://github.com/ffmpeg/ffmpeg.git
#国内源
git clone https://gitee.com/mirrors/ffmpeg.git
cd ffmpeg
git checkout release/3.4
./configure --enable-nonfree --disable-shared --enable-nvenc --enable-cuda --enable-cuvid --enable-libnpp --extra-cflags=-Ilocal/include --enable-gpl --enable-version3 --disable-debug --disable-ffplay --disable-indev=sndio --disable-outdev=sndio --enable-fontconfig --enable-frei0r --enable-gnutls --enable-gray --enable-libass --enable-libfreetype --enable-libfribidi --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopus --enable-libopenjpeg --enable-librtmp --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64
make -j 8
make install
# 构建镜像
docker build . -t ffmpeg-nvidia-gpu
2、运行容器
docker run --name ffmpeg-gpu-jdk --runtime=nvidia -e NVIDIA_DRIVER_CAPABILITIES=compute,utility,video -v /data:/data --net=host -itd jdk:justice /bin/bash
# 进入容器
docker exec -it ffmpeg-gpu /bin/bash
3、视频处理验证
ffmpeg -i 123.mp4 -c:v h264_nvenc -gpu 0 abcd.mp4
随便看看
- 2021-07-21MySQL主从同步异常之从库误写数据
- 2022-07-13极简了解Ceph存储架构
- 2021-06-25MySQL修改wait_timeout变量global生效session不生效
- 2021-07-22MySQL主从同步延迟-大事务缺少索引
- 2023-05-07如何快速部署ChatGPT应用并绕开限制