我知道这是一个新手问题......
我想将我的视频批量转换为 h265,我可以借助 Zernity 和 ffmpeg 来完成,但我遇到了进度条的小问题,因为没有进度条。
无论有没有最后一部分,实际的“实质部分”都发挥了奇妙的作用,即:
zenity --pulsate --title "Processing " --text "${filename} " --pulsate --auto-close --auto-kill
整个代码如下:
d1="$(zenity --file-selection --title="Bulk Move Choose starting directory" --directory)"
d2="$(zenity --file-selection --title="Bulk Move Choose destination directory" --directory)"
if [ "$?" != 0 ]; then
exit
fi
##
for i in "$d1"/*
do
## filter out the actual file name
filename=$(basename -- "$i")
## the meaty bit
ffmpeg -i "$i" -c:v libx265 -preset medium -x265-params crf=28 -c:a aac -strict experimental -b:a 128k "$d2"/"${filename%.*}.mkv" ; done | zenity --pulsate --title "Processing " --text "${filename} " --pulsate --auto-close --auto-kill
我知道它正常工作的唯一方法是通过在命令行上调用脚本并观察 ffmpeg(非常详细)输出,或者监控 CPU 使用情况。
有人能给我指明正确的方向吗?
谢谢
答案1
您没有检查起始目录是否被中止,而只是检查目标目录。您也可以像这样缩短if
- then
- :fi
d1="$(zenity --file-selection --title="Bulk Move Choose starting directory" --directory)"
[[ "$?" != 0 ]] && exit
d2="$(zenity --file-selection --title="Bulk Move Choose destination directory" --directory)"
[[ "$?" != 0 ]] && exit
这样可以用少一行代码来实现双倍的中止检查量。
要在任何系统上测试进度条,请使用以下命令:
$ for i in ./* ; do echo $i ; sleep .1 ; done | zenity --pulsate --title "Processing " --text "${filename} " --pulsate --auto-close --auto-kill
--pulsate is not supported for this dialogue
啊,有一条错误消息!--progress
缺少进度条来告知zenity
是否需要进度条。因此,工作脚本将是:
d1="$(zenity --file-selection --title="Bulk Move Choose starting directory" \
--directory)"
[[ "$?" != 0 ]] && exit
d2="$(zenity --file-selection --title="Bulk Move Choose destination directory" \
--directory)"
[[ "$?" != 0 ]] && exit
for i in "$d1"/* ; do
## filter out the actual file name
filename=$(basename -- "$i")
## the meaty bit
ffmpeg -i "$i" -c:v libx265 -preset medium -x265-params crf=28 \
-c:a aac -strict experimental -b:a 128k "$d2"/"${filename%.*}.mkv"
done | zenity --progress --pulsate --title "Processing " \
--text "ffmpeg - convert files" \
--pulsate --auto-close --auto-kill
传递${filename}
到--text
选项不会随着每个文件名的处理而更新显示。如果您想要这样做,则需要切换到yad
(另一个对话框),它是 的增强版本zenity
:
尽管源代码出现在.gif
您可以从此问答中复制并粘贴您自己的脚本: