You are not logged in.
Script to author a DVD consisting of multiple video files:
#!/bin/zsh
mkdir -p ~/tmp/dvd/
pushd ~/tmp/dvd/
for file in $@; do
[[ -f "$file" ]] && ffmpeg -i "$file" -target pal-dvd "track-$(basename "$file").mpg"
done
echo "<dvdauthor>" > dvd.xml
echo "<vmgm />" >> dvd.xml
echo "<titleset>" >> dvd.xml
echo "<titles>" >> dvd.xml
echo "<pgc>" >> dvd.xml
for file in $@; do
[[ -f "$file" ]] && echo "<vob file=\"track-$(basename "$file").mpg\" pause=\"5\"/>" >> dvd.xml
done
echo "</pgc>" >> dvd.xml
echo "</titles>" >> dvd.xml
echo "</titleset>" >> dvd.xml
echo "</dvdauthor>" >> dvd.xml
mkdir final
dvdauthor -o final -x dvd.xml
rm dvd.xml *.mpg
popd
Script to strip out all but a specified audio and video stream from a mkv file:
#!/bin/zsh
for movie in *.mkv; do
mkvextract tracks "$movie" $1:"$movie.avi" $2:"$movie.ogg"
mkvmerge -o "$movie-final.mkv" "$movie.avi" "$movie.ogg"
done
Script to manage a todo file in Emacs Org-mode format:
#!/bin/zsh
flag=$1
arg1=$2
arg2=$3
todofile="/home/barrucadu/docs/main.todo"
function append()
{
tags=`echo $arg2 | sed "s/ /: :/"`
echo "* TODO $arg1 :$tags:" >> $todofile
}
function delete()
{
sed -i "$arg1 d" $todofile
}
function finish()
{
sed -i "$arg1 s/^\* TODO/\* ODOT/" $todofile
sed -i "$arg1 s/^\* DONE/\* ENODE/" $todofile
sed -i "$arg1 s/^\* ENODE/\* TODO/" $todofile
sed -i "$arg1 s/^\* ODOT/\* DONE/" $todofile
}
function clean()
{
sed -i "/^\* DONE .*$/d" $todofile
}
function listall()
{
grep -n -e "^\* \(TODO\|DONE\)" $todofile
}
function listtodo()
{
grep -n "^\* TODO" $todofile
}
function listfinished()
{
grep -n "^\* DONE" $todofile
}
function help()
{
echo "Usage: todo [flag] [arg1] [arg2]"
echo
echo "---"
echo
echo "A simple todo-file manager, which manipulates todo files in a subset of the Emacs Org-mode format."
echo
echo "---"
echo
echo "Flags:"
echo " a - Append new entry."
echo " arg1 = Description"
echo " arg2 = Tags"
echo
echo " d - Delete existing entry."
echo " arg1 = Number"
echo
echo " f - Mark entry as finished."
echo " arg1 = Number"
echo
echo " c - Clean finished entries from list."
echo " la - List all entries."
echo " lt - List entries marked as to do."
echo " lf - List entries marked as finished."
echo " h - Display this text."
echo
}
case "$flag" in
a)
append
;;
d)
delete
;;
f)
finish
;;
c)
clean
;;
la)
listall
;;
lt)
listtodo
;;
lf)
listfinished
;;
h)
help
;;
esac
Offline
I made this exact program a while ago...
try pystopwatch
Offline
Here is another one.
find files by its content
findcontent () {
if [ -n "$2" ]; then
find "$1" -type f -exec grep -q "$2" {} \; -print
else
find "./" -type f -exec grep -q "$1" {} \; -print
fi
}
Maybe someone could add that only ascii-files are "inspected"?
Offline
Hi rebugger,
findcontent () {
if [ -n "$2" ]; then
find "$1" -type f -exec grep -qI "$2" {} \; -print
else
find "./" -type f -exec grep -qI "$1" {} \; -print
fi
}
Does that do what you want?
-steve
Offline
Script to strip out all but a specified audio and video stream from a mkv file:
#!/bin/zsh for movie in *.mkv; do mkvextract tracks "$movie" $1:"$movie.avi" $2:"$movie.ogg" mkvmerge -o "$movie-final.mkv" "$movie.avi" "$movie.ogg" done
Excellent! That will be very useful for me, thx
Offline
Hi rebugger,
findcontent () { if [ -n "$2" ]; then find "$1" -type f -exec grep -qI "$2" {} \; -print else find "./" -type f -exec grep -qI "$1" {} \; -print fi }
Does that do what you want?
-steve
Ah, didnt look for that Thanks
Offline
linkmaster03 wrote:I made this exact program a while ago...
try pystopwatch
That takes all the fun out of programming it! I never use the pyGTK version anyways, just the CLI one because it is easier.
Offline
Start/stop/restart daemons with bash-completion:
#!/bin/bash
# rc - start/stop/restart Arch Linux daemons
if [ -n "$2" ]; then
/etc/rc.d/$1 $2; else
echo "rc <init-script> <start/stop/restart>"
echo ""
echo "* Running daemons:"
ls /var/run/daemons
echo ""
fi
The bash environment needs to be told what variables to autocomplete for daemon. Put in ~/.bashrc:
_rc()
{
local cur prev
COMPREPLY=()
cur=${COMP_WORDS[COMP_CWORD]}
prev=${COMP_WORDS[COMP_CWORD-1]}
if [ $COMP_CWORD -eq 1 ]; then
COMPREPLY=( $( compgen -W "$(for i in /etc/rc.d/*; do echo ${i##*/}; done)" $cur ) )
elif [ $COMP_CWORD -eq 2 ]; then
COMPREPLY=( $( compgen -W "start stop restart" $cur ) )
fi
}
complete -o default -F _rc rc
Last edited by Gen2ly (2009-07-25 10:37:54)
Setting Up a Scripting Environment | Proud donor to wikipedia - link
Offline
I am no programmer so you may laugh at my silly program. I find it very useful though. It tries to mimic Thinkpad Presentation Manager for windows. I want to assign it to Fn-F7 but I have not had any luck so far.
With xdialog-gtk2 it even looks pretty
# 2009
# Presentation Manager by Rasmus <rasmus.pank@gmail.com>
Xdialog --backtitle "ThinkPad Presentation Manager for Linux" --title "ThinkPad Presentation Manager for Linux" --menu "Select the appropiate setting" 15 50 5 \
LvdsOnly "LVDS at 1024x768" \
VgaOnly "VGA at 1600x1200" \
Clone "LVDS and VGA cloned at 1024x768" \
Presentation "LVDS and VGA extended at 1024x768" \
Home "LVDS at 1024x768 and VGA at 1600x1200" 2>/tmp/menuitem.$$
menuitem=`cat /tmp/menuitem.$$`
opt=$?
case $menuitem in
LvdsOnly) xrandr --output LVDS --mode 1024x768 --output VGA --off;;
VgaOnly) xrandr --output VGA --mode 1600x1200 --output LVDS --off;;
Clone) xrandr --output LVDS --mode 1024x768 --output VGA --mode 1024x768 --same-as LVDS;;
Presentation) xrandr --output LVDS --mode 1024x768 --output VGA --mode 1024x768 --right-of LVDS;;
Home) xrandr --output LVDS --mode 1024x768 --output VGA --mode 1600x1200 --right-of LVDS --primary;;
esac
Screenshot:
Cheers,
Rasmus
Last edited by Pank (2009-07-22 10:28:55)
Arch x64 on Thinkpad X200s/W530
Offline
@pank hey it looks quite nice - but i'm still using just "xrandr --auto" after plugging in the beamer
Offline
Rebugger, I use it for both beamers and my external monitor. As you see, sometimes I want to have the display cloned and sometimes I want extended desktop. It might be an overkill
Arch x64 on Thinkpad X200s/W530
Offline
Offline
I'm well aware that this following bit can be greatly refined, and I will at some point, but this will display a nicer list of upgrade targets (pacman -Qu), until pacman 3.3 comes out.
LC_ALL=C pacman -Qu |sed -n '/Targets/,/Total Download/p;' | sed 's/Targets ([[:digit:]]\+)://;$d' | sed 's/[[:space:]]\+/\n/g'| grep .|sort| perl -ne 'chomp; @toks = split /-/, $_; $pkgrel = pop @toks; $pkgver = pop @toks; $pkgname = join "-", @toks; print "$pkgname $pkgver-$pkgrel\n"'
My take on this one, a little late since 3.3 is coming soon. Probably needs more testing.
LC_ALL=C pacman -Qu | sed -r "s/^Checking|^$|^Total//;tx;s/Targets \([[:digit:]]+\): |^ +//;s/ [^$]/\n/g;p;:x;d"
Last edited by rson451 (2009-07-23 17:53:30)
archlinux - please read this and this — twice — then ask questions.
--
http://rsontech.net | http://github.com/rson
Offline
Nifty
I had forgotten all about that.
[git] | [AURpkgs] | [arch-games]
Offline
I had 46 updates on my server (due to a lagging mirror) and I wanted to go through and make sure the updates weren't going to brick me. I remembered yours and figured I'd refine it since you never did.
archlinux - please read this and this — twice — then ask questions.
--
http://rsontech.net | http://github.com/rson
Offline
Yeah, I was too lazy. Easier in my mind to wait for 3.3, since it will be like that on its own
[git] | [AURpkgs] | [arch-games]
Offline
target=`date +%s --date="12 Aug 2009 00:00:00"` # date of 9.10 release
source=`date +%s` # today
diff=`expr $target - $source` # difference between dates in seconds
days=`expr $diff / 86400` # convert seconds to days
echo "$days Till event"
This isnt mine, i found it on Ubuntu forums. i added it to my bash rc, so every time i open a terminal it reminds me of the up and comming event
Last edited by markp1989 (2009-07-23 22:58:39)
Desktop: E8400@4ghz - DFI Lanparty JR P45-T2RS - 4gb ddr2 800 - 30gb OCZ Vertex - Geforce 8800 GTS - 2*19" LCD
Server/Media Zotac GeForce 9300-ITX I-E - E5200 - 4gb Ram - 2* ecogreen F2 1.5tb - 1* wd green 500gb - PicoPSU 150xt - rtorrent - xbmc - ipazzport remote - 42" LCD
Offline
Burn iso's to CD or DVD. Does a generic check to see if the CD/DVD has information on it and will blank the disk if you prompt it to.
#!/bin/bash
# burniso - burn iso's to a cd or dvd
# Limitations - generic check for CD/DVD by volume label to see if blank
# - disks that have been written/erased since insertion will
# - not be properly recognized.
# iso filename
ISO=$@
# Text color variables
TXTBLD=$(tput bold)
TXTRED=$(tput setaf 1)
TXTGRN=$(tput setaf 2)
TXTYLW=$(tput setaf 3)
TXTBLU=$(tput setaf 4)
TXTPUR=$(tput setaf 5)
TXTCYN=$(tput setaf 6)
TXTWHT=$(tput setaf 7)
TXTRES=$(tput sgr0)
# Usage - displays if full argument isn't given.
if [[ -z $ISO ]]; then
echo "${TXTBLD}${TXTGRN} * ${TXTRES}${TXTCYN}burniso <filename.iso>${TXTRES} - burn ISO's to cd or dvd.${TXTRES}"
exit
fi
# Test if CD/DVD is blank, and prompt to blank and burn
if [[ -n `hal-device | grep volume_label_` ]]; then
echo "${TXTBLD}${TXTGRN} * ${TXTRES}${TXTRED}Warning:${TXTRES} CD is not blank, erase it? ${TXTYLW}(y/n)${TXTRES}"
read ERASE
if [[ $ERASE == [Yy] ]]; then
cdrecord -v dev=/dev/dvd blank=fast; else
echo "${TXTBLD}${TXTGRN} * ${TXTRES}${TXTCYN}Exiting.${TXTRES}"
exit
fi; else
echo "${TXTBLD}${TXTGRN} * ${TXTRES}${TXTCYN}CD/DVD is blank, continuing.${TXTRES}"
echo "${TXTBLD}${TXTGRN} * ${TXTRES}${TXTRED}Warning:${TXTRES} Disks that have been written to after insertion will not be"
echo " recogized as blank."
echo "${TXTBLD}${TXTGRN} * ${TXTRES}Burn ISO to CD? ${TXTYLW}(y/n)${TXTRES}"
read ANSWER
if [ $ANSWER == [Yy] ]; then
cdrecord -dao -v $ISO; else
echo "${TXTBLD}${TXTGRN} * ${TXTRES}${TXTCYN}Exiting.${TXTRES}"
fi
fi
Setting Up a Scripting Environment | Proud donor to wikipedia - link
Offline
pgrep/pkill frontend
#! /bin/bash
IFS="
"
processes=$(ps -o pid,cmd,pcpu,pmem,ppid,euser -p $(pgrep "$1") 2>/dev/null ) || exit
echo " "$(echo "$processes" | head -n 1)
processes=$(echo "$processes" | tail -n +2)
select process in $processes; do
pid=$(echo $process | sed 's/^ *\([0-9]*\).*$/\1/')
[ -z "$pid" ] && exit
echo "Kill $pid (y/Y/n)?"
read yesno
if [ x$yesno = xy ]; then
kill $pid
elif [ x$yesno = xY ]; then
kill -9 $pid
fi
exit
done
edit:in the sed command, removed leading spaces (I thought echo $process would take care of it)
Last edited by Procyon (2009-07-29 17:25:09)
Offline
I am no programmer so you may laugh at my silly program. I find it very useful though. It tries to mimic Thinkpad Presentation Manager for windows. I want to assign it to Fn-F7 but I have not had any luck so far.
With xdialog-gtk2 it even looks pretty
<snip/>
Cheers,
Rasmus
I hope you don't mind, I rewrote your little script (which i like very much btw) to use zenity (this is purely a personal preference) and not to use a temporary file. I thought you might like it
# 2009
# Presentation Manager by Rasmus <rasmus.pank@gmail.com>
menuitem=`zenity --list --title="Presentation Manager" \
--width=400 --height=330 \
--text="Screen Manager for Linux\nchoose your mode" \
--column="Modename" --column="Description" --separator=";" \
LvdsOnly "LVDS at 1024x768" \
VgaOnly "VGA at 1600x1200" \
Clone "LVDS and VGA cloned at 1024x768" \
Presentation "LVDS and VGA extended at 1024x768" \
Home "LVDS at 1024x768 and VGA at 1600x1200"`
case $menuitem in
LvdsOnly) xrandr --output LVDS --mode 1024x768 --output VGA --off;;
VgaOnly) xrandr --output VGA --mode 1600x1200 --output LVDS --off;;
Clone) xrandr --output LVDS --mode 1024x768 --output VGA --mode 1024x768 --same-as LVDS;;
Presentation) xrandr --output LVDS --mode 1024x768 --output VGA --mode 1024x768 --right-of LVDS;;
Home) xrandr --output LVDS --mode 1024x768 --output VGA --mode 1600x1200 --right-of LVDS --primary;;
esac
cheers Phil
Offline
Pank wrote:I am no programmer so you may laugh at my silly program. I find it very useful though. It tries to mimic Thinkpad Presentation Manager for windows.
I hope you don't mind, I rewrote your little script (which i like very much btw) to use zenity (this is purely a personal preference) and not to use a temporary file. I thought you might like it
I also liked the idea and also wrote my own, in python. Pypres is a small utility for enabling external displays based on presets, intended to be used with the "Presentation" media button found on many laptops.
You need to install an RTFM interface.
Offline
I also liked the idea and also wrote my own, in python. Pypres is a small utility for enabling external displays based on presets, intended to be used with the "Presentation" media button found on many laptops.
neat, this seems to be a neat exercise for everyone to enjoy
soon there will be cropping up examples in brainfuck and whitespace...
Offline
This is a small script I created to have consistent desktop items on my Openbox desktop. It replaces my "show_desktop" keybinding for Openbox. The reason that is is because I can't get the items to register as desktop items, so I have to bring them to the fore, which breaks the state of "Show Desktop: On". If someone can point out a way to not break the Show Desktop On state, please share, because this acts based on previous actions and time, only, and not actions since the show desktop was executed.
#!/bin/bash
#Figure out the current desktop
desktop=$(wmctrl -d | sed -e '/^. -/d' | cut -f 1 -d ' ')
#Determine the lockfile
lockfile="/tmp/."$USER"_desktop_show_lock_$desktop"
#If it exists
if [ -e $lockfile ]; then
#See if it's too old. If so, remove and reexecute
if [ $(( $(date +%s) - $(stat --format="%Y" $lockfile) )) -gt $((1*15)) ]; then
rm $lockfile
$0
exit 0
fi
#If it's not too old, maximize everything on the current desktop
for id in $( wmctrl -l | grep "0x........ $desktop" | cut -f 1 -d ' ' ); do
xdotool windowmap $id
done
rm $lockfile
else
#toggle the builtin show desktop
wmctrl -k on
#Show the newly deemed desktop items
for pattern in $(cat ~/.config/openbox/desktop_items.conf ); do
case pattern in
[^#]*)
for id in $( wmctrl -l | grep "$pattern" | cut -f 1 -d " "); do
xdotool windowactivate $id
done
;;
esac
done
touch $lockfile || xmessage "Touch fail"
fi
exit 0
~
It works with a file at ~/.config/openbox/desktop_items.conf that can use comments and identifies windows via regexps that match against the first item in the WM_NAME field. Mine looks like this:
dclock
#majiq_prayer_times
#majiq_desktop_input
majiq_*
Last edited by majiq (2009-08-03 03:22:33)
Offline
Start/stop/restart daemons with bash-completion:
The bash environment needs to be told what variables to autocomplete for daemon. Put in ~/.bashrc:
_rc() { local cur prev COMPREPLY=() cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]} if [ $COMP_CWORD -eq 1 ]; then COMPREPLY=( $( compgen -W "$(for i in /etc/rc.d/*; do echo ${i##*/}; done)" $cur ) ) elif [ $COMP_CWORD -eq 2 ]; then COMPREPLY=( $( compgen -W "start stop restart" $cur ) ) fi } complete -o default -F _rc rc
Thank you. That is a very cool one. I made a small modification to try and get the available arguments, or fall back to the defaults
_rc()
{
local cur prev usage
COMPREPLY=()
cur=${COMP_WORDS[COMP_CWORD]}
prev=${COMP_WORDS[COMP_CWORD-1]}
if [ $COMP_CWORD -eq 1 ]; then
COMPREPLY=( $( compgen -W "$(for i in /etc/rc.d/*; do echo ${i##*/}; done)" $cur ) )
elif [ $COMP_CWORD -eq 2 ]; then
usage=$(grep 'usage:' /etc/rc.d/$prev | sed -e 's/.*{\(.*\)}.*/\1/' | tr '|' ' ')
if [[ -n $usage ]]; then
COMPREPLY=( $( compgen -W "$usage" $cur ) )
else
COMPREPLY=( $( compgen -W "start stop restart" $cur ) )
fi
fi
}
.]
Offline
PSPMP4: a simple x264 video converter for creating PSP compatible video. It is very good for anime as it works with ASS subtitles too x264-git might be needed because of profiling.
#!/bin/bash
##
### PSPMP4: A simple video encoding tool for PSP video
##
#
###
## Main directory for where your PSP encodes will be stored
#
MP4DIR="/home/maister/psp-encodes"
#
##
###
if [ ! -d "$MP4DIR"/tmp ]
then
mkdir "$MP4DIR"/tmp
fi
function help()
{
echo "Usage: `basename $0` --threads/-t | --input/-i | --bitrate/-b (video bitrate) | --abitrate/-ab (audio bitrate) | --output/-o (basename only) | --size/-s width:height | -x264 \"--options for x264 here\" | -mplayer \"-options for mplayer here\""
echo ""
echo "Example: `basename $0` -i 720p.mkv -o Episode5 -b 800 -ab 160"
echo ""
echo "This script provides sane defaults for encoding PSP video, and should suit most video clips. It is sufficient to just supply an input. A recent version of x264 is required, as this script uses the baseline profile, which is only supported in newer git-versions."
}
## Default values
TAG=`date +%Y%m%d-%T`
FILENAME=""
BITRATE=550
AB=128
THREADS=auto
SCALE=480:272
##
if [ -z "$1" ]
then
help
exit 1
fi
while [ -n "$1" ]
do
case "$1" in
--threads | -t )
shift
THREADS="$1"
shift
;;
--input | -i )
shift
FILENAME="$1"
shift
;;
-b | --bitrate )
shift
BITRATE="$1"
shift
;;
-ab | --abitrate )
shift
AB="$1"
shift
;;
-s | --size )
shift
SCALE="$1"
shift
;;
-x264 )
shift
X264OPTS="$1"
shift
;;
-mplayer )
shift
MPLAYEROPTS="$1"
shift
;;
--output | -o )
shift
TAG="$1"
shift
;;
* )
help
exit 1
;;
esac
done
# Creates fifo-pipes for audio and video
mkfifo "$MP4DIR"/tmp/video$TAG.y4m
mkfifo "$MP4DIR"/tmp/audio$TAG.wav
# Encodes audio
faac -b $AB -w "$MP4DIR"/tmp/audio$TAG.wav &
mplayer $MPLAYEROPTS -vo null -vc null -ao pcm:file="$MP4DIR"/tmp/audio$TAG.wav:fast -nocorrect-pts "$FILENAME" &
sleep 2
#First pass, video
x264 --bitrate $BITRATE --partitions=all --trellis 1 --level 2.1 --profile baseline --threads $THREADS $X264OPTS --pass 1 --stats ".stats$TAG" --output NUL "$MP4DIR"/tmp/video$TAG.y4m &
mplayer -vo yuv4mpeg:file="$MP4DIR"/tmp/video$TAG.y4m -benchmark -vf scale=$SCALE -nosound -vc ffh264, "$FILENAME"
sleep 2
#Second pass, video
x264 --bitrate $BITRATE --partitions=all --trellis 1 --level 2.1 --profile baseline --threads $THREADS $X264OPTS --pass 2 --stats ".stats$TAG" --output "$MP4DIR"/tmp/video$TAG.264 "$MP4DIR"/tmp/video$TAG.y4m &
mplayer -vo yuv4mpeg:file="$MP4DIR"/tmp/video$TAG.y4m -benchmark -vf scale=$SCALE -vc ffh264, $MPLAYEROPTS -nosound "$FILENAME"
sleep 2
#Muxing into PSP-compatible MP4
ffmpeg -y -vcodec copy -acodec copy -i "$MP4DIR"/tmp/video$TAG.264 -i "$MP4DIR"/tmp/audio$TAG.m4a -f psp "$MP4DIR/$TAG.mp4"
rm "$MP4DIR"/tmp/video$TAG*
rm "$MP4DIR"/tmp/audio$TAG*
There is one very weird bug with it that I can't figure out though. When I use this script in two instances, the .264 files become broken :S Works like a charm when there's only one instance though.
EDIT: Owh wait, I think I see it. I use the same ".stats" file for all instances! Fixed the script now.
Also, I find that with a quad core CPU, the video scaling of mplayer is very often the bottleneck, not x264 :s Wish mplayer was multi-threaded If you're going to encode several episodes of something, encode multiple videos at the same time, and use one thread for x264 (-t 1 option). Core i7 just loves this. The threading is insane!
Last edited by Themaister (2009-08-04 04:16:20)
Offline