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など)を入力するための入力フィールドを含むダイアログボックスを開きます。次に、2つのカスタムタイムスタンプを入力できる2つのタイムスタンプフィールドを入力します。押すとOKスクリプトが実行され、2つのタイムスタンプ間の部分が抽出されます。

私はまた、以下を使用するソリューションに興味があります。ジェニティしかし、私は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入力ボックスが表示されます。タイムスタンプ:

    タイムスタンプ

    上記と$START2つの値をそれぞれ取得します$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:)。

関連情報