CẬP NHẬT-2: Sau khi gửi tập lệnh sau, tôi nhận ra rằng một cách khác để thiết lập các vị trí thời gian (trong GUI) là sử dụng Trình chỉnh sửa phụ đề (ví dụ gnome-subtitles
:). Bạn chỉ có thể nhấp để đánh dấu vị trí bắt đầu và kết thúc của "phụ đề ảo"; thực tế bạn có thể đặt đường dẫn tệp và nhận xét của mình thành "phụ đề" ... Một số định dạng không phù hợp (ví dụ: sử dụng số khung) .. 'Tệp phụ đề ViPlay', Power DivX và 'Adobe Encore DVD' tốt
CẬP NHẬT-1; một tập lệnh mới ... Tập lệnh này sẽ không cung cấp cho bạn khả năng danh sách phát tích hợp, nhưng nó sẽ cho phép bạn chọn và lưu và sửa đổi thời gian bắt đầu và kết thúc trong Smplayer mà không cần phải nhập bất cứ điều gì.
Thông tin này được lưu trong một tệp cấu hình, các đường dẫn tệp có thể được "phát" riêng lẻ hoặc được nhóm theo một chuỗi, thông qua một tập lệnh khác (tương tự như tập lệnh 'play' của tôi hoặc như tập lệnh Emacs của bạn) ..
Nó hoạt động bằng cách sử dụng Seek
hộp thoại của Smplayer ... xmacro
thao tác hộp thoại (Tôi thấy rằng nó cần sleep .3
giữa các lệnh xmacro) ... Thời gian được lưu trữ ở định dạng HH: MM: SS trong một tệp trong ~/.config/smplayer
... Dòng thứ nhất là Thời gian bắt đầu, dòng thứ 2 là Thời gian kết thúc và dòng thứ 3 ở đó để chỉ định thư mục gốc ... Dòng thứ 3 này được sử dụng làm chỉ báo đường dẫn tùy chọn bởi tập lệnh folow-up để sửa đổi cài đặt cấu hình smplayer bằng mồi nó với -ss
và -endpos
... Tệp cấu hình dấu thời gian được đặt tên giống như tệp phương tiện, với .smplay
hậu tố ...
Vì vậy, đây không phải là tất cả những gì bạn muốn, nhưng nó có thể giúp thiết lập thời gian mà không cần gõ ...
Đây là kịch bản 'lấy dấu thời gian':
#!/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
Kịch bản sau đây là bản gốc 'play "ban đầu của tôi. Nó độc lập với kịch bản Timestamp sẵn có, nhưng sẽ không mất nhiều thời gian để chúng hoạt động cùng nhau ...
Nó sẽ 'lái' Smplayer, sử dụng mplayer bên trong .. ít nhất, đó là một GUI bình thường, nhưng danh sách phát của bạn sẽ cần phải có trong trình soạn thảo văn bản của bạn .. và bạn rõ ràng đã biết về phương pháp đó rồi :)
Tôi đã thử điều này một vài năm trước đây, nhưng tôi đã quên tất cả về nó vì tôi thường không cần một thứ như vậy, nhưng thật tốt khi giữ "dấu trang" .. Tôi rất vui vì bạn đã hồi sinh ý tưởng. Đây là kịch bản ... mà thực sự chỉ làm giống như bạn đã làm, nhưng với Smplayer (một người chơi trò chơi 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
nút trên câu hỏi của bạn và yêu cầu nó được di chuyển.