Linux下视频文件处理脚本 - Mr.Ding

Linux下视频文件处理脚本

天天记事 1276 / 2020-04-28 18:08:30

将下面脚本保存到文件(mediainfo),最好放到可PATH变量指定的地址(随意一个可找到的位置即可),之后修改文件掩码为执行权限

chmod 755 mediainfo

之后就能执行了,使用方法:

===========================================
文件转换脚本
===========================================
1. 获取视频尺寸
mediainfo <SourceFilePath>
2. 获取视频转换信息
mediainfo <SourceFilePath> <ToWidth>
3. 视频转换
mediainfo <SourceFilePath> <ToWidth> <SaveFilePath> [ffmpegArguments]

例如:

mediainfo demo.avi

结果

===========================================
视频尺寸: 1024x780

转换例子

mediainfo demo.avi 512 demo-512.mp4 -vcodec libx264 -preset faster -tune film -b:v 300k

脚本代码:

#!/bin/sh
function get_video_size() {
ffmpeg -i "$1" 2>&1| while read line
do
result=$(echo $line | grep "Stream " && grep "Video:")
if [ -n "$result" ]; then
echo $(echo $line |grep -E -o '[0-9]{2,}x[0-9]{2,}')
fi
done
}

function get_video_fit_size() {
if [ $1 -gt $3 ]; then
dw=$3
dh=`echo $2 \* $dw \/ $1 |bc`
echo $dw"x"$dh
else
echo $1x$2
fi
}
if [ -f "$1" ]; then
video_size=`get_video_size "$1"`
if [ -n "$video_size" ]; then
if [ $# == 1 ]; then
clear
echo "==========================================="
echo "视频尺寸: $video_size"
elif [ $# == 2 ]; then
iw=$(echo $video_size |grep -E -o '^[0-9]{2,}')
ih=$(echo $video_size |grep -E -o '[0-9]{2,}$')
vcc_size=`get_video_fit_size $iw $ih $2`
if [ -n $vcc_size ]; then
clear
echo "==========================================="
echo "视频尺寸: $video_size => $vcc_size"
fi
elif [ $# -ge 3 ]; then
iw=$(echo $video_size |grep -E -o '^[0-9]{2,}')
ih=$(echo $video_size |grep -E -o '[0-9]{2,}$')
vcc_size=`get_video_fit_size $iw $ih $2`
if [ -n $vcc_size ]; then
filepath="$1"
savepath="$3"
shift;shift;shift
clear
echo "==========================================="
echo "视频尺寸: $video_size => $vcc_size"
execmd="ffmpeg -y -i $filepath -s $vcc_size $@ $savepath"
echo $execmd
`$execmd`
fi
else
echo "参数错误"
fi
else
echo "不识别的文件"
fi
else
clear
echo "==========================================="
echo "文件转换脚本"
echo "==========================================="
echo "1. 获取视频尺寸"
echo " mediainfo <SourceFilePath>"
echo "2. 获取视频转换信息"
echo " mediainfo <SourceFilePath> <ToWidth>"
echo "3. 视频转换"
echo " mediainfo <SourceFilePath> <ToWidth> <SaveFilePath> [ffmpegArguments]"
fi