ОНОВЛЕННЯ-2: Після подання наступного сценарію мені стало зрозуміло, що ще одним способом встановлення часових позицій (у графічному інтерфейсі) є використання редактора субтитрів (наприклад, gnome-subtitles
). Ви можете просто натиснути, щоб позначити початкові та кінцеві позиції "фантомних субтитрів"; насправді ви можете розмістити свій шлях до файлів та коментарі як "підзаголовки" ... Деякі формати не підходять (наприклад, використовуючи номери кадрів). добре.
ОНОВЛЕННЯ-1; новий скрипт ... Цей скрипт не надасть вам інтегрованих можливостей списку відтворення, але він дозволить вам вибирати та зберігати та змінювати час початку та закінчення в Smplayer, не потрібно нічого вводити.
Ця інформація зберігається у конфігураційному файлі, файлові контури якого можна "відтворити" окремо або згрупувати в послідовність за допомогою іншого сценарію (подібного до мого сценарію "відтворити" або як ваших сценаріїв Emacs).
Він працює за допомогою Seek
діалогового вікна Smplayer ... xmacro
маніпулює діалоговим вікном (я виявив, що він потрібен sleep .3
між командами xmacro) ... Часи зберігаються у форматі HH: MM: SS у файлі у ~/.config/smplayer
... Перший рядок - це Початковий час, 2-й рядок - Кінцевий час, а 3-й рядок - там, щоб вказати кореневу директорію ... Цей 3-й рядок використовується як необов'язковий індикатор контуру в наступному скрипті, який змінює налаштування конфігурації програвача загрунтуючи його -ss
та -endpos
... Конфігураційний файл часових міток називається таким же, як медіа-файл, із .smplay
суфіксом ...
Отже, це не все, що ви хочете, але це може допомогти налаштувати час без будь-якого введення ...
Ось сценарій "отримати часові позначки":
#!/bin/bash
# Bind this script to a key-combination of your choice..
# It currently responds only to an Smplayer window.
id=$(xdotool getactivewindow)
title="$(xwininfo -id "$id" |
sed -n "2s/^xwininfo: Window id: \(0x[[:xdigit:]]\+\) \x22\(.*\)\x22$/\2/p")"
if [[ $title =~ ^.*\ -\ SMPlayer$ ]] ; then
smplayer_d="$HOME/.config/smplayer"
clip_d="$smplayer_d/clips"
[[ ! -d "$clip_d" ]] && mkdir -p "$clip_d"
bname="${title% - SMPlayer}"
clip_f="$clip_d/$bname.smplay" # Same name as video, with '.smplay' suffix
if [[ ! -f "$clip_f" \
|| "$(<"$clip_f" wc -l)" != "3" ]]
then # Prime with three defaults
# FROM TO ROOT-dir
echo -e "0:00:00\n0:00:00\n" >"$clip_f"
fi
# Get timestamp, in seconds, of current stream position (from the current window)
# using the "Smplayer - seek" dialog, via Ctrl+j
sleep .3; echo -n "KeyStrPress Control_L KeyStrPress j KeyStrRelease j KeyStrRelease Control_L" | xmacroplay -d 10 :0.0 &>/dev/null
sleep .3; echo -n " KeyStrPress Home KeyStrRelease Home " | xmacroplay -d 10 :0.0 &>/dev/null
sleep .3; echo -n "KeyStrPress Shift_L KeyStrPress End KeyStrRelease End KeyStrRelease Shift_L " | xmacroplay -d 10 :0.0 &>/dev/null
sleep .3; echo -n "KeyStrPress Control_L KeyStrPress c KeyStrRelease c KeyStrRelease Control_L" | xmacroplay -d 10 :0.0 &>/dev/null
sleep .3; echo -n " KeyStrPress Escape KeyStrRelease Escape " | xmacroplay -d 10 :0.0 &>/dev/null
seekHMS="$(xsel -o -b)"
# Now set config times to defaults (in case of malformed times)
ssHMS="0:00:00"
endposHMS="0:00:00"
# Now get config data from config file
eval "$( sed -ne "1s/^\([0-9]\+\):\([0-5][0-9]\):\([0-5][0-9]\)$/ ssHMS=\"&\"/p" \
-e "2s/^\([0-9]\+\):\([0-5][0-9]\):\([0-5][0-9]\)$/endposHMS=\"&\"/p" \
-e "3s/.*/ root_d=\"&\"/p" "$clip_f" )"
# Present dialog to set specifick items.
REPLY=$(zenity \
--list --height=310 --width=375 \
--title="Set Clip Start / End Time" \
--text=" Select Clip Start / End for time: $seekHMS\n\
or choose another option\n\
\tthen click OK" \
--column="Position" --column=" " --column="Current Setting " \
"Clip Start" " " "$ssHMS" \
"Clip End" " " "$endposHMS" \
"UNSET Start" " " " " \
"UNSET End" " " " " \
"* Open directory" " of" "config files *"
);
[[ "$REPLY" == "Clip Start" ]] && sed -i -e "1 s/.*/$seekHMS/" "$clip_f"
[[ "$REPLY" == "Clip End" ]] && sed -i -e "2 s/.*/$seekHMS/" "$clip_f"
[[ "$REPLY" == "UNSET Start" ]] && sed -i -e "1 s/.*/0:00:00/" "$clip_f"
[[ "$REPLY" == "UNSET End" ]] && sed -i -e "2 s/.*/0:00:00/" "$clip_f"
[[ "$REPLY" == "* Open directory" ]] && nautilus "$clip_d"
fi
Наступний сценарій є моїм оригінальним сценарієм "відтворити". Він не залежить від сценарію Avota Timestamp, але це не займе багато, щоб змусити їх працювати разом ...
Він буде "водити" Smplayer, який використовує mplayer внутрішньо. Це, принаймні, звичайний графічний інтерфейс, але ваш список відтворення повинен бути в текстовому редакторі .. і ви, очевидно, знаєте про цей метод вже :)
Я спробував це пару років тому, але все про це забув, тому що мені часто не потрібна така річ, але добре зберігати «закладки». Радий, що ви відновили ідею. Ось сценарій ... який насправді робить лише те, що ви робили, але для Smplayer (GUI mplayer)
#
# Summary:
# Play one video (only) in 'smplayer', passing -ss and -endpos values to 'mplayer'
# It uses 'locate' to get the path of the video (by just its basename)
#
# eg:
# $1 $2 $3 $4
# basename -ss -endpos root
# "Titus - The Gorilla King.mp4" 240 30 "$HOME" # A fascinating documentary of the long reign of a silver-back gorialla
#
[[ "$2" == "" ]] && set "$1" 0 "$3" "$4"
[[ "$3" == "" ]] && set "$1" "$2" 36000 "$4" # 36000 is arbitary (24 hours)
[[ "$4" == "" ]] && root="$HOME" || root="$4"
file=( "$(locate -er "^$root/\(.*/\)*\+$1$")" )
# 1) Tweak 'smplayer.ini' to run 'mplayer' with the specified -ss and -endpos times
# 2) Run 'smplayer' to play one video only. The time settings will hold afer exit,
# so the script waits (backgrounded) for smplayer to exit
# 3) When 'smplayer' exits, set values to extreme limits: -ss 0 -endpos 3600
# or(?): TODO remove the settings enitrely,
# but that requires a different regex
a=0 z=36000
#
# -ss <time> (also see -sb)
# -ss 56 # Seeks to 56 seconds.
# -ss 01:10:00 #Seeks to 1 hour 10 min.
#
# -endpos <[[hh:]mm:]ss[.ms]|size[b|kb|mb]> (also see -ss and -sb)
# Stop at given time or byte position.
# NOTE: Byte position is enabled only for MEncoder and will not be accurate, as it can only stop at a frame boundary.
# When used in conjunction with -ss option, -endpos time will shift forward by seconds specified with -ss.
# -endpos 56 # Stop at 56 seconds.
# -endpos 01:10:00 # Stop at 1 hour 10 minutes.
# -ss 10 -endpos 56 # Stop at 1 minute 6 seconds.
# -endpos 100mb # Encode only 100 MB.
#
# -ss 0 -endpos 36000
# \1 \2 \3 \4 \5 \6 \7 \8
sed -i -e "s/^\(mplayer_additional_options.*\)\( \|=\)\(-ss \+\)\([^ ]\+\)\( .*\)\(-endpos \+\)\([0-9:mb]\+\)\(.*\)/\1\2\3${2}\5\6${3}\8/" $HOME/.config/smplayer/smplayer.ini
(smplayer "$file"
sed -i -e "s/^\(mplayer_additional_options.*\)\( \|=\)\(-ss \+\)\([^ ]\+\)\( .*\)\(-endpos \+\)\([0-9:mb]\+\)\(.*\)/\1\2\3${a}\5\6${z}\8/" $HOME/.config/smplayer/smplayer.ini
)
exit
flag
кнопкою у вашому запитанні та попросіть її перенести.