AKTUALIZACJA-2: Po przesłaniu następującego skryptu przyszło mi do głowy, że innym sposobem ustawienia pozycji czasowych (w GUI) jest użycie edytora napisów (np. gnome-subtitles
). Możesz po prostu kliknąć, aby zaznaczyć pozycję początkową i końcową „napisów fantomowych”; w rzeczywistości możesz wstawić ścieżkę do pliku i komentarze jako „podtytuł” ... Niektóre formaty nie są odpowiednie (np. używając numerów ramek) .. Wygląd „ViPlay Subtitle File”, Power DivX i „Adobe Encore DVD” dobrze.
AKTUALIZACJA-1; nowy skrypt ... Ten skrypt nie da ci zintegrowanej możliwości odtwarzania, ale pozwoli ci wybierać i zapisywać oraz modyfikować czas rozpoczęcia i zakończenia w Smplayer, bez potrzeby wpisywania czegokolwiek.
Informacje te są zapisywane w pliku konfiguracyjnym, którego ścieżki plików można „odtwarzać” indywidualnie lub pogrupować w sekwencji za pomocą innego skryptu (podobnego do mojego skryptu „play” lub podobnie jak skrypty Emacsa).
Działa przy użyciu Seek
okna dialogowego Smplayera ... xmacro
manipuluje oknem (odkryłem, że potrzebuje sleep .3
między poleceniami xmacro) ... Czasy są przechowywane w formacie HH: MM: SS w pliku w ~/.config/smplayer
... Pierwsza linia to Czas rozpoczęcia, drugi wiersz to Czas końcowy, a trzeci wiersz służy do określenia katalogu głównego ... Ten trzeci wiersz jest używany jako opcjonalny wskaźnik ścieżki przez skrypt śledzenia, który modyfikuje ustawienie konfiguracji smplayer przez wypełnianie go przy pomocy -ss
i -endpos
... Plik konfiguracyjny znaczników czasu ma taką samą nazwę jak plik multimedialny, z .smplay
przyrostkiem ...
Więc to nie wszystko, czego chcesz, ale może pomóc ustawić godziny bez pisania ...
Oto skrypt „pobierz znaczniki czasu”:
#!/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
Poniższy skrypt jest moim oryginalnym fragmentem „play”. Jest niezależny od skryptu Avove Timestamp, ale nie wymagałoby wiele, aby je ze sobą współpracować ...
Będzie „napędzał” Smplayera, który korzysta z mplayera wewnętrznie .. jest to przynajmniej normalny GUI, ale twoja lista odtwarzania musiałaby być w edytorze tekstów… i oczywiście już wiesz o tej metodzie :)
Próbowałem tego kilka lat temu, ale zapomniałem o tym, ponieważ często nie potrzebuję czegoś takiego, ale dobrze jest zachować „zakładki”. Cieszę się, że wskrzesiłeś ten pomysł. Oto skrypt ... który naprawdę robi to samo co ty, ale 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
przycisku na swoim pytaniu i poproś o migrację.