0

我做了一个脚本来用 ffmpeg 转换我的东西

它确实:

1 创建带有取消按钮的进度条 2 循环转换文件 3 设置进度值

它工作正常,但是当我单击取消时它不会停止 ffmpeg

奇怪的是,当我使用像 echo 这样的另一个程序时,它的工作方式就像是 ffmpeg 问题

谁能帮我找出诀窍?

listoffile="$HOME/ffmpeglist.lst"
numberoffile=$(wc -l <$listoffile)
ffmpegpath="/usr/bin/ffmpeg"

    mystufvariabletouseonmyscript=$(kdialog --progressbar "hello this is a progress bar with 100 steps" 100) ;  sleep 2 ; qdbus $mystufvariabletouseonmyscript  showCancelButton true




    until test "true" = `qdbus  $mystufvariabletouseonmyscript wasCancelled` ; do 

            while read line ; do
                qdbus $mystufvariabletouseonmyscript org.kde.kdialog.ProgressDialog.setLabelText $"Starting Conversion...processing file $line"


                $ffmpegpath -i   "$line"   "${line%%.*}.$mp3" 


                value=$(( $(($a*100))/$numberoffile ))
                qdbus  $mystufvariabletouseonmyscript Set org.kde.kdialog.ProgressDialog value $value
                a=$(($a+1))

                done< "$listoffile"

        done
4

1 回答 1

0

这是我的答案确保你已经设置了一个我为这个做的文件夹

/usr/share/sounds/ 但这是一个很好的例子,因为文件很短,所以......

ls -d -1 /usr/share/sounds/*.* > /tmp/listoffile.txt 
a=$(kdialog --title $"FFmpeg Dolphin Service Menu"  --progressbar $"Starting Conversion..." 100)
b=$(kdialog --title $"FFmpeg Dolphin Service Menu"  --progressbar $"Global work..." 100)

qdbus $b  showCancelButton true

qdbus $b org.kde.kdialog.ProgressDialog.autoClose true


numberoffile=$(wc -l <"/tmp/listoffile.txt")
echo $numberoffile
count=1

while  read <&3 line ; do 

    while read linetwo ; do
qdbus $a org.kde.kdialog.ProgressDialog.setLabelText $"Processing file..... $line"
        qdbus $a  showCancelButton true
        while [[  $(qdbus  $a wasCancelled) != "false" || $(qdbus  $b wasCancelled) != "false"  ]] ; do
            echo -e "$COL_RED ECHO KILLING AXEL AND KDIALOG $COL_RESET"
            qdbus $a  org.kde.kdialog.ProgressDialog.close 
            qdbus $b  org.kde.kdialog.ProgressDialog.close 
            exit
        done

        qdbus  $a Set org.kde.kdialog.ProgressDialog value  "$linetwo"

    done < <((pv -W -n "$line" | ffmpeg -y ciao.flac -i pipe:0 2>/tmp/logffm.lst) 2>&1 )
    v=$(( $(($count*100))/$numberoffile ))
    echo $(($count*100)) and 
    count=$(($count+1))
    echo "qdbus  $b Set org.kde.kdialog.ProgressDialog value $v"
    qdbus  $b Set org.kde.kdialog.ProgressDialog value $v

done 3<"/tmp/listoffile.txt"   
于 2015-01-02T15:57:36.667 回答