web-dev-qa-db-ja.com

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使用率を監視することによってのみ、機能していることがわかります。

誰かが私を正しい方向に向けることができますか?

ありがとう

2
user256787

開始ディレクトリが宛先ディレクトリのみで中止されたかどうかは確認していません。また、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

これにより、1行少ないコード行で2倍のアボートチェックを行うことができます。

任意のシステムで進行状況バーをテストするには、これを使用します。

$ 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(Yet Another Dialog)に切り替える必要があります。

yad-progress-bar.gif

ソースコードは.gifこのQ&Aから独自のスクリプトをコピーして貼り付けることができます。

2