fbplay 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. #!/bin/bash
  2. show_help() {
  3. cat<<USE
  4. USAGE:
  5. fbplay [-t audio-track] <filename or url>
  6. OPTIONS:
  7. --track|-t: audio track number
  8. --subs|-s: subtitle track number
  9. USE
  10. }
  11. error() {
  12. printf 'ERROR: %s\n' "$@" >&2
  13. }
  14. clear_screen() {
  15. # Clear screen, hide cursor, foreground color black
  16. tput clear
  17. tput civis
  18. tput setaf 0
  19. if [ -n "$TMUX" ]; then
  20. tmux set -g status off
  21. fi
  22. }
  23. loading_screen() {
  24. clear_screen
  25. tput sgr0
  26. printf "%s\n%s\n" "$(figlet Loading...)" "$(fortune)" | cowsay -n -f $(ls /usr/share/cowsay/cows/ | shuf -n1)
  27. tput setaf 0
  28. }
  29. reset_screen() {
  30. # Clear screen, show cursor, foreground color reset
  31. tput cnorm
  32. tput sgr0
  33. tput clear
  34. if [ -n "$TMUX" ]; then
  35. tmux set -g status on
  36. fi
  37. }
  38. main() {
  39. if (( $# < 1 )); then
  40. show_help
  41. exit
  42. fi
  43. local audio_track=1
  44. local subtitle_track=1
  45. local media
  46. while :; do
  47. case $1 in
  48. -h|-\?|--help)
  49. show_help
  50. exit
  51. ;;
  52. -s|--subs)
  53. if [[ -n "$2" ]]; then
  54. subtitle_track=$2
  55. shift 2
  56. continue
  57. else
  58. error '"-s|--subs" requires a non-empty option argument.'
  59. exit 1
  60. fi
  61. ;;
  62. --subs=?*)
  63. # Delete everything up to "=" and assign the remainder.
  64. subtitle_track=${1#*=}
  65. ;;
  66. --subs=)
  67. error '"--subs" requires a non-empty option argument.'
  68. exit 1
  69. ;;
  70. -t|--track)
  71. if [[ -n "$2" ]]; then
  72. audio_track=$2
  73. shift 2
  74. continue
  75. else
  76. error '"--track" requires a non-empty option argument.'
  77. exit 1
  78. fi
  79. ;;
  80. --track=?*)
  81. # Delete everything up to "=" and assign the remainder.
  82. audio_track=${1#*=}
  83. ;;
  84. --track=)
  85. error '"--track" requires a non-empty option argument.'
  86. exit 1
  87. ;;
  88. --)
  89. # End of all options.
  90. shift
  91. break
  92. ;;
  93. -?*)
  94. ;;
  95. *)
  96. break
  97. esac
  98. shift
  99. done
  100. if [[ -z "$1" ]]; then
  101. error "A url or a file must be supplied"
  102. exit 1
  103. fi
  104. media="$1"
  105. loading_screen
  106. if [[ ! -f "$media" ]]; then
  107. if [[ "$media" == https://live* ]]; then
  108. media="$(youtube-dl --format hls-3628-0 --get-url "${media}" 2>/dev/null)"
  109. elif [[ "$media" == http* ]]; then
  110. media="$(youtube-dl --format 18 --get-url "${media}" 2>/dev/null)"
  111. else
  112. media="$(youtube-dl --format 18 --get-url "ytsearch:${media}" 2>/dev/null)"
  113. fi
  114. fi
  115. echo "$media" > /tmp/media
  116. clear_screen
  117. # Use global dbus control
  118. OMXPLAYER_DBUS_ADDR="/tmp/omxplayerdbus.global" omxplayer -t"$subtitle_track" -n"$audio_track" -z "$media" | echo ""
  119. reset_screen
  120. }
  121. main "$@"