UPDATE-2: Depois de enviar o script a seguir, percebi que outra maneira de configurar posições de tempo (em uma GUI) é usar um Editor de Legendas (por exemplo, gnome-subtitles
). Você pode apenas clicar para marcar as posições inicial e final de "legendas fantasmas"; na verdade, você pode colocar o seu caminho de arquivo e comentários como "subtítulo" ... Alguns formatos não são adequados (por exemplo, usando números de quadros) ... "ViPlay Subtitle File", Power DivX e 'Adobe Encore DVD' Boa.
UPDATE-1; um novo script ... Este script não lhe dará capacidade de reprodução integrada, mas permitirá que você selecione e salve e modifique os horários de início e fim dentro do Smplayer, sem a necessidade de digitar nada.
Esta informação é salva em um arquivo de configuração, os caminhos dos arquivos podem ser "reproduzidos" individualmente ou agrupados em uma sequência, por meio de outro script (semelhante ao meu script 'play' ou como seus scripts do Emacs) ..
Funciona utilizando o Seek
dialog ... xmacro
do Smplayer manipula o diálogo (descobri que ele precisa de sleep .3
entre os comandos xmacro) ... Os tempos são armazenados no formato HH: MM: SS em um arquivo em ~/.config/smplayer
... A primeira linha é a hora de início, a segunda linha é a hora de término e a terceira linha está lá para especificar um diretório raiz ... Esta terceira linha é usada como opcional indicador de caminho pelo script de acompanhamento que modifica uma configuração de configuração do smplayer, preparando-o com -ss
e -endpos
... O arquivo de configuração de carimbos de data e hora é nomeado igual ao arquivo de mídia, com um sufixo .smplay
...
Então, isso não é tudo que você quer, mas pode ajudar a configurar os horários sem digitar ...
Aqui está o script "obter registros de data e hora":
#!/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$//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
O script a seguir é o scrpt original de "play" .É independente do script avove Timestamp, mas não demoraria muito para que trabalhassem juntos ...
Ele vai 'dirigir' o Smplayer, que usa o mplayer internamente .. é, pelo menos, uma GUI normal, mas sua playlist precisa estar no seu editor de texto .. e obviamente você já conhece esse método :)
Eu tentei isso um par de anos atrás, mas eu tinha esquecido tudo sobre isso como eu não costumo precisar de uma coisa dessas, mas é bom manter "bookmarks" .. Eu estou feliz que você tenha ressuscitado a idéia .. Aqui está o script ... que realmente só faz o mesmo que você tem feito, mas para o Smplayer (um mplayer GUi)
#
# 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
#
sed -i -e "s/^\(mplayer_additional_options.*\)\( \|=\)\(-ss \+\)\([^ ]\+\)\( .*\)\(-endpos \+\)\([0-9:mb]\+\)\(.*\)/${2}${3}/" $HOME/.config/smplayer/smplayer.ini
(smplayer "$file"
sed -i -e "s/^\(mplayer_additional_options.*\)\( \|=\)\(-ss \+\)\([^ ]\+\)\( .*\)\(-endpos \+\)\([0-9:mb]\+\)\(.*\)/${a}${z}/" $HOME/.config/smplayer/smplayer.ini
)
exit