ffmpeg实现视频的分割生成测试用的图片视频和音频

发布时间 2023-10-30 23:08:08作者: LX2020

测试代码如下:

#!/bin/bash

# 提示用户输入参数
read -p "请输入要切分的MP4文件名: " filename
read -p "请输入要生成的视频数量: " video_count
read -p "请输入视频文件的大小范围(单位MB,例如10-20): " video_size_range
read -p "请输入要生成的图片数量: " image_count
read -p "请输入要生成的音频数量: " audio_count
read -p "请输入要提取的音频时长(单位秒): " audio_duration

# 创建输出文件夹
output_folder="output"
mkdir -p $output_folder

# 切分MP4文件
echo "开始切分MP4文件..."

# 切分视频
echo "开始切分视频..."
for (( i=1; i<=video_count; i++ ))
do
    video_size=$((RANDOM % (video_size_range+1 - 5) + 5)) # 随机生成视频大小
    ffmpeg -i $filename -ss 00:00:00 -t 00:00:$video_size -c copy $output_folder/video_$i.mp4
done
echo "视频切分完成!"

# 提取图片
echo "开始提取图片..."
duration=$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 $filename) # 获取视频总时长
for (( i=1; i<=image_count; i++ ))
do
    start_time=$(awk "BEGIN{ srand(); print int(rand() * ($duration)) }") # 随机生成图片起始时间
    ffmpeg -ss $start_time -i $filename -vframes 1 $output_folder/image_$i.jpg
done
echo "图片提取完成!"

# 提取音频
echo "开始提取音频..."
duration=$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 $filename) # 获取音频总时长
for (( i=1; i<=audio_count; i++ ))
do
    start_time=$(awk "BEGIN{ srand(); print int(rand() * ($duration - $audio_duration)) }") # 随机生成音频起始时间
    ffmpeg -i $filename -ss $start_time -t $audio_duration -vn -acodec aac $output_folder/audio_$i.m4a
done
echo "音频提取完成!"

echo "所有操作已完成!"