요약:
Handbrakecli를 실행하고 진행 상황을 확인하는 방법그리고ETA, 깜박임 없이 대화 상자로 파이프됩니다.
세부 사항:
디렉터리에 있는 모든 비디오 파일을 찾은 다음 해당 파일에 대해 동시에 handbrakecli를 실행하는 스크립트가 있습니다. handbrakecli가 실행될 때마다 파일 등에 대한 많은 정보가 표시되고 그 뒤에 다음 줄이 표시됩니다.
Encoding: task 1 of 1, 3.30 % (295.53 fps, avg 303.23 fps, ETA 00h02m54s)
내 스크립트에서는 handbrakecli 명령을 다른 명령에 파이프하여 진행 상황을 제외한 모든 것을 필터링한 다음 이를 대화 상자에 다음과 같이 파이프합니다.
조각 1
HandBrakeCLI --preset "Normal" -i "$f" -o "$DEST" | \
stdbuf -o0 tr -s '\r' '\n' | \
stdbuf -o0 grep -oP '(?<=, )\d+(?=\.\d\d \%)' | \
dialog --gauge "$DIALOG_MSG" 10 70;
이것은 훌륭하게 작동합니다. 진행 상황이 표시되고 깜박이지 않습니다. 두 번째 작업은 진행 상황과 ETA를 표시하는 방법을 찾는 것이었습니다. 이것이 제가 생각해낸 것입니다.
조각 2
HandBrakeCLI --preset "Normal" -i "$f" -o "$DEST_FULL_FILE" | \
stdbuf -oL tr -s '\r' '\n' | \
while read -r str; do
local REMAINING=$(echo "$str" | grep -oP "(?<=ETA )\d\dh\d\dm\d\ds(?=\))");
local PROGRESS=$(echo "$str" | grep -oP "(?<=, )\d+(?=.\d\d)");
echo "$PROGRESS" | dialog --gauge "$DIALOG_MSG Time remaining: $REMAINING" 10 70;
done
작동하지만 대화 상자 창이 깜박입니다. 이것이 성능과 관련이 있는지(의심할 만함), 아니면 전체와 관련이 있는지는 모르겠습니다.읽는 동안루프는 대화 상자에서 제대로 작동하지 않습니다.
또한 대화 상자에 연결하지 않고 이 작업을 시도했지만 대화 상자를 한 번만 표시한 다음 전혀 업데이트하지 않습니다.
조각 3
HandBrakeCLI --preset "Normal" -i "$f" -o "$DEST_FULL_FILE" | \
stdbuf -oL tr -s '\r' '\n' | \
while read -r str; do
local REMAINING=$(echo "$str" | grep -oP "(?<=ETA )\d\dh\d\dm\d\ds(?=\))");
local PROGRESS=$(echo "$str" | grep -oP "(?<=, )\d+(?=.\d\d)");
dialog --gauge "$DIALOG_MSG Time remaining: $REMAINING" 10 70 $PROGRESS;
done
마지막으로 나는 이것을 시도했습니다 :
조각 4
HandBrakeCLI --preset "Normal" -i "$f" -o "$DEST_FULL_FILE" | \
stdbuf -o0 tr -s '\r' '\n' | (
read -r str;
local REMAINING=$(echo "$str" | grep -oP "(?<=ETA )\d\dh\d\dm\d\ds(?=\))");
local PROGRESS=$(echo "$str" | grep -oP "(?<=, )\d+(?=.\d\d)");
echo "$PROGRESS";
) | dialog --gauge "$DIALOG_MSG Time remaining: $REMAINING" 10 70;
하지만 효과는 좋지 않습니다.
나는 여기에 몇 가지 근본적인 문제가 있다는 것을 알고 있습니다.
답변1
조각 2가 가장 가깝습니다. 입력에서 매직 마크를 찾도록 선택한 다음 dialog --gauge
, 다음 줄에서 새 백분율을 읽고, 새 마크가 나타날 때까지 다음 줄에서 새 힌트를 읽습니다.XXX
따라서 원하는 것을 얻어야 합니다.
HandBrakeCLI --preset "Normal" -i "$f" -o "$DEST_FULL_FILE" |
stdbuf -oL tr -s '\r' '\n' |
while read -r str
do
REMAINING=$(echo "$str" | grep -oP "(?<=ETA )\d\dh\d\dm\d\ds(?=\))")
PROGRESS=$(echo "$str" | grep -oP "(?<=, )\d+(?=.\d\d)")
echo -e "XXX\n$PROGRESS\n$DIALOG_MSG Time remaining: $REMAINING\nXXX"
done |
dialog --gauge "$DIALOG_MSG Time remaining: " 10 70;