我正在尝试编写一个脚本来检查视频文件编解码器(使用 ffprobe),并对其进行相应的编码(使用 HandBrakeCLI)。
Directory
mp4
>> Sub-Directory
>> mp4
>> >> Sub-sub Directory
>> >> mp4
脚本中的一个问题是它不能执行递归子目录。我尝试更改
for video_file in $(find . -type f -name '*.mp4')
上面的代码可能是错的,因为我通过阅读 AskUbuntu 并尝试了一些代码来测试它们。不记得是哪个让它工作的,但最终它无法处理文件/目录中的空格。
适用于当前工作目录但不适用于递归目录的脚本:
#!/bin/bash
for video_file in ./*.mp4;
do
## using ffprobe to check video codec
CHECK_FILE=`ffprobe -v error -select_streams v:0 -show_entries stream=codec_name -of default=noprint_wrappers=1:nokey=1 "$video_file"`
if [ $CHECK_FILE = hevc ]
then
echo "$video_file is hevc/h265, skipping"
else
# remove .mp4 extension
tempname="${video_file%.*}"_tmp.mp4
newname="${video_file%.*}"_hevc.mp4
HandBrakeCLI -i "$video_file" -o "$tempname"
mv -v "$tempname" "$newname"
echo "Moving on to next available file"
fi
done
如果有人能指引方向我将非常感激:)
答案1
shopt -s globstar
在脚本中设置此项,将您的 for 循环更改为;
shopt -s globstar
for video_file in ./**/*.mp4;
要查看可以在 bash 脚本中打开或关闭或设置的内容,请执行以下操作:
shopt
autocd off
cdable_vars off
cdspell off
checkhash off
checkjobs off
checkwinsize on
cmdhist on
compat31 off
compat32 off
compat40 off
compat41 off
compat42 off
compat43 off
complete_fullquote on
direxpand off
dirspell off
dotglob off
execfail off
expand_aliases on
extdebug off
extglob on
extquote on
failglob off
force_fignore on
globasciiranges off
globstar on
gnu_errfmt off
histappend on
histreedit off
histverify off
hostcomplete off
huponexit off
inherit_errexit off
interactive_comments on
lastpipe off
lithist off
login_shell off
mailwarn off
no_empty_cmd_completion off
nocaseglob off
nocasematch off
nullglob off
progcomp on
promptvars on
restricted_shell off
shift_verbose off
sourcepath on
xpg_echo off