UPDATE-2: Nachdem ich das folgende Skript eingereicht hatte, wurde mir klar, dass eine andere Möglichkeit zum Einrichten von Zeitpositionen (in einer GUI) die Verwendung eines Untertitel-Editors (z. B. gnome-subtitles
) ist. Sie können einfach klicken, um die Start- und Endpositionen von "Phantom-Untertiteln" zu markieren. Tatsächlich können Sie Ihren Dateipfad und Ihre Kommentare als "Untertitel" eingeben ... Einige Formate sind nicht geeignet (z. B. mit Frame-Nummern). "ViPlay-Untertiteldatei", Power DivX und "Adobe Encore DVD" sehen aus gut.
UPDATE-1; Ein neues Skript ... Mit diesem Skript können Sie keine integrierten Wiedergabelisten erstellen. Sie können jedoch Anfangs- und Endzeiten in Smplayer auswählen, speichern und ändern, ohne etwas eingeben zu müssen.
Diese Informationen werden in einer Konfigurationsdatei gespeichert, deren Dateipfade einzeln oder in einer Sequenz über ein anderes Skript (ähnlich meinem 'Play'-Skript oder wie Ihre Emacs-Skripte) "abgespielt" werden können.
Es funktioniert unter Verwendung des Smplayer- Seek
Dialogs ... xmacro
manipuliert den Dialog (ich habe festgestellt, dass er sleep .3
zwischen xmacro-Befehlen benötigt wird) ... Die Zeiten werden im HH: MM: SS-Format in einer Datei gespeichert in ~/.config/smplayer
... Die erste Zeile ist die Startzeit, die 2. Zeile ist die Endzeit und die 3. Zeile dient zur Angabe eines Stammverzeichnisses ... Diese 3. Zeile wird vom Folgeskript als optionale Pfadanzeige verwendet, mit der eine Smplayer-Konfigurationseinstellung von geändert wird Grundierung mit -ss
und -endpos
... Die Konfigurationsdatei für Zeitstempel hat den gleichen Namen wie die Mediendatei mit dem .smplay
Suffix ...
Das ist also nicht alles, was Sie wollen, aber es kann hilfreich sein, die Zeiten ohne Eingabe festzulegen ...
Hier ist das Skript "Zeitstempel abrufen":
#!/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
Das folgende Skript ist mein ursprüngliches 'play'-Skript. Es ist unabhängig vom avove Timestamp-Skript, aber es würde nicht viel dauern, bis sie zusammenarbeiten ...
Es wird Smplayer "fahren", der mplayer intern verwendet. Es ist zumindest eine normale GUI, aber Ihre Wiedergabeliste muss sich in Ihrem Texteditor befinden. Und Sie kennen diese Methode offensichtlich bereits :)
Ich habe es vor ein paar Jahren versucht, aber ich hatte alles vergessen, da ich so etwas nicht oft brauche, aber es ist gut, "Lesezeichen" zu behalten. Ich bin froh, dass Sie die Idee wiederbelebt haben. Hier ist das Skript ... das wirklich nur das Gleiche tut wie Sie, aber für Smplayer (eine 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
# \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
Schaltfläche für Ihre Frage und fordern Sie die Migration an.