Docker版FFmpeg安装部署的详细步骤
作者:十年磨一剑2020
背景
项目组开发过程用因为要使用音频格式转换功能,通过查阅相关资料,最终选择使用 FFmpeg。
FFmpeg介绍
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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!