私のスクリプトはデフォルトでビデオを変換します(例:mp4 --> mkv)。作業ディレクトリに「1.mp4」というビデオファイルがあり、「2.mkv」という新しいファイルを作成するとします。この場合、スクリプトはエラーなしで実行されます。ところで、「1.mp4 --> 2.mkv」を再試行すると、FFmpeg
「2.mkvがすでに存在します。上書きしますか?[y / N]」というメッセージが表示されます。通常、この質問に答えることができます。ただし、この場合はコメントできませんFFmpeg
。だから「上書きしないで終了してください」と出てきます。その後、私のプログラムはif
状況を見つけてzenity
コマンドを試みます。
これはスクリプトです。
#!/usr/bin/env sh
CONTROL(){
case $? in
1)
exit 1;;
5)
clear
echo "Program Closed: Timed Out (15)."
exit 5;;
-1)
clear
echo "An Unexpected Error Has Occurred."
esac
}
NOINFO(){
if [ -z "$ACODEC" ]; then ACODEC="copy"; fi
if [ -z "$VCODEC" ]; then VCODEC="copy"; fi
if [ -z "$EXTE" ]; then EXTE=${FNAME##*.}; fi
EXTE=${EXTE##*.}
}
FNAME=$(zenity --file-selection \
--title="[1/2] Select a Video File" 2> /dev/null)
CONTROL
VAR=$(zenity --forms --separator=":" \
--title="[2/2] Required Informations" \
--text="Enter the required informations.\nFor defaults just click OK." \
--add-entry="Audio Codec (Default = copy)" \
--add-entry="Video Codec (Default = copy)" \
--add-entry="Output Extension (Default = Input)" 2> /dev/null)
CONTROL
ACODEC=$(echo "$VAR" | cut -d ":" -f 1)
VCODEC=$(echo "$VAR" | cut -d ":" -f 2)
EXTE=$(echo "$VAR" | cut -d ":" -f 3)
NOINFO
sudo ffmpeg -i "$FNAME" -c:a "$ACODEC" -c:v "$VCODEC" "$FNAME.$EXTE"
if zenity --text-info --title="Confirm" \
--checkbox="I want to delete the original file." 2> /dev/null
then
sudo rm "$FNAME" && sudo mv "$FNAME.$EXTE" "${FNAME%.*}.$EXTE"
fi
zenity --question --width="200" --timeout="15" --title="Please Answer" \
--text="Continue?" 2> /dev/null
CONTROL
プログラムにどのように入力を提供できますか?