#!/bin/bash

# 找到当前目录及子目录中的所有 MKV 文件
mkv_files=$(find . -type f -name "*.mkv")

# 循环处理每个 MKV 文件
for file in $mkv_files; do
  # 构建输出的 MP4 文件名
  mp4_file="${file%.mkv}.mp4"

  # 使用 FFmpeg 将 MKV 转换成 MP4
  ffmpeg -i "$file" -c:v copy -c:a copy "$mp4_file"

  # 删除原始的 MKV 文件
  rm "$file"
done

接着执行分割脚本

先安装bc

apt-get install bc

分成五个部分

新建sh脚本

total_duration=$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 1.mp4)
segment_duration=$(echo "$total_duration / 5" | bc -l)
ffmpeg -i 1.mp4 -t $segment_duration -c:v copy -c:a copy part1.mp4
ffmpeg -ss $segment_duration -i 1.mp4 -t $segment_duration -c:v copy -c:a copy part2.mp4
ffmpeg -ss $(echo "2 * $segment_duration" | bc -l) -i 1.mp4 -t $segment_duration -c:v copy -c:a copy part3.mp4
ffmpeg -ss $(echo "3 * $segment_duration" | bc -l) -i 1.mp4 -t $segment_duration -c:v copy -c:a copy part4.mp4
ffmpeg -ss $(echo "4 * $segment_duration" | bc -l) -i 1.mp4 -c:v copy -c:a copy part5.mp4

分成六个部分

新建sh脚本

total_duration=$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 1.mp4)
segment_duration=$(echo "$total_duration / 6" | bc -l)

ffmpeg -i 1.mp4 -t $segment_duration -c:v copy -c:a copy part1.mp4
ffmpeg -ss $segment_duration -i 1.mp4 -t $segment_duration -c:v copy -c:a copy part2.mp4
ffmpeg -ss $(echo "2 * $segment_duration" | bc -l) -i 1.mp4 -t $segment_duration -c:v copy -c:a copy part3.mp4
ffmpeg -ss $(echo "3 * $segment_duration" | bc -l) -i 1.mp4 -t $segment_duration -c:v copy -c:a copy part4.mp4
ffmpeg -ss $(echo "4 * $segment_duration" | bc -l) -i 1.mp4 -t $segment_duration -c:v copy -c:a copy part5.mp4
ffmpeg -ss $(echo "5 * $segment_duration" | bc -l) -i 1.mp4 -c:v copy -c:a copy part6.mp4

把当前目录及子目录下大于2000000000byte的mp4文件平均分割成五个部分后,删除源文件

#!/bin/bash

# 找到当前目录及子目录中大于等于2GB的MP4文件
mp4_files=$(find . -type f -name "*.mp4" -size +2000000000c)

# 循环处理每个满足条件的MP4文件
for file in $mp4_files; do
  file_dir=$(dirname "$file")  # 获取原文件所在的目录
  filename=$(basename "$file" .mp4)
  duration=$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$file")
  segment_duration=$(echo "$duration / 5" | bc -l)
  
  # 创建一个临时目录来存放分割后的部分
  temp_dir=$(mktemp -d)
  
  ffmpeg -i "$file" -t $segment_duration -c:v copy -c:a copy "$temp_dir/${filename}_part1.mp4"
  ffmpeg -ss $segment_duration -i "$file" -t $segment_duration -c:v copy -c:a copy "$temp_dir/${filename}_part2.mp4"
  ffmpeg -ss $(echo "2 * $segment_duration" | bc -l) -i "$file" -t $segment_duration -c:v copy -c:a copy "$temp_dir/${filename}_part3.mp4"
  ffmpeg -ss $(echo "3 * $segment_duration" | bc -l) -i "$file" -t $segment_duration -c:v copy -c:a copy "$temp_dir/${filename}_part4.mp4"
  ffmpeg -ss $(echo "4 * $segment_duration" | bc -l) -i "$file" -c:v copy -c:a copy "$temp_dir/${filename}_part5.mp4"

  # 删除源文件
  rm "$file"
  
  # 移动分割后的部分到原文件所在目录
  mv "$temp_dir"/* "$file_dir"
  
  # 删除临时目录
  rmdir "$temp_dir"
done

###仅对当前目录中大小大于2GB(2000000000字节)的MP4文件执行分割两个部分操作
#!/bin/bash

# 获取当前目录下大于2GB的MP4文件
mp4_files=$(find . -maxdepth 1 -type f -name "*.mp4" -size +2000000000c)

# 循环处理每个满足条件的MP4文件
for file in $mp4_files; do
  filename=$(basename "$file" .mp4)
  duration=$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$file")
  segment_duration=$(echo "$duration / 2" | bc -l)
  
  ffmpeg -i "$file" -t $segment_duration -c:v copy -c:a copy "${filename}_part1.mp4"
  ffmpeg -ss $segment_duration -i "$file" -t $segment_duration -c:v copy -c:a copy "${filename}_part2.mp4"
done