開始/停止時間を使用してオーディオ/ビデオファイルをトリミングする と協調して機能する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;
?>
chopvideoaudio.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 input.mp4 00:01:20 00:01:45 output.mp4
YAD(さらに別のダイアログ) スクリプトが必要です。このスクリプトは、カスタムファイルタイプ(mp3、mp4、aviなど)を入力するための入力フィールドを含むダイアログボックスを開きます。次に、2つのタイムスタンプのフィールドを入力します。このフィールドに2つのカスタムタイムスタンプを入力できます。 OK
を押すと、スクリプトが実行され、2つのタイムスタンプの間からセクションが抽出されます。
Zenity を使用したソリューションにも興味がありますが、YADの方が好きです。
これは、 yad 、bashのみ(phpなし)、oneダイアログを使用したソリューションです。
#!/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"
これがどのように見えるかのスクリーンショットです。ボタンのテキストは、選択した言語に自動的に適合されることに注意してください。私は明らかにフランス語を話します!
このoneダイアログのみの欠点は、 yad では、ファイル入力用にファイル拡張子を事前に選択できないことです。これが必須の場合、次の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"
次のようにZenityを使用できます:-
ファイル選択の場合:
_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)
_
Text-Entryの場合:
_startchop=$(zenity --entry --text=startchop)
stopchop=$(zenity --entry --text=stopchop)
_
またはZenity-Forms:-
_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ファイル選択ウィンドウ :
$TIMESTAMPS=$(zenity --forms --text="Time-stamps" --add-entry=startchop --add-entry=stopchop)
は、タイムスタンプを入力する必要があるGUITex入力ボックスを表示します。
そして、上から_$START
_と_$STOP
_はそれぞれ両方の値を取得します。
_OUTFILE="$OUTFILENAME".$OUTFILETYPE
_は、(出力ファイル名のテキストエントリ)OUTFILENAME=$(zenity --entry --text=filename)
の組み合わせです。
そして、OUTFILETYPE=$(zenity --list --title="Select File Type" --text="file type selection" --column="Select" --column="File Type" --radiolist false avi true mp4 false mp3)
によるGUIファイルタイプ選択ダイアログ:
したがって、この例では:-
$INFILE
_は、選択したファイルを入力用に返します(例:_input.mp4
_)$START
_&_$STOP
_は、それぞれ_00:01:20
_と_00:01:45
_を返します。$OUTFILE
_は、ファイルタイプとともに出力ファイル名を返します(例:_output.mp4
_)