Docker版FFmpeg安装部署

文章目录

      • 背景
      • 1. 搜索镜像
      • 2. 拉取镜像
      • 3. 导出镜像
      • 4. 加载镜像
      • 5. 启动容器

背景

项目组开发过程用因为要使用音频格式转换功能,通过查阅相关资料,最终选择使用 FFmpeg


FFmpeg介绍

官网:https://ffmpeg.org

FFmpeg是一套开源的、跨平台的多媒体解决方案,可以用于录制、转换和流式传输音频和视频。支持Linux、Windows和macOS操作系统。

作为一个强大的多媒体工具集,FFmpeg提供了广泛的功能和工具,使开发者能够进行各种音视频处理任务,例如:

  • 格式转换:通过FFmpeg,您可以将音频和视频从一个格式转换为另一个格式。它支持众多的音视频编解码器,可以处理几乎所有常见的音视频格式。

  • 视频剪辑和裁剪:您可以使用FFmpeg裁剪视频,提取所需的片段,并且还可以调整视频的大小、分辨率和帧率等参数。

  • 音频处理:FFmpeg可以对音频文件进行各种处理,包括音频合并、分割、混音、音量调节、降噪等。

  • 视频处理:除了转码和剪辑,FFmpeg还支持视频滤镜和特效,如添加水印、旋转、缩放、色彩调整等。

  • 视频流式传输:使用FFmpeg,您可以将音视频实时流式传输到网络上,以便通过网络播放、直播或其他实时应用。

FFmpeg提供了命令行工具,也可以通过C/C++的库进行集成。此外,还有许多基于FFmpeg的第三方工具和框架可用,使得音视频处理变得更加简单和便捷。


关于ffmpeg的安装,有的人可能要折腾很久,甚至折腾一个礼拜,究其原因,基本都是编译安装惹的祸。

项目开发团队成员中,有使用Windows、Ubuntu、macOS等系统进行开发,测试、生产环境可能是CentOS、Fedora、Ubuntu、Windows等系统的情况。考虑到未来可能有其他成员接手项目,如果每个人都花时间安装FFmpeg,因为环境差异不知道得折腾多久。为了提高生产率(降本增效),于是决定使用docker安装ffmpeg。

1. 搜索镜像

前提:已经安装docker

使用 docker search --no-trunc ffmpeg 命令搜索 ffmpeg 并查看完整镜像描述

(base) mjl@ubuntu:~$ docker search --no-trunc ffmpeg
NAME                                      DESCRIPTION                                                                                    STARS     OFFICIAL   AUTOMATED
jrottenberg/ffmpeg                        FFmpeg 2.8 - 3.x - 4.x Copyright (c) 2000-2017 the FFmpeg developers                           419                  [OK]
linuxserver/ffmpeg                                                                                                                       106                  
opencoconut/ffmpeg                        Minimal FFmpeg Docker image built on Alpine Linux                                              30                   [OK]
nachochip/ffmpeg                          ffmpeg (x264, fdk-aac) inside debian                                                           14                   [OK]
nightseas/ffmpeg                          FFmpeg with CUDA encoder/decoder support.                                                      8                    [OK]
selenium/video                            Image with ffmpeg meant to be used with a Dynamic Grid                                         7                    
alfg/ffmpeg                               An FFmpeg Dockerfile from source. Built on Alpine Linux.                                       6                    [OK]
jellyfin/ffmpeg                                                                                                                          4                    
datarhei/ffmpeg                           FFmpeg Development Image for H.264-Processing                                                  4                    
rafalkrypa/ffmpeg                         Latest FFmpeg static build on minimal Alpine Linux container                                   3                    
sjourdan/ffmpeg                           FFmpeg on Alpine Docker Image                                                                  3                    [OK]
ffmpeg/coverity                           Environment for automated coverity testing of FFmpeg.                                          2                    [OK]
mycujoo/ffmpeg-docker                     ffmpeg docker container                                                                        0                    [OK]
krickwix/ffmpeg                                                                                                                          0                    
nicholasrobinson/ffmpeg-homebridge        A Homebridge Dockerfile built on oznu/docker-homebridge with FFmpeg copied from alfg/ffmpeg.   0                    
azamserver/nextcloud-imagemagick-ffmpeg   A Nextcloud docker image with ImageMagick & FFmpeg preinstalled                                0                    
jamesarems/ffmpeg                         CentOS 8 based ffmpeg server                                                                   0                    
onlinetvrecorder/ffmpeg                                                                                                                  0                    
vulhub/ffmpeg                                                                                                                            0                    
ffmpegextrah/ffmpeg                                                                                                                      0                    
ffmpegclearu/ffmpeg                                                                                                                      0                    
thinkz/ffmpeg                             ffmpeg with librtmp                                                                            0                    
umnelevator/ffmpeg                                                                                                                       0                    
nicolasarnaud4viseo/ffmpeg                                                                                                               0                    
chpkg/ffmpeg-to-s3                                                                               0         

2. 拉取镜像

从上面的搜索结果中我们可以看到第一行 jrottenberg/ffmpeg 的 Stars 最多, 果断就用它了。

使用 docker pull jrottenberg/ffmpeg 命令拉取镜像(提前换好速度快的镜像源,否则就耐心等待吧):

(base) mjl@ubuntu:~$ docker pull jrottenberg/ffmpeg
Using default tag: latest
latest: Pulling from jrottenberg/ffmpeg
7b722c1070cd: Pull complete 
5fbf74db61f1: Pull complete 
ed41cb72e5c9: Pull complete 
7ea47a67709e: Pull complete 
c56548ea744b: Pull complete 
24130a6ef4f3: Pull complete 
2d757c4d9a11: Pull complete 
Digest: sha256:21eb739725c43bd7187982e5fa4b5371b495d1d1f6f61ae1719ca794817f8641
Status: Downloaded newer image for jrottenberg/ffmpeg:latest
docker.io/jrottenberg/ffmpeg:latest

3. 导出镜像

拉取完成后,使用 docker image ls 列出本地已经下载的镜像。我们看到有一个jrottenberg/ffmpeg镜像,大小为218MB。

(base) mjl@ubuntu:~$ docker image ls
REPOSITORY                                  TAG          IMAGE ID       CREATED         SIZE
jrottenberg/ffmpeg                          latest       2100506dfbea   4 years ago     218MB

我们需要将该镜像导出成 tar 包。可以使用以下命令导出:

(base) mjl@ubuntu:~$ docker save -o ffmpeg.tar jrottenberg/ffmpeg:latest

导出为 ffmpeg.tar 文件:

(base) mjl@ubuntu:~$ ll
-rw-------   1 mjl mjl 222621696  5月  3 22:27 ffmpeg.tar

导出的 tar 包可以通过 scp 或者 ftp 将其传输至离线服务器。

4. 加载镜像

在服务器中,使用 docker image ls 列出本地已经下载的镜像,可以看到服务器上只有一个 hello-word 镜像(如下所示)。

(base) [root@10-23-2-211 ~]# docker image ls
REPOSITORY    TAG       IMAGE ID       CREATED       SIZE
hello-world   latest    bf756fb1ae65   3 years ago   13.3kB

接下来使用 docker load -i ffmpeg.tar 将 tar 包导入 Docker 中:

(base) [root@10-23-2-211 ~]# docker load -i ffmpeg.tar 
0de2edf7bff4: Loading layer [==================================================>]  121.3MB/121.3MB
b2fd8b4c3da7: Loading layer [==================================================>]  15.87kB/15.87kB
f67191ae09b8: Loading layer [==================================================>]  11.78kB/11.78kB
68dda0c9a8cd: Loading layer [==================================================>]  3.072kB/3.072kB
1c86e8f0fce5: Loading layer [==================================================>]  2.048kB/2.048kB
e38e18db08fb: Loading layer [==================================================>]  31.93MB/31.93MB
b0e2549b869a: Loading layer [==================================================>]  69.36MB/69.36MB
Loaded image: jrottenberg/ffmpeg:latest

导入完成后,我们继续使用 docker image ls 命令查询是否成功导入:

(base) [root@10-23-2-211 ~]# docker image ls
REPOSITORY           TAG       IMAGE ID       CREATED       SIZE
hello-world          latest    bf756fb1ae65   3 years ago   13.3kB
jrottenberg/ffmpeg   latest    2100506dfbea   4 years ago   218MB

从上面的输出结果中可以看出多了一个 jrottenberg/ffmpeg 镜像,大小218MB,说明导入成功。

5. 启动容器

使用 docker ps 查看运行的容器:

(base) [root@10-23-2-211 ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

启动容器:

(base) [root@10-23-2-211 ~]# docker run -itd --name app_ffmpeg -p 8066:8080 -v /home/mjl/ffmpeg/:/mnt/app/ --entrypoint='bash' jrottenberg/ffmpeg
2cd7573a3c44da0ccfacd1e46cb40a523dfaf99dc0e298db3053f473a0ecd11e

再次使用 docker ps 查看运行的容器:

(base) [root@10-23-2-211 ~]# docker ps
CONTAINER ID   IMAGE                COMMAND   CREATED         STATUS         PORTS                    NAMES
2cd7573a3c44   jrottenberg/ffmpeg   "bash"    4 seconds ago   Up 3 seconds   0.0.0.0:8066->8080/tcp   app_ffmpeg

此时容器已启动。

你可能感兴趣的:(docker,ffmpeg,docker,ffmpeg,容器)