我使用此脚本在选定的时间剪切媒体文件:
#!/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
(我意识到这种混合方式kdialog
,zenity
很yad
奇怪,我正在等待一个更干净的解决方案,最好只是使用kdialog
,但我不知道如何用它制作进度条和时间戳窗口。)