假设我在目录 /home/user/videos/awaiting_conversion
中有一堆视频我将如何使用 cron 运行与此类似的脚本以将每个视频批量转换为不同的格式?/bin/sh -c $'nice /usr/bin/ffmpeg -i \044'\'$'/home/user/videos/awaiting_conversion/video_file_1.mp4'\'$' -s \044'\'$'480x320'\'$' -vcodec libx264 -acodec libmp3lame -ab \044'\'$'64k'\'$' -vpre fast -crf \044'\'$'30'\'$' -ar \044'\'$'22050'\'$' -f flv -y \044'\'$'/home/user/videos/converted/video_file_1.flv'\'$''
上面的脚本适用于单次转换,但是:
最终的问题是如何为
/home/user/videos/awaiting_conversion
中存在的每个视频运行该脚本,将文件名作为变量传递?
最佳答案
尝试这样做:
#!/bin/bash
checkFile(){
[[ -s $1 && -f $1 ]] && return 0 || return 1
}
mp42flv(){
for arg; do
checkFile "$arg" || continue
/usr/bin/ffmpeg \
-i "$arg" \
-s '480x320' \
-vcodec libx264 \
-acodec libmp3lame \
-ab '64k' \
-vpre fast \
-crf '30' \
-ar '22050' \
-f flv \
-y "${arg%.*}.flv" ||
echo >&2 "Error treating $arg"
done
}
if [[ -t 0 ]]; then
mp42flv "$@"
else
while IFS= read -r a; do
checkFile "$a" || continue
mp42flv "$a"
done
fi
用法
./script.sh /home/user/videos/converted/video_file*.mp4
./script.sh /home/user/videos/converted/video_file_01.mp4
find /home/user/videos/converted -type f -name '*video*mp4' |./script.sh
(脚本检测到 STDIN
的使用)关于bash - 如何使用 shell 脚本将多个文件从 mp4 转换为 flv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15672101/