赞
踩
项目组开发过程用因为要使用音频格式转换功能,通过查阅相关资料,最终选择使用 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。
前提:已经安装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
从上面的搜索结果中我们可以看到第一行 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
拉取完成后,使用 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 将其传输至离线服务器。
在服务器中,使用 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,说明导入成功。
使用 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
此时容器已启动。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。