Zenity 进度:无窗口

Zenity 进度:无窗口

我知道这是一个新手问题......

我想将我的视频批量转换为 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

yad-进度条.gif

尽管源代码出现在.gif您可以从此问答中复制并粘贴您自己的脚本:

相关内容