> For the complete documentation index, see [llms.txt](https://xn--6o0a585a.gitbook.io/devops/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://xn--6o0a585a.gitbook.io/devops/se-zhan-zi-dong-hua/ffmpeg-yi-jian-qie-pian-bing-fa-bu.md).

# ffmpeg一键切片并发布

**1、安装ffmpeg**

```bash
wget https://www.moerats.com/usr/down/ffmpeg/ffmpeg-git-$(getconf LONG_BIT)bit-static.tar.xz
tar xvf ffmpeg-git-*-static.tar.xz
mv ffmpeg-git-*/ffmpeg  ffmpeg-git-*/ffprobe /usr/local/bin/
rm -rf ffmpeg-git-*
```

**2、安装脚本**

```bash
#新建/opt/ffmpeg文件夹存放脚本等文件
mkdir /opt/ffmpeg && cd $_
#下载并运行脚本
wget https://raw.githubusercontent.com/MoeClub/Note/master/ffmpeg/Install.sh
bash Install.sh
```

**3、启动播放器**\
由于切片生成`m3u8`文件后，需要播放器才能播放，而上传脚本也会自动推送`m3u8`文件到播放器根目录，所以这里可以配合一起用，当然自己会播放`m3u8`的也可以不用搭建，自行选择。

![ffmpeg一键切片并发布.zip 目录结构](/files/YB9B95ViTPUVbJzpj8ND)

{% file src="/files/m145vnB8oe2THKKIMPKY" %}
ffmpeg一键切片并发布.zip 解压将 upload.sh, publish.sh, m3u8.sh, media.sh 放入同一个文件夹中
{% endfile %}

```bash
# 安装 ffmpeg .
# 上传: 修改 upload_xxxx.sh 文件并保存, 然后将文件重命名为 upload.sh 
# 发布: 修改 publish.sh 文件并保存.
# 限制: 修改 media.sh 文件头部 'MaxSize=N' (N 为单文件最大体积, 默认为: 5).
# 将 upload.sh, publish.sh, m3u8.sh, media.sh 放入同一个文件夹中.

# 用法 (相关文件设置好后,可以一键切片并发布到网站上.)
bash media.sh <不含特殊字符的文件名.mp4> [特殊选项]

# 特殊选项: 数字; 可选参数,默认为0;
# 0: 自动根据文件比特率计算合适的切片大小. (目标文件大小小于10M, 一般VBR编码方式下没问题.)
# 1: 强制重新编码. 重新编码比特率为 2400k .(一般用于非H264视频编码的文件切片,速度较慢)
# 2: 自定义切片时间. 当大于等于2时切片时间为特殊选项数字.
# 当在特殊选项前添加负号(如 -0, -1, -2)时: 强制清空切片目录及其他相关缓存, 否则当全部切片完成后再次运行时跳过切片步骤.
```

## 获取媒体文件时长

```
ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 <File>
```

## 获取媒体文件大小

```
ffprobe -v error -show_entries format=size -of default=noprint_wrappers=1:nokey=1 <File>
```

## 获取媒体文件比特率

```
ffprobe -v error -show_entries format=bit_rate -of default=noprint_wrappers=1:nokey=1 <File>
```

## 获取视频文件编码

```
ffprobe -v error -select_streams v:0 -show_entries stream=codec_name -of default=noprint_wrappers=1:nokey=1 <File>
```

## 视频文件直接切片

```
ffmpeg -i <File> -vcodec copy -acodec aac -bsf:v h264_mp4toannexb -map 0 -f segment -segment_list output.m3u8 -segment_time 10 output_%03d.ts
```

## M3U8合成视频文件

```
ffmpeg -allowed_extensions ALL -i "meida.m3u8" -c copy "media.mp4"
```

## 分片时长计算(VBR, 大约)

```
分片时间 = (文件限制大小[M] * 1024 * 1024) / (媒体文件比特率[b] * 突发码率比率 / 8)
突发码率比率: 1.35 (视情况取值, 大于等于1) 
```

## 字幕格式转换([webvtt.org](https://www.webvtt.org/))

<br>
