现在遇到了一个问题,就是想往微信群里发视频,但视频大小的限制在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