将一个视频切成多个大小相等的块

本文介绍了如何利用FFMPEG和MP4BOX工具将一个视频文件按照固定大小(如15M)切割成多个片段,以适应微信等平台的大小限制。内容包括编写脚本使用FFMPEG以及在Ubuntu环境下安装和使用MP4BOX的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现在遇到了一个问题,就是想往微信群里发视频,但视频大小的限制在20M。但有的精彩视频有几十M,超过了微信的限制,如果按时间切视频,视频时间相同了,但大小不同。这个方案是视频文件大小相同,时间不同的。

一、FFMPEG将一个视频切成多个大小相等的块

$ ./cmd.sh 2.mp4  15000000 "-c:v libx264 -crf 23 -c:a copy -vf scale=960:-1"

将下面的代码保存成脚本,将大视频文件进行每个15M的大小进行切割

#!/bin/bash
# Short script to split videos by filesize using ffmpeg by LukeLR

if [ $# -ne 3 ]; then
echo 'Illegal number of parameters. Needs 3 parameters:'
echo 'Usage:'
echo './split-video.sh FILE SIZELIMIT "FFMPEG_ARGS'
echo 
echo 'Parameters:'
echo '    - FILE:        Name of the video file to split'
echo '    - SIZELIMIT:   Maximum file size of each part (in bytes)'
echo '    - FFMPEG_ARGS: Additional arguments to pass to each ffmpeg-call'
echo '                   (video format and quality options etc.)'
exit 1
fi

FILE="$1"
SIZELIMIT="$2"
FFMPEG_ARGS="$3"

# Duration of the source video
DURATION=$(ffprobe -i "$FILE" -show_entries format=duration -v quiet -of default=noprint_wrappers=1:nokey=1|cut -d. -f1)

# Duration that has been encoded so far
CUR_DURATION=0

# Filename of the source video (without extension)
BASENAME="${FILE%.*}"

# Extension for the video parts
#EXTENSION="${FILE##*.}"
EXTENSION="mp4"

# Number of the current video part
i=1

# Filename of the next video part
NEXTFILENAME="$BASENAME-$i.$EXTENSION"

echo "Duration of source video: $DURATION"

# Until the duration of all partial videos has reached the duration of the source video
while [[ $CUR_DURATION -lt $DURATION ]]; do
# Encode next part
echo ffmpeg -i "$FILE" -ss "$CUR_DURATION" -fs "$SIZELIMIT" $FFMPEG_ARGS "$NEXTFILENAME"
ffmpeg -ss "$CUR_DURATION" -i "$FILE" -fs "$SIZELIMIT" $FFMPEG_ARGS "$NEXTFILENAME"

# Duration of the new part
NEW_DURATION=$(ffprobe -i "$NEXTFILENAME" -show_entries format=duration -v quiet -of default=noprint_wrappers=1:nokey=1|cut -d. -f1)

# Total duration encoded so far
CUR_DURATION=$((CUR_DURATION + NEW_DURATION))

i=$((i + 1))

    echo "Duration of $NEXTFILENAME: $NEW_DURATION"
    echo "Part No. $i starts at $CUR_DURATION"

    NEXTFILENAME="$BASENAME-$i.$EXTENSION"
    done

二、MP4BOX 将一个视频切成多个大小相等的块

首先就是安装MP4BOX的,我的环境是Ubuntu16.04
在这里插入图片描述
或者apt-get安装也可以,安装工具看个人喜好。

安装完成后就可以进行切视频文件了。
15000的意思就是每个视频块15M

$ MP4Box  -splits 15000 ./2.mp4 
Storing split-file 2_001.mp4 - duration 172.87 seconds
Storing split-file 2_002.mp4 - duration 164.90 seconds  
Storing split-file 2_003.mp4 - duration 174.37 seconds  
Storing split-file 2_004.mp4 - duration 142.41 seconds 
### 使用 Anaconda 打包环境为多个固定大小文件 #### 创建并导出 Conda 环境 为了将 Anaconda 的 Python 虚拟环境打包成多个固定大小的文件,首先需要创建或激活现有的 conda 环境,并将其导出为 YAML 文件。 ```yaml name: myenv dependencies: - python=3.8 - numpy - pandas - matplotlib prefix: /path/to/myenv ``` 通过 `conda env export` 命令可以保存当前活跃环境配置至 `.yml` 文件[^1]: ```bash conda activate project conda env export --file environment.yml ``` #### 导出环境中的软件包 接着,利用 `conda-pack` 工具来压缩整个环境及其依赖关系。这一步骤会生成一个 tarball 归档文件,其中包含了运行该环境中程序所需的一切资源。 安装 `conda-pack`: ```bash pip install conda-pack ``` 使用 `conda pack` 来打包指定环境: ```bash conda pack -n myenv -o myenv.tar.gz ``` 此时得到的是单个大尺寸的归档文件 (`myenv.tar.gz`),但这并不满足多部分、固定大小的需求。 #### 切分归档文件 对于分割大型档案文件的任务,Linux 和 macOS 用户可以直接采用内置命令行工具如 `split`;而在 Windows 上则推荐使用第三方应用程序比如 WinRAR 或者 PowerShell 中的相关函数实现相同功能。 在 Linux/macOS 下切分 tar.gz 文件为例: ```bash split -b 50m myenv.tar.gz myenv_part_ ``` 上述指令表示按照每份不超过 50MB 大小的标准拆解原始的 `myenv.tar.gz` 成若干个小片段,命名为 `myenv_part_aa`, `myenv_part_ab` 等等[^4]。 #### 解压与恢复原状 当接收端收到这些碎片化的小型文件之后,需先拼接回完整的 tar.gz 文件再进行解压操作。依旧以 Unix-like 系统为例说明如何重组和提取内容: 重新组合已切割的部分: ```bash cat myenv_part_* > combined_myenv.tar.gz ``` 最后解开这个合成后的 tar.gz 文件即可还原最初的 anaconda 环境结构: ```bash tar zxvf combined_myenv.tar.gz ``` 完成以上步骤后便实现了将 Anaconda 环境转换为一系列具有特定容量上限的数据的目标[^2]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值