YAD 및 Zenity - 시작/중지 시간을 입력하여 비디오 다듬기

YAD 및 Zenity - 시작/중지 시간을 입력하여 비디오 다듬기

함께 작동하는 bash 스크립트와 PHP 스크립트가 있습니다시작/중지 시간을 사용하여 오디오/비디오 파일 다듬기.

PHP 스크립트:

<?php
// Create datetime objcects
$dt1 = new DateTime($argv[1]);
$dt2 = new DateTime($argv[2]);

// Conver difference to seconds
$dt3 = $dt2->format('U') - $dt1->format('U');

// echo $dt3."\n";
$h = (int)($dt3 / 3600);
$dt3 %= 3600;
$m = (int)($dt3 / 60);
$dt3 %= 60;
$s = $dt3;

// Dump as H:M:S
echo $h . ":" . $m . ":" . $s;

?>

찹비디오오디오.sh 스크립트:

#!/bin/bash
INFILE=$1
START=$2
STOP=$3
OUTFILE=$4

OFFSET=`php TimeDiff.php "$START" "$STOP"`

echo "Disecting $INFILE starting from $START to $STOP (duration $OFFSET)"
ffmpeg -ss "$START" -t "$OFFSET" -i "$INFILE" "$OUTFILE"

용법:

./chopvideoaudio.sh [input.mp4] [startchop] [stopchop] [output.mp4]

여기서 [startchop] 및 [stopchop]은 모두 트랙 시작 부분의 절대 타임스탬프입니다.

이 스크립트를 실행하는 명령 예:

./chopvideoaudio.sh 입력.mp4 00:01:20 00:01:45 출력.mp4

내가 하나를 원하는YAD (또 다른 대화)스크립트는 사용자 정의 파일 형식(예: mp3, mp4, avi)을 입력하기 위한 입력 필드가 있는 대화 상자를 엽니다. 그런 다음 두 개의 사용자 정의 타임스탬프를 입력할 수 있는 두 개의 타임스탬프 필드를 입력합니다. 누르면 OK스크립트가 실행되어 두 타임스탬프 사이의 부분을 추출합니다.

나는 또한 다음을 사용하는 솔루션에 관심이 있습니다.제니티, 하지만 저는 YAD를 선호합니다.

답변1

다음은 다음을 사용하는 솔루션입니다.마당, bash 전용(PHP 없음),하나대화:

#!/bin/bash
 
eval $(yad --width=400 --form --field=input:FL --field=start --field=end --field=output:SFL "" "00:00:00" "00:00:00" "" | awk -F'|' '{printf "INPUT=\"%s\"\nSTART=%s\nEND=%s\nOUTPUT=\"%s\"\n", $1, $2, $3, $4}')
[[ -z $INPUT || -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" "$OUTPUT"

다음은 그 모습을 보여주는 스크린샷입니다. 버튼의 텍스트는 선택한 언어에 맞게 자동으로 조정됩니다. 나는 분명히 프랑스어를 구사하는 사람입니다!

![대화상자 스크린샷

이 작업의 단점하나대화 상자는 단지마당, 파일 입력에 대한 파일 확장자를 미리 선택할 수 없습니다. 이것이 필수인 경우 2단계/대화 상자 솔루션은 다음과 같습니다.

#!/bin/bash
 
INPUT=$(yad --width=600 --height=400 --file-selection --file-filter='*.mp3 *.mp4 *.avi')

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" "$OUTPUT"

그러면 파일 선택기와 다음과 같은 타임스탬프 창이 표시됩니다.

대화 상자의 스크린샷

답변2

당신은 그것을 사용할 수 있습니다제니티다음과 같이:-

  1. ~을 위한파일 선택:

    file=$(zenity --file-selection --file-filter='*.mp4 *.mp3 *.avi')
    

    또는

    file=$(zenity --file-selection --title="Select Input File" --file-filter='*.mp4' --file-filter='*.mp3' --file-filter=*.avi)
    
  2. ~을 위한텍스트 입력:

    startchop=$(zenity --entry --text=startchop)
    stopchop=$(zenity --entry --text=stopchop)
    

    또는선 형태:-

    zenity --forms --text="Time-stamps" --add-entry=startchop --add-entry=stopchop
    

이제 echo는 $file $startchop $stopchop다음과 같은 출력을 제공합니다.input.mp4 00:01:20 00:01:45

$file즉 , 변수 $startchop및 를 사용할 수 있습니다 $stopchop. 원하는 대로 명령을 사용자 정의하세요!


편집하다:-

제안된 chopvideoaudio.sh스크립트:

#!/bin/bash
INFILE=$(zenity --title="Select Input File" --file-selection --file-filter='*.mp4' --file-filter='*.mp3' --file-filter=*.avi)
$TIMESTAMPS=$(zenity --forms --text="Time-stamps" --add-entry=startchop --add-entry=stopchop)
START=$(echo $TIMESTAMPS | cut -d '|' -f 1)
STOP=$(echo $TIMESTAMPS | cut -d '|' -f 2)
OUTFILENAME=$(zenity --entry --text=filename)
OUTFILETYPE=$(zenity --list --titile="Select File Type" --text="file types\ selection" --column="Select" --column="File Type" --radiolist false avi true mp4 false mp3)
OUTFILE="$OUTFILENAME".$OUTFILETYPE

OFFSET=`php TimeDiff.php "$START" "$STOP"`

echo "Disecting $INFILE starting from $START to $STOP (duration $OFFSET)"
ffmpeg -ss "$START" -t "$OFFSET" -i "$INFILE" "$OUTFILE"

사용법: 실행 전용./chopvideoaudio.sh

설명하다:-

  • INFILE=$(zenity --title="Select Input File" --file-selection --file-filter='*.mp4' --file-filter='*.mp3' --file-filter=*.avi)표시됩니다Zenity의 GUI 파일 선택 창:

    화면 0

  • $TIMESTAMPS=$(zenity --forms --text="Time-stamps" --add-entry=startchop --add-entry=stopchop)입력해야 하는 GUI Tex 입력 상자가 표시됩니다.타임스탬프:

    타임스탬프

    위에서 $START와 두 값을 각각 가져옵니다 $STOP.

  • OUTFILE="$OUTFILENAME".$OUTFILETYPE(출력 파일 이름에 대한 텍스트 항목)의 조합입니다.OUTFILENAME=$(zenity --entry --text=filename)

    GUI 파일 유형 선택 대화 상자 OUTFILETYPE=$(zenity --list --title="Select File Type" --text="file type selection" --column="Select" --column="File Type" --radiolist false avi true mp4 false mp3):

    파일 유형 선택

따라서 이 예를 통해:-

  • $INFILE선택한 입력 파일을 반환합니다(예 input.mp4: ).
  • $START&는 각각 합계를 $STOP반환합니다 .00:01:2000:01:45
  • $OUTFILE출력 파일 이름과 파일 형식을 반환합니다(예 output.mp4: ).

관련 정보