使用Docker安装FFmpeg

一、安装Docker

复制代码
# 安装Docker
https://docs.docker.com/get-docker/

# 安装Docker Compose
https://docs.docker.com/compose/install/

# CentOS安装Docker
https://mp.weixin.qq.com/s/nHNPbCmdQs3E5x1QBP-ueA

二、安装FFmpeg

创建目录:

复制代码
mkdir ffmpeg
cd ffmpeg

创建docker-compose.yaml文件:

复制代码
# 方式1、使用jrottenberg/ffmpeg镜像
services:
  ffmpeg:
    image: jrottenberg/ffmpeg
    container_name: ffmpeg
    volumes:
      - ./data:/tmp/workdir
    #tty: true
    #stdin_open: true
    entrypoint: ["/sbin/init"]

# 方式2、使用linuxserver/ffmpeg镜像
services:
  ffmpeg:
    image: linuxserver/ffmpeg
    container_name: ffmpeg
    volumes:
      - ./data:/tmp/workdir
    #tty: true
    #stdin_open: true
    entrypoint: ["/init"]

说明:
# 详见:https://docs.docker.com/reference/compose-file/services/

stdin_open:
保持容器的标准输入(STDIN)打开,允许用户在容器中输入命令或与容器交互
相当于docker run命令中的-i参数

tty:
为容器分配一个伪终端(pseudo-TTY)
相当于docker run命令中的-t 或 --tty参数

创建并启动容器:

复制代码
docker-compose up -d

查看容器列表:

复制代码
docker ps

进入容器:

复制代码
docker exec -it ffmpeg bash

停止并销毁容器:

复制代码
docker-compose down

删除镜像:

复制代码
# docker rmi linuxserver/ffmpeg
docker rmi jrottenberg/ffmpeg

三、使用

复制代码
详见:
https://ffmpeg.org/ffmpeg.html
https://mp.weixin.qq.com/s/z8CiXWDermLz_jKYgFn91Q
https://mp.weixin.qq.com/s/_r6qFcTi_Nc3L98E8zE88w

进入容器

复制代码
# 进入容器:
docker exec -it ffmpeg bash

# 切换目录:
cd /tmp/workdir

查看媒体文件信息

复制代码
# 命令:ffprobe 或 ffmpeg -i

ffprobe 文件
ffmpeg -i 文件

视频格式转换‌

复制代码
ffmpeg -i 1.mp4 -c:v libx264 -c:a aac output.mp4‌

# 参数说明:
# -i 参数:指定输入文件
# -c:v 参数:指定视频编解码器,如libx264
# -c:a 参数:指定音频编解码器,如acc

音频格式转换

复制代码
ffmpeg -i input.mp3 output.wav
ffmpeg -i input.mp3 output.m4a

# 使用"ffprobe 文件"命令查看文件信息

提取音频

复制代码
# 查看文件信息,假设当前文件音频为mp4a
ffprobe input.mp4

ffmpeg -i input.mp4 -vn -acodec aac output2.m4a

# 参数说明:
# -i 参数:指定输入文件
# -vn 参数:无视频
# -acodec acc:使用AAC编解码器提取音频

提取视频

复制代码
# 提取视频流(无音频)
ffmpeg -i input.mp4 -c copy -an output.mp4

剪裁视频

复制代码
#ffmpeg -i input.mp4 -ss 00:00:10 -to 00:00:30 -c copy output.mp4
ffmpeg -i input.mp4 -ss 00:00:10 -to 00:00:30 output.mp4

#ffmpeg -i input.mp4 -ss 00:00:10 -t 00:00:30 -c copy output.mp4
ffmpeg -i input.mp4 -ss 00:01:10 -t 00:00:30 output.mp4

# 参数说明:
# -i 参数:指定输入文件
# -ss 参数:开始时间
# -to 参数:结束时间
# -t 参数:持续时间
# -c copy:直接复制流

合并视频

复制代码
# 将每个视频转为TS格式
# -bsf:v h264_mp4toannexb:将H.264码流转换为适用于MPEG-TS的格式。
ffmpeg -i video1.mp4 -c copy -bsf:v h264_mp4toannexb video1.ts
ffmpeg -i video2.mp4 -c copy -bsf:v h264_mp4toannexb video2.ts

# 统一调整所有视频为1080p分辨率,30fps,H.264编码
# ffmpeg -i input.mp4 -vf scale=1920:1080 -r 30 -c:v libx264 -preset fast -c:a aac output.mp4

# 拼接TS文件‌
ffmpeg -i "concat:video1.ts|video2.ts" -c copy output.mp4

调整分辨率

复制代码
ffmpeg -i input.mp4 -vf scale=1280:720 output.mp4

# 参数说明:
# -i 参数:指定输入文件
# -vf 参数:设置分辨率为1280x720

调整比特率

复制代码
# 设置视频和音频的比特率
ffmpeg -i input.mp4 -b:v 1000k -b:a 128k output.mp4‌

添加水印

复制代码
ffmpeg -i input.mp4 -i watermark.png -filter_complex "[0:v][1:v]overlay=W-w-10:10" output.mp4

# 参数说明:
# -i input.mp4:指定输入文件。
# -i watermark.png:指定水印文件。
# -filter_complex:使用复杂的滤镜表达式。
# [0:v][1:v]overlay=W-w-10:10:这里
# [0:v]代表第一个输入的视频流(即input.mp4),
# [1:v]代表第二个输入的视频流(即水印图片)。
# overlay=W-w-10:10表示将水印放置在视频的右上角,其中
# W-w-10计算了水印距离视频右侧的10像素距离,而:10则表示距离视频顶部的10像素距离。

退出容器

复制代码
exit

四、详见

复制代码
https://ffmpeg.org/
https://hub.docker.com/r/jrottenberg/ffmpeg
https://github.com/jrottenberg/ffmpeg
https://hub.docker.com/r/linuxserver/ffmpeg
https://github.com/linuxserver/docker-ffmpeg
https://mp.weixin.qq.com/s/z8CiXWDermLz_jKYgFn91Q
https://mp.weixin.qq.com/s/_r6qFcTi_Nc3L98E8zE88w
相关推荐
周小码20 小时前
Go开发的自行托管代理加速服务:支持Docker与GitHub加速
docker·golang·github
川石课堂软件测试20 小时前
Oracle 数据库使用事务确保数据的安全
数据库·python·功能测试·docker·oracle·单元测试·prometheus
奋斗的老史21 小时前
25年Docker镜像无法下载的四种对策
docker·容器·eureka
chillxiaohan21 小时前
Docker学习记录
学习·docker·容器
柯南二号21 小时前
【后端】Docker 常用命令详解
服务器·nginx·docker·容器
新鲜萝卜皮1 天前
容器内运行的进程,在宿主机的top命令中可以显示吗?
容器
我今天指定是不行了1 天前
Docker安装与部分应用安装
docker
容器魔方1 天前
Karmada v1.15 版本发布!多模板工作负载资源感知能力增强
云原生·容器·云计算
streaker3031 天前
Docker + Jenkins + Nginx 实现前端自动化构建与静态资源发布(含一键初始化脚本)
docker·jenkins
THMAIL1 天前
机器学习从入门到精通 - Python环境搭建与Jupyter魔法:机器学习起航必备
linux·人工智能·python·算法·机器学习·docker·逻辑回归