このスクリプトを使用して、選択した時間にメディアファイルを切り取ります。
#!/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
より良い対話のためにKDEを使用したいと思います。
最初の部分は最初からINPUT=$(yad
次のように調整できます。
INPUT=$(kdialog --getopenfilename ~/Videos/ '*.m4a *.ogg *.mp3 *.mp4 *.avi *.aac *.flac *.avi *.mkv *.mp4')
kdialog
ただし、タイムスタンプの開始と終了を入力できるウィンドウを表示するために、2番目の部分(で始まる)の代替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