调整 yad 脚本的内容以用于 kdialog 或其他更好的 KDE 解决方案(python 等)

调整 yad 脚本的内容以用于 kdialog 或其他更好的 KDE 解决方案(python 等)

我使用此脚本在选定的时间剪切媒体文件:

#!/bin/bash

INPUT=$(yad --width=600 --height=400 --file-selection --file-filter='*.m4a *.ogg *.mp3 *.mp4 *.avi *.aac *.flac *.avi *.mkv *.mp4')

eval $(yad --width=400 --form --field=start --field=end --field=output:SFL "00:00:00" "00:00:00" "${INPUT/%.*}-out.${INPUT##*.}" | awk -F'|' '{printf "START=%s\nEND=%s\nOUTPUT=\"%s\"\n", $1, $2, $3}')
[[ -z $START || -z $END || -z $OUTPUT ]] && exit 1

DIFF=$(($(date +%s --date="$END")-$(date +%s --date="$START")))
OFFSET=""$(($DIFF / 3600)):$(($DIFF / 60 % 60)):$(($DIFF % 60))

ffmpeg -ss "$START" -t "$OFFSET" -i "$INPUT" -c copy "$OUTPUT"

我已经找到了这里最初仅更改了最后一行(剪切/复制而不进行转换)。

但我在 KDE 中并希望使用kdialog它以获得更好的交互。

第一部分,从 开始INPUT=$(yad可以这样调整,我想:

INPUT=$(kdialog --getopenfilename ~/Videos/ '*.m4a *.ogg *.mp3 *.mp4 *.avi *.aac *.flac *.avi *.mkv *.mp4')

但后来我没有找到kdialog第二部分(以 开头eval $(yad --width=400 --form --field=start --field=end --field=output:SFL "00:00:00" "00:00:00" ...)的替代方案,以便它显示一个可以输入时间戳开始和结束的窗口:

在此输入图像描述


(如果可能的话,我还希望在最后有一个进度条或消息以及一个“ok”消息。 - 如果适用于 KDE,请随时建议 kdialog 之外的其他解决方案。)

答案1

我不知道我的问题是否足够明确,但整个问题就在这句话中:

我使用 KDE,想使用 kdialog 来实现更好的交互。

但 KDE 交互方面唯一“不好”的是文件选择器和时间戳窗口的 GTK UI。前者比后者更重要:文件选择器也卡在 $HOME 级别,我无法找到一个yad --file选项来指定另一个位置kdialog --getopenfilename

我的解决方案仅限于此:用于kdialog文件选择器并保留yad时间戳窗口(我不知道如何使用它创建kdialog);我无法用 制作进度条kdialog,所以我找到了一种制作进度条的方法zenity(没有真正显示百分比进度,只是行动正在进行的事实);使用 可以轻松创建结束消息kdialog

#!/bin/bash


INPUT=$(kdialog --getopenfilename ~/Videos/ '*.m4a *.ogg *.mp3 *.mp4 *.avi *.aac *.flac *.avi *.mkv *.mp4')

eval $(yad --width=400 --form --field=start --field=end --field=output:SFL "00:00:00" "00:00:00" "${INPUT/%.*}-out.${INPUT##*.}" | awk -F'|' '{printf "START=%s\nEND=%s\nOUTPUT=\"%s\"\n", $1, $2, $3}')
[[ -z $START || -z $END || -z $OUTPUT ]] && exit 1

DIFF=$(($(date +%s --date="$END")-$(date +%s --date="$START")))
OFFSET=""$(($DIFF / 3600)):$(($DIFF / 60 % 60)):$(($DIFF % 60))

ffmpeg -ss "$START" -t "$OFFSET" -i "$INPUT" -c copy "$OUTPUT" | zenity --progress --pulsate --text="Running" --percentage=1 --auto-close --auto-kill

if [ $? -eq 0 ]; then
kdialog --msgbox "Process completed successfully!"
  else
kdialog --msgbox "SOMETHING WENT WRONG!"
fi

(我意识到这种混合方式kdialogzenityyad奇怪,我正在等待一个更干净的解决方案,最好只是使用kdialog,但我不知道如何用它制作进度条和时间戳窗口。)

相关内容