multimedia_paradise 1.1.344 → 1.2.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (218) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +99 -77
  3. data/bin/audio_player +1 -1
  4. data/bin/extract_images_from_this_video_file +1 -1
  5. data/bin/loop_this_video +1 -1
  6. data/bin/merge_avi_files +1 -1
  7. data/bin/merge_mp3 +1 -1
  8. data/bin/mp3_to_opus +1 -1
  9. data/bin/mpg_to_mp4 +1 -1
  10. data/bin/multimedia_paradise +1 -1
  11. data/bin/to_aiff +2 -5
  12. data/bin/to_flac +7 -0
  13. data/bin/to_mp3 +8 -0
  14. data/bin/to_mp4 +1 -1
  15. data/bin/to_ogg +7 -0
  16. data/bin/verbose_analyse_this_mp3_file_for_id3_tags +1 -1
  17. data/bin/video_codec +1 -1
  18. data/bin/video_thumbnail +1 -1
  19. data/bin/video_to_images +1 -1
  20. data/doc/README.gen +88 -51
  21. data/doc/{CHANGELOG.md → changelog/changelog.md} +8 -6
  22. data/doc/{LINKS.md → links/links.md} +2 -2
  23. data/doc/{MOTIVATION_FOR_THIS_PROJECT.md → motivation_for_the_multimedia_paradise_project/motivation_for_the_multimedia_paradise_project.md} +5 -5
  24. data/doc/todo/todo_for_the_multimedia_paradise_project.md +79 -93
  25. data/lib/multimedia_paradise/actions/actions.rb +224 -0
  26. data/lib/multimedia_paradise/audio/audio_player/audio_player.rb +61 -64
  27. data/lib/multimedia_paradise/audio/audio_tag_reader/audio_tag_reader.rb +17 -8
  28. data/lib/multimedia_paradise/audio/base.rb +0 -5
  29. data/lib/multimedia_paradise/audio/compress.rb +8 -5
  30. data/lib/multimedia_paradise/audio/create_m3u_playlist.rb +7 -11
  31. data/lib/multimedia_paradise/audio/extract_audio/constants.rb +0 -37
  32. data/lib/multimedia_paradise/audio/extract_audio/extract_audio.rb +90 -68
  33. data/lib/multimedia_paradise/audio/file_duration/file_duration.rb +134 -80
  34. data/lib/multimedia_paradise/audio/genres/boogie.rb +1 -6
  35. data/lib/multimedia_paradise/audio/genres/concerts.rb +1 -6
  36. data/lib/multimedia_paradise/audio/genres/constants.rb +1 -1
  37. data/lib/multimedia_paradise/audio/genres/eurodance.rb +1 -6
  38. data/lib/multimedia_paradise/audio/genres/genre.rb +36 -33
  39. data/lib/multimedia_paradise/audio/genres/hip_hop.rb +1 -6
  40. data/lib/multimedia_paradise/audio/genres/italian_songs.rb +1 -6
  41. data/lib/multimedia_paradise/audio/genres/the_1980s.rb +1 -6
  42. data/lib/multimedia_paradise/audio/genres/trance.rb +4 -7
  43. data/lib/multimedia_paradise/audio/lyrics_fetcher.rb +27 -22
  44. data/lib/multimedia_paradise/audio/merge_audio_files.rb +18 -11
  45. data/lib/multimedia_paradise/audio/modify_year_of_audio_file.rb +23 -11
  46. data/lib/multimedia_paradise/audio/n_audio_songs.rb +3 -2
  47. data/lib/multimedia_paradise/audio/play_all_audio_files.rb +41 -16
  48. data/lib/multimedia_paradise/audio/playlist/playlist.rb +163 -123
  49. data/lib/multimedia_paradise/audio/remove_audio.rb +11 -6
  50. data/lib/multimedia_paradise/audio/remove_last_second.rb +2 -3
  51. data/lib/multimedia_paradise/audio/report_missing_id.rb +22 -12
  52. data/lib/multimedia_paradise/audio/streamripper/streamripper_wrapper.rb +7 -5
  53. data/lib/multimedia_paradise/audio/to_mp3.rb +7 -5
  54. data/lib/multimedia_paradise/audio/to_ogg.rb +3 -1
  55. data/lib/multimedia_paradise/audio/wav_to_mp3.rb +5 -5
  56. data/lib/multimedia_paradise/base/base.rb +854 -15
  57. data/lib/multimedia_paradise/base/colours.rb +28 -31
  58. data/lib/multimedia_paradise/base/{commandline_arguments.rb → commandline_arguments_module/commandline_arguments_module.rb} +12 -9
  59. data/lib/multimedia_paradise/colours/colours.rb +4 -1
  60. data/lib/multimedia_paradise/commandline/{menu.rb → commandline.rb} +19 -16
  61. data/lib/multimedia_paradise/constants/constants.rb +504 -14
  62. data/lib/multimedia_paradise/constants/web_constants.rb +2 -4
  63. data/lib/multimedia_paradise/gui/gui_base.rb +2 -2
  64. data/lib/multimedia_paradise/gui/libui/lyrics/lyrics.rb +1 -1
  65. data/lib/multimedia_paradise/gui/libui/simple_play_widget/simple_play_widget.rb +1 -1
  66. data/lib/multimedia_paradise/gui/libui/video_player/video_player.rb +1 -1
  67. data/lib/multimedia_paradise/gui/libui/youtube_channels/youtube_channels.rb +1 -1
  68. data/lib/multimedia_paradise/gui/shared_code/multimedia_converter/multimedia_converter_module.rb +0 -478
  69. data/lib/multimedia_paradise/gui/shared_code/playlist/playlist_module.rb +94 -41
  70. data/lib/multimedia_paradise/gui/shared_code/simple_play_widget/simple_play_widget_module.rb +0 -257
  71. data/lib/multimedia_paradise/gui/universal_widgets/change_metadata_widget/change_metadata_widget.rb +2 -2
  72. data/lib/multimedia_paradise/gui/universal_widgets/information_about_a_mp3_file/information_about_a_mp3_file.rb +1 -1
  73. data/lib/multimedia_paradise/gui/universal_widgets/lyrics/lyrics.rb +1 -1
  74. data/lib/multimedia_paradise/gui/universal_widgets/multimedia_converter/multimedia_converter.rb +589 -0
  75. data/lib/multimedia_paradise/gui/universal_widgets/playlist/playlist.rb +197 -0
  76. data/lib/multimedia_paradise/gui/universal_widgets/radio/radio.rb +1 -1
  77. data/lib/multimedia_paradise/gui/{gtk2 → universal_widgets}/simple_play_widget/README.md +1 -1
  78. data/lib/multimedia_paradise/gui/universal_widgets/simple_play_widget/simple_play_widget.rb +404 -0
  79. data/lib/multimedia_paradise/gui/universal_widgets/tag_mp3_files/tag_mp3_files.rb +3 -6
  80. data/lib/multimedia_paradise/java/Playlist.class +0 -0
  81. data/lib/multimedia_paradise/java/Playlist.java +198 -0
  82. data/lib/multimedia_paradise/multimedia/analyse_multimedia_file.rb +21 -19
  83. data/lib/multimedia_paradise/multimedia/avisynth/avisynth_code.avs +441 -442
  84. data/lib/multimedia_paradise/multimedia/base.rb +0 -18
  85. data/lib/multimedia_paradise/multimedia/chord.rb +1 -1
  86. data/lib/multimedia_paradise/multimedia/cut_multimedia/cut_multimedia.rb +7 -5
  87. data/lib/multimedia_paradise/multimedia/cut_multimedia/evaluate_from_this_file.rb +2 -2
  88. data/lib/multimedia_paradise/multimedia/interactive_shell.rb +22 -3
  89. data/lib/multimedia_paradise/multimedia/merge_multimedia.rb +4 -3
  90. data/lib/multimedia_paradise/multimedia/play_from_this_list.rb +4 -27
  91. data/lib/multimedia_paradise/multimedia/{read_meta_tags.rb → read_meta_tags/read_meta_tags.rb} +14 -19
  92. data/lib/multimedia_paradise/multimedia/start_length_duration.rb +3 -3
  93. data/lib/multimedia_paradise/project/project.rb +8 -4
  94. data/lib/multimedia_paradise/requires/require_the_multimedia_paradise_project.rb +5 -5
  95. data/lib/multimedia_paradise/requires/require_toplevel_methods_files.rb +1 -1
  96. data/lib/multimedia_paradise/sinatra/app.rb +3 -3
  97. data/lib/multimedia_paradise/statistics/README.md +6 -5
  98. data/lib/multimedia_paradise/statistics/video.rb +34 -14
  99. data/lib/multimedia_paradise/{misc → time}/long_format_to_milliseconds_converter.rb +4 -2
  100. data/lib/multimedia_paradise/{misc → time}/milliseconds_to_long_format_converter.rb +2 -2
  101. data/lib/multimedia_paradise/toplevel_methods/audio_related_code.rb +138 -0
  102. data/lib/multimedia_paradise/toplevel_methods/chop_into_segments_of_n_seconds_size.rb +2 -2
  103. data/lib/multimedia_paradise/{conversions → toplevel_methods}/conversions.rb +140 -48
  104. data/lib/multimedia_paradise/toplevel_methods/copy_and_merge_this_video_n_times.rb +5 -5
  105. data/lib/multimedia_paradise/toplevel_methods/create_video_from_this_audio.rb +7 -6
  106. data/lib/multimedia_paradise/toplevel_methods/cut_from_to.rb +2 -2
  107. data/lib/multimedia_paradise/toplevel_methods/denoise.rb +2 -2
  108. data/lib/multimedia_paradise/toplevel_methods/deshake.rb +3 -6
  109. data/lib/multimedia_paradise/toplevel_methods/{output_directory.rb → directory_related_code.rb} +38 -1
  110. data/lib/multimedia_paradise/toplevel_methods/encode_this_video.rb +8 -4
  111. data/lib/multimedia_paradise/toplevel_methods/esystem.rb +43 -4
  112. data/lib/multimedia_paradise/{ffmpeg → toplevel_methods}/ffmpeg.rb +200 -193
  113. data/lib/multimedia_paradise/toplevel_methods/{files_and_directories.rb → files_related_code.rb} +19 -56
  114. data/lib/multimedia_paradise/toplevel_methods/flip_and_rotate.rb +3 -3
  115. data/lib/multimedia_paradise/toplevel_methods/is_audio_file_is_video_file_is_image_file_is_multimedia_file.rb +115 -0
  116. data/lib/multimedia_paradise/toplevel_methods/is_on_roebe.rb +1 -1
  117. data/lib/multimedia_paradise/toplevel_methods/{merge_multimedia_file.rb → merge.rb} +98 -4
  118. data/lib/multimedia_paradise/toplevel_methods/opn.rb +5 -4
  119. data/lib/multimedia_paradise/toplevel_methods/player_in_use.rb +14 -7
  120. data/lib/multimedia_paradise/toplevel_methods/query_the_audio_codec_of_this_file.rb +4 -3
  121. data/lib/multimedia_paradise/toplevel_methods/radio.rb +1 -3
  122. data/lib/multimedia_paradise/toplevel_methods/return_all_video_files.rb +4 -4
  123. data/lib/multimedia_paradise/toplevel_methods/return_path_to_random_simpsons_video_file.rb +1 -1
  124. data/lib/multimedia_paradise/toplevel_methods/return_random_video_file_from_the_video_collection.rb +9 -7
  125. data/lib/multimedia_paradise/toplevel_methods/scale_video.rb +3 -4
  126. data/lib/multimedia_paradise/toplevel_methods/set_title_of.rb +6 -6
  127. data/lib/multimedia_paradise/{help/help.rb → toplevel_methods/show_help.rb} +14 -8
  128. data/lib/multimedia_paradise/toplevel_methods/slow_down_this_video_file.rb +2 -3
  129. data/lib/multimedia_paradise/toplevel_methods/start_screencast.rb +3 -2
  130. data/lib/multimedia_paradise/toplevel_methods/{misc.rb → toplevel_methods.rb} +485 -527
  131. data/lib/multimedia_paradise/toplevel_methods/total_duration.rb +4 -3
  132. data/lib/multimedia_paradise/toplevel_methods/use_lame_codec.rb +1 -2
  133. data/lib/multimedia_paradise/toplevel_methods/video_dataset.rb +1 -1
  134. data/lib/multimedia_paradise/version/version.rb +2 -2
  135. data/lib/multimedia_paradise/video/all_videos.rb +12 -19
  136. data/lib/multimedia_paradise/video/check_numbers.rb +76 -32
  137. data/lib/multimedia_paradise/video/columbo/columbo.rb +36 -14
  138. data/lib/multimedia_paradise/video/guess_video_name.rb +2 -10
  139. data/lib/multimedia_paradise/video/mike_hammer/mike_hammer.rb +2 -2
  140. data/lib/multimedia_paradise/video/missing_video_files/missing_video_files.rb +1 -9
  141. data/lib/multimedia_paradise/video/movie_searcher.rb +2 -10
  142. data/lib/multimedia_paradise/video/mplayer_wrapper.rb +1 -9
  143. data/lib/multimedia_paradise/video/random_video.rb +1 -2
  144. data/lib/multimedia_paradise/video/registered_video_file.rb +2 -10
  145. data/lib/multimedia_paradise/video/report_local_videos.rb +1 -9
  146. data/lib/multimedia_paradise/video/simpsons.rb +2 -10
  147. data/lib/multimedia_paradise/video/smart_animals/smart_animals.rb +10 -8
  148. data/lib/multimedia_paradise/video/speed_up_video.rb +28 -10
  149. data/lib/multimedia_paradise/video/store_available_video_files.rb +49 -33
  150. data/lib/multimedia_paradise/video/the_simpsons/README.md +0 -0
  151. data/lib/multimedia_paradise/video/the_simpsons/good_the_simpsons_episodes.rb +8 -8
  152. data/lib/multimedia_paradise/video/the_simpsons/the_simpsons.rb +14 -10
  153. data/lib/multimedia_paradise/video/video_information.rb +55 -49
  154. data/lib/multimedia_paradise/{configuration → yaml/configuration}/play_zoomed.yml +0 -0
  155. data/lib/multimedia_paradise/yaml/{playlist.yml → playlist/playlist.yml} +14 -15
  156. data/lib/multimedia_paradise/yaml/video/video.yml +1 -1
  157. data/lib/multimedia_paradise/yaml/video_collection/video_collection.yml +34 -32
  158. data/lib/multimedia_paradise/yaml/youtube/alltagsgeschichte/alltagsgeschichte.yml +61 -11
  159. data/lib/multimedia_paradise/yaml/youtube/songs/songs.yml +5 -3
  160. data/multimedia_paradise.gemspec +1 -1
  161. data/test/testing_audio_player.rb +3 -3
  162. data/test/testing_file_duration.rb +5 -5
  163. metadata +45 -76
  164. data/lib/multimedia_paradise/audio/file_duration/constants.rb +0 -53
  165. data/lib/multimedia_paradise/audio/waveform/class.rb +0 -341
  166. data/lib/multimedia_paradise/audio/waveform/constants.rb +0 -38
  167. data/lib/multimedia_paradise/audio/waveform/log.rb +0 -101
  168. data/lib/multimedia_paradise/base/constants.rb +0 -19
  169. data/lib/multimedia_paradise/base/encoding.rb +0 -31
  170. data/lib/multimedia_paradise/base/misc.rb +0 -665
  171. data/lib/multimedia_paradise/base/namespace.rb +0 -36
  172. data/lib/multimedia_paradise/base/time.rb +0 -25
  173. data/lib/multimedia_paradise/constants/conversions.rb +0 -62
  174. data/lib/multimedia_paradise/constants/directory_constants.rb +0 -139
  175. data/lib/multimedia_paradise/constants/encodings.rb +0 -26
  176. data/lib/multimedia_paradise/constants/file_constants.rb +0 -176
  177. data/lib/multimedia_paradise/constants/misc.rb +0 -80
  178. data/lib/multimedia_paradise/constants/my_video_directory.rb +0 -30
  179. data/lib/multimedia_paradise/constants/namespace.rb +0 -14
  180. data/lib/multimedia_paradise/constants/newline.rb +0 -14
  181. data/lib/multimedia_paradise/constants/video_filetypes.rb +0 -27
  182. data/lib/multimedia_paradise/conversions/README.md +0 -2
  183. data/lib/multimedia_paradise/ffmpeg/README.md +0 -2
  184. data/lib/multimedia_paradise/gui/gtk2/multimedia_converter/multimedia_converter.rb +0 -33
  185. data/lib/multimedia_paradise/gui/gtk2/notebook.rb +0 -144
  186. data/lib/multimedia_paradise/gui/gtk2/play_video_from_my_collection/play_video_from_my_collection.rb +0 -43
  187. data/lib/multimedia_paradise/gui/gtk2/simple_play_widget/simple_play_widget.rb +0 -40
  188. data/lib/multimedia_paradise/gui/gtk2/widget_increase_or_decrease_audio/widget_increase_or_decrease_audio.rb +0 -42
  189. data/lib/multimedia_paradise/gui/gtk2/youtube_downloader/youtube_downloader.rb +0 -32
  190. data/lib/multimedia_paradise/gui/gtk3/lyrics/lyrics.rb +0 -0
  191. data/lib/multimedia_paradise/gui/gtk3/multimedia_converter/multimedia_converter.rb +0 -34
  192. data/lib/multimedia_paradise/gui/gtk3/playlist/playlist.rb +0 -34
  193. data/lib/multimedia_paradise/gui/gtk3/simple_play_widget/simple_play_widget.rb +0 -38
  194. data/lib/multimedia_paradise/toplevel_methods/analyze_audio_stream.rb +0 -31
  195. data/lib/multimedia_paradise/toplevel_methods/codecs.rb +0 -50
  196. data/lib/multimedia_paradise/toplevel_methods/copy_file.rb +0 -18
  197. data/lib/multimedia_paradise/toplevel_methods/delay_audio.rb +0 -31
  198. data/lib/multimedia_paradise/toplevel_methods/ensure_that_the_output_directory_exists.rb +0 -27
  199. data/lib/multimedia_paradise/toplevel_methods/has_audio.rb +0 -48
  200. data/lib/multimedia_paradise/toplevel_methods/increase_volume_of_this_audio_file.rb +0 -61
  201. data/lib/multimedia_paradise/toplevel_methods/is_a_multimedia_file.rb +0 -27
  202. data/lib/multimedia_paradise/toplevel_methods/is_audio_file.rb +0 -27
  203. data/lib/multimedia_paradise/toplevel_methods/is_image_file.rb +0 -31
  204. data/lib/multimedia_paradise/toplevel_methods/is_video_file.rb +0 -62
  205. data/lib/multimedia_paradise/toplevel_methods/merge_these_videos.rb +0 -106
  206. data/lib/multimedia_paradise/toplevel_methods/run_sys_command.rb +0 -30
  207. data/lib/multimedia_paradise/toplevel_methods/to_flac.rb +0 -30
  208. data/lib/multimedia_paradise/toplevel_methods/to_mp4.rb +0 -24
  209. /data/doc/{MergingVideoLectures.md → merging_video_lectures/merging_video_lectures.md} +0 -0
  210. /data/doc/{Readme_for_the_cut_audio_component.md → readme_for_the_cut_audio_component/Readme_for_the_cut_audio_component.md} +0 -0
  211. /data/lib/multimedia_paradise/yaml/{audio_formats.yml → audio_formats/audio_formats.yml} +0 -0
  212. /data/lib/multimedia_paradise/yaml/{image_formats.yml → image_formats/image_formats.yml} +0 -0
  213. /data/lib/multimedia_paradise/yaml/{lyrics.yml → lyrics/lyrics.yml} +0 -0
  214. /data/lib/multimedia_paradise/yaml/{music_genres.yml → music_genres/music_genres.yml} +0 -0
  215. /data/lib/multimedia_paradise/yaml/{song_tags.yml → song_tags/song_tags.yml} +0 -0
  216. /data/lib/multimedia_paradise/yaml/{use_this_video_player.yml → use_this_video_player/use_this_video_player.yml} +0 -0
  217. /data/lib/multimedia_paradise/yaml/{video_encoding_settings.yml → video_encoding_settings/video_encoding_settings.yml} +0 -0
  218. /data/lib/multimedia_paradise/yaml/{video_filter_aliases.yml → video_filter_aliases/video_filter_aliases.yml} +0 -0
@@ -7,10 +7,10 @@
7
7
  # =========================================================================== #
8
8
  # require 'multimedia_paradise/toplevel_methods/flip_and_rotate.rb'
9
9
  # =========================================================================== #
10
- require 'multimedia_paradise/ffmpeg/ffmpeg.rb'
11
-
12
10
  module MultimediaParadise
13
11
 
12
+ require 'multimedia_paradise/toplevel_methods/ffmpeg.rb'
13
+
14
14
  # ========================================================================= #
15
15
  # === MultimediaParadise.vertical_flip
16
16
  #
@@ -55,4 +55,4 @@ end
55
55
  if __FILE__ == $PROGRAM_NAME
56
56
  # MultimediaParadise.horizontal_flip(ARGV)
57
57
  MultimediaParadise.vertical_flip(ARGV)
58
- end # horizontal_flip
58
+ end # horizontalflip
@@ -0,0 +1,115 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'multimedia_paradise/toplevel_methods/is_audio_file_is_video_file_is_image_file_is_multimedia_file.rb'
6
+ # =========================================================================== #
7
+ module MultimediaParadise
8
+
9
+ require 'multimedia_paradise/constants/constants.rb'
10
+
11
+ # ========================================================================= #
12
+ # === MultimediaParadise.is_image_file?
13
+ #
14
+ # This method will return true or false depending on whether the
15
+ # input is assumed to be an image file or whether it is not.
16
+ # ========================================================================= #
17
+ def self.is_image_file?(i)
18
+ _ = false
19
+ extname = File.extname(i).delete('.') # Will be something such as "mp3".
20
+ case extname
21
+ when *IMAGE_FORMATS
22
+ _ = true
23
+ end
24
+ return _
25
+ end; self.instance_eval { alias is_an_image_file? is_image_file? } # === MultimediaParadise.is_an_image_file?
26
+
27
+ # ========================================================================= #
28
+ # === MultimediaParadise.is_audio_file?
29
+ #
30
+ # This method will return true or false depending on whether the
31
+ # input is assumed to be an audio file or whether it is not.
32
+ # ========================================================================= #
33
+ def self.is_audio_file?(i)
34
+ _ = false
35
+ extname = File.extname(i).delete('.') # Will be something such as "mp3".
36
+ case extname
37
+ when *AUDIO_FORMATS
38
+ _ = true
39
+ end
40
+ return _
41
+ end; self.instance_eval { alias is_an_audio_file? is_audio_file? } # === MultimediaParadise.is_an_audio_file?
42
+
43
+ # ========================================================================= #
44
+ # === MultimediaParadise.is_video_file?
45
+ #
46
+ # This method will return true or false depending on whether the
47
+ # input is assumed to be a video file or whether it is not.
48
+ # ========================================================================= #
49
+ def self.is_video_file?(i)
50
+ _ = false
51
+ extname = File.extname(i).delete('.')
52
+ case extname
53
+ when *ARRAY_VIDEO_FILETYPES
54
+ _ = true
55
+ end
56
+ return _
57
+ end; self.instance_eval { alias is_video? is_video_file? } # === MultimediaParadise.is_video?
58
+ self.instance_eval { alias is_a_video_file? is_video_file? } # === MultimediaParadise.is_a_video_file?
59
+ self.instance_eval { alias is_this_a_video_file? is_video_file? } # === MultimediaParadise.is_this_a_video_file?
60
+
61
+ # ========================================================================= #
62
+ # === MultimediaParadise.filter_for_video_files_from
63
+ #
64
+ # This method accepts as input an Array. That array will then be
65
+ # filtered to include ONLY video files.
66
+ # ========================================================================= #
67
+ def self.filter_for_video_files_from(
68
+ this_directory
69
+ )
70
+ if this_directory.is_a?(String) and File.directory?(this_directory)
71
+ this_directory = Dir["#{this_directory}/*"]
72
+ end
73
+ this_directory.select {|entry|
74
+ is_video_file? entry
75
+ }
76
+ end
77
+
78
+ # ========================================================================= #
79
+ # === MultimediaParadise.filter_for_video_files
80
+ #
81
+ # This filter will only return video files.
82
+ # ========================================================================= #
83
+ def self.filter_for_video_files(array)
84
+ array.select {|entry| is_video_file?(entry) }
85
+ end
86
+
87
+ # ========================================================================= #
88
+ # === filter_for_video_files
89
+ # ========================================================================= #
90
+ def filter_for_video_files(i)
91
+ MultimediaParadise.filter_for_video_files(i)
92
+ end
93
+
94
+ # ========================================================================= #
95
+ # === MultimediaParadise.is_a_multimedia_file?
96
+ #
97
+ # Determine whether a given file is a multimedia file or whether
98
+ # it is not.
99
+ #
100
+ # Usage example:
101
+ #
102
+ # MultimediaParadise.is_a_multimedia_file? 'foobar.avi'
103
+ #
104
+ # ========================================================================= #
105
+ def self.is_a_multimedia_file?(i)
106
+ i = File.extname(i).delete('.') if i
107
+ ARRAY_MULTIMEDIA_FILETYPES.include? i
108
+ end; self.instance_eval { alias is_multimedia_file? is_a_multimedia_file? } # === MultimediaParadise.is_multimedia_file?
109
+
110
+ end
111
+
112
+ if __FILE__ == $PROGRAM_NAME
113
+ alias e puts
114
+ e MultimediaParadise.is_image_file?('foobar.png')
115
+ end
@@ -11,7 +11,7 @@ module MultimediaParadise
11
11
  # === MultimediaParadise.is_on_roebe?
12
12
  # ========================================================================= #
13
13
  def self.is_on_roebe?
14
- ENV['IS_ROEBE'] == '1'
14
+ ENV['IS_ROEBE'].to_s == '1'
15
15
  end
16
16
 
17
17
  end
@@ -2,7 +2,7 @@
2
2
  # Encoding: UTF-8
3
3
  # frozen_string_literal: true
4
4
  # =========================================================================== #
5
- # require 'multimedia_paradise/toplevel_methods/merge_multimedia_file.rb'
5
+ # require 'multimedia_paradise/toplevel_methods/merge.rb'
6
6
  # =========================================================================== #
7
7
  # MultimediaParadise.merge_mp3(:default, '*mp3')
8
8
  # MultimediaParadise.merge_avi_files
@@ -11,7 +11,97 @@ module MultimediaParadise
11
11
 
12
12
  require 'multimedia_paradise/colours/colours.rb'
13
13
  require 'multimedia_paradise/toplevel_methods/e.rb'
14
- require 'multimedia_paradise/toplevel_methods/merge_these_videos.rb'
14
+ require 'multimedia_paradise/toplevel_methods/esystem.rb'
15
+ require 'multimedia_paradise/toplevel_methods/directory_related_code.rb'
16
+
17
+ # ========================================================================= #
18
+ # === MultimediaParadise.merge_these_videos
19
+ #
20
+ # This method can be used to merge multiple videos together. The
21
+ # "concat" option of ffmpeg will be used for this merge-action.
22
+ #
23
+ # Ideally the video-files that are given as input to this method
24
+ # should all use the same resolution and the same frame rate.
25
+ #
26
+ # There are several ways how to go about this. A simple one is to
27
+ # simply create a text-file that can then tell ffmpeg which files
28
+ # are to be merged together. This is the strategy that this
29
+ # method will presently (2018) pursue.
30
+ #
31
+ # The ffmpeg-concact options are explained in more detail
32
+ # here:
33
+ #
34
+ # https://trac.ffmpeg.org/wiki/Concatenate
35
+ #
36
+ # Specific invocation examples for this method:
37
+ #
38
+ # MultimediaParadise.merge_these_videos('foo.mp4','bar.mp4')
39
+ # MultimediaParadise.merge('foo.mp4','bar.mp4')
40
+ #
41
+ # ========================================================================= #
42
+ def self.merge_these_videos(
43
+ *i
44
+ )
45
+ i = [i].flatten.map(&:strip)
46
+ e ::Colours.rev+
47
+ ::Colours.steelblue(i.size.to_s)+
48
+ ' video files will be merged next.'
49
+ new_file_extension = nil
50
+ # ======================================================================= #
51
+ # We will store into the following text-file:
52
+ # ======================================================================= #
53
+ text_file = "#{log_directory?}file_that_keeps_track_of_the_videos.md"
54
+ # ======================================================================= #
55
+ # Make sure that the base directory exists:
56
+ # ======================================================================= #
57
+ unless File.directory?(File.dirname(text_file))
58
+ mkdir(File.dirname(text_file))
59
+ end
60
+ File.delete(text_file) if File.exist? text_file
61
+ name_of_the_output_file = 'merged_files_'.dup
62
+ e 'The video files will be analyzed. A log file will be stored at:'
63
+ e
64
+ e " #{sfile(text_file)}"
65
+ e
66
+ i.each {|this_video_file|
67
+ # ===================================================================== #
68
+ # We have to obtain the absolute file path:
69
+ # ===================================================================== #
70
+ this_video_file = File.absolute_path(this_video_file)
71
+ File.open(text_file, 'a+') { |file|
72
+ file.write("file #{this_video_file}\n")
73
+ }
74
+ raw_name = this_video_file.sub(/#{File.extname(this_video_file)}$/,'').dup
75
+ name_of_the_output_file << File.basename(raw_name).delete('/')
76
+ new_file_extension = File.extname(this_video_file).delete('.')
77
+ }
78
+ # ======================================================================= #
79
+ # Ensure that the file name is not too long, thus truncating.
80
+ # ======================================================================= #
81
+ if name_of_the_output_file.size > 200
82
+ name_of_the_output_file = name_of_the_output_file[0 .. 200]
83
+ end
84
+ name_of_the_output_file << '.'+new_file_extension
85
+ name_of_the_output_file = '"'+name_of_the_output_file.
86
+ delete("'")+'"'
87
+ # ======================================================================= #
88
+ # Build up the string for ffmpeg next. The option -y is used to
89
+ # overwrite automatically.
90
+ # ======================================================================= #
91
+ _ = 'ffmpeg '\
92
+ '-y '\
93
+ '-safe 0 '\
94
+ '-f concat '\
95
+ '-i '+text_file+
96
+ ' -c copy '+name_of_the_output_file
97
+ esystem _
98
+ e
99
+ e 'Ouput stored at:'
100
+ e
101
+ e " #{sfile(name_of_the_output_file)}"
102
+ e
103
+ return name_of_the_output_file # <- And also return it here.
104
+ end; self.instance_eval { alias merge merge_these_videos } # === MultimediaParadise.merge
15
105
 
16
106
  # ========================================================================= #
17
107
  # === MultimediaParadise.merge_multimedia_file (merge tag)
@@ -36,7 +126,7 @@ module MultimediaParadise
36
126
  extname = nil
37
127
  )
38
128
 
39
- require 'multimedia_paradise/conversions/conversions.rb'
129
+ require 'multimedia_paradise/toplevel_methods/conversions.rb'
40
130
 
41
131
  if input_files.is_a?(String) and input_files.include? '*'
42
132
  input_files = Dir[input_files]
@@ -328,4 +418,8 @@ module MultimediaParadise
328
418
  run_sys_command _
329
419
  end
330
420
 
331
- end
421
+ end
422
+
423
+ if __FILE__ == $PROGRAM_NAME
424
+ MultimediaParadise.merge_these_videos(ARGV)
425
+ end # merge_these_videos foo.mp4 bar.mp4
@@ -4,19 +4,20 @@
4
4
  # =========================================================================== #
5
5
  # require 'multimedia_paradise/toplevel_methods/opn.rb'
6
6
  # =========================================================================== #
7
- require 'multimedia_paradise/constants/namespace.rb'
8
-
9
7
  module MultimediaParadise
10
8
 
9
+ require 'multimedia_paradise/constants/constants.rb'
10
+
11
11
  begin
12
- require 'opn'
12
+ require 'opn' # Failsafe require of opn.
13
13
  rescue LoadError; end
14
14
 
15
15
  # ========================================================================= #
16
16
  # === MultimediaParadise.opnn
17
17
  # ========================================================================= #
18
18
  def self.opnn(
19
- i = { namespace: NAMESPACE }, &block
19
+ i = { namespace: NAMESPACE },
20
+ &block
20
21
  )
21
22
  Opn.opn(i, &block) if Object.const_defined? :Opn
22
23
  end; self.instance_eval { alias opn opnn } # === MultimediaParadise.opn
@@ -6,6 +6,7 @@
6
6
  # =========================================================================== #
7
7
  module MultimediaParadise
8
8
 
9
+ require 'multimedia_paradise/constants/constants.rb'
9
10
  require 'multimedia_paradise/toplevel_methods/is_on_roebe.rb'
10
11
 
11
12
  # ========================================================================= #
@@ -22,9 +23,9 @@ module MultimediaParadise
22
23
  # This constant determines which video player to use. An environment
23
24
  # variable can overrule this, called USE_THIS_VIDEO_PLAYER.
24
25
  #
25
- # Since as of December 2018 this should no longer be the primary
26
- # means to set the multimedia-player in use for the project -
27
- # instead, make use of MultimediaParadise.set_player_in_use().
26
+ # Since as of December 2018 this should no longer be the primary means
27
+ # to set the multimedia-player in use for the project - instead, make
28
+ # use of MultimediaParadise.set_player_in_use().
28
29
  # ========================================================================= #
29
30
  if ENV.has_key? 'USE_THIS_VIDEO_PLAYER'
30
31
  WHICH_VIDEO_PLAYER_TO_USE = "#{ENV['USE_THIS_VIDEO_PLAYER']}"
@@ -55,12 +56,13 @@ module MultimediaParadise
55
56
  )
56
57
  i = i.to_s.dup.strip # Make sure we have a String past this point.
57
58
  case i
58
- when 'default',''
59
+ when 'default','' # This is the default entry point.
59
60
  # ====================================================================== #
60
61
  # Determine the default video-player in use for the MultimediaParadise
61
62
  # project. A constant keeps track of this value. Since as of June
62
63
  # 2020 a .yml file exists, and it will be used if it is available
63
- # AND if we are on a roebe system..
64
+ # AND if we are on a roebe system - and it can be found too, hence
65
+ # the File.exist?() check.
64
66
  # ====================================================================== #
65
67
  if File.exist?(FILE_USE_THIS_VIDEO_PLAYER) and is_on_roebe?
66
68
  i = YAML.load_file(FILE_USE_THIS_VIDEO_PLAYER)
@@ -68,13 +70,18 @@ module MultimediaParadise
68
70
  i = WHICH_VIDEO_PLAYER_TO_USE
69
71
  end
70
72
  end
71
- @player_in_use = i
73
+ @player_in_use = i # Assign it here.
72
74
  end; self.instance_eval { alias set_use_this_multimedia_player set_player_in_use } # === MultimediaParadise.set_use_this_multimedia_player
73
75
 
74
76
  # ========================================================================= #
75
77
  # And call it at once with the default, to have a proper state for the
76
78
  # variable.
77
79
  # ========================================================================= #
78
- set_player_in_use
80
+ set_player_in_use(:default)
79
81
 
82
+ end
83
+
84
+ if __FILE__ == $PROGRAM_NAME
85
+ alias e puts
86
+ e MultimediaParadise.player_in_use?
80
87
  end
@@ -2,10 +2,10 @@
2
2
  # Encoding: UTF-8
3
3
  # frozen_string_literal: true
4
4
  # =========================================================================== #
5
- require 'multimedia_paradise/ffmpeg/ffmpeg.rb'
6
-
7
5
  module MultimediaParadise
8
6
 
7
+ require 'multimedia_paradise/toplevel_methods/ffmpeg.rb'
8
+
9
9
  # ========================================================================= #
10
10
  # === MultimediaParadise.query_the_audio_codec_of_this_file
11
11
  #
@@ -20,5 +20,6 @@ module MultimediaParadise
20
20
  end
21
21
 
22
22
  if __FILE__ == $PROGRAM_NAME
23
- puts MultimediaParadise.query_the_audio_codec_of_this_file(ARGV)
23
+ alias e puts
24
+ e MultimediaParadise.query_the_audio_codec_of_this_file(ARGV)
24
25
  end # query_the_audio_codec_of_this_file /Depot/j/foobar.mp3
@@ -11,8 +11,6 @@
11
11
  module MultimediaParadise
12
12
 
13
13
  require 'multimedia_paradise/constants/constants.rb'
14
- require 'multimedia_paradise/constants/encodings.rb'
15
- require 'multimedia_paradise/constants/file_constants.rb'
16
14
  require 'multimedia_paradise/colours/colours.rb'
17
15
  require 'multimedia_paradise/toplevel_methods/e.rb'
18
16
  require 'multimedia_paradise/toplevel_methods/esystem.rb'
@@ -378,4 +376,4 @@ if __FILE__ == $PROGRAM_NAME
378
376
  e
379
377
  MultimediaParadise.play_radio(use_this_radio_station)
380
378
  # MultimediaParadise.play_radio_from_this_url 'https://stream.laut.fm/magicfm'
381
- end # display_radio_stations http://listen.radionomy.com:80/YourTranceRadio
379
+ end # displayradiostations http://listen.radionomy.com:80/YourTranceRadio
@@ -8,8 +8,8 @@
8
8
  module MultimediaParadise
9
9
 
10
10
  require 'yaml'
11
- require 'multimedia_paradise/constants/file_constants.rb'
12
- require 'multimedia_paradise/toplevel_methods/is_video_file.rb'
11
+ require 'multimedia_paradise/constants/constants.rb'
12
+ require 'multimedia_paradise/toplevel_methods/is_audio_file_is_video_file_is_image_file_is_multimedia_file.rb'
13
13
 
14
14
  # ========================================================================= #
15
15
  # === MultimediaParadise.available_video_files
@@ -24,8 +24,8 @@ module MultimediaParadise
24
24
  # ========================================================================= #
25
25
  # === MultimediaParadise.return_all_video_files
26
26
  #
27
- # Use this method if you wish to return all video files registered
28
- # in the main video_collection yaml file.
27
+ # This method can be used for returning (obtaining) all video files
28
+ # registered in the main video_collection yaml file.
29
29
  #
30
30
  # This will return a Hash that has entries similar to this one here:
31
31
  #
@@ -7,7 +7,7 @@
7
7
  # =========================================================================== #
8
8
  module MultimediaParadise
9
9
 
10
- require 'multimedia_paradise/constants/directory_constants.rb'
10
+ require 'multimedia_paradise/constants/constants.rb'
11
11
  require 'multimedia_paradise/toplevel_methods/esystem.rb'
12
12
  require 'multimedia_paradise/toplevel_methods/player_in_use.rb'
13
13
 
@@ -5,12 +5,11 @@
5
5
  # require 'multimedia_paradise/toplevel_methods/return_random_video_file_from_the_video_collection.rb'
6
6
  # MultimediaParadise.return_random_video
7
7
  # =========================================================================== #
8
-
9
8
  module MultimediaParadise
10
9
 
11
- require 'multimedia_paradise/constants/file_constants.rb'
10
+ require 'multimedia_paradise/constants/constants.rb'
12
11
  require 'multimedia_paradise/toplevel_methods/e.rb'
13
- require 'multimedia_paradise/toplevel_methods/is_video_file.rb'
12
+ require 'multimedia_paradise/toplevel_methods/is_audio_file_is_video_file_is_image_file_is_multimedia_file.rb'
14
13
  require 'multimedia_paradise/toplevel_methods/return_all_video_files.rb'
15
14
 
16
15
  # ========================================================================= #
@@ -27,6 +26,9 @@ module MultimediaParadise
27
26
  shall_we_notify_the_user_if_the_video_file_is_missing = false
28
27
  )
29
28
  case shall_we_notify_the_user_if_the_video_file_is_missing
29
+ # ======================================================================= #
30
+ # === :notify_when_missing
31
+ # ======================================================================= #
30
32
  when :notify_when_missing
31
33
  shall_we_notify_the_user_if_the_video_file_is_missing = true
32
34
  end
@@ -38,7 +40,7 @@ module MultimediaParadise
38
40
  keys = video_collection.keys
39
41
  sample_key = keys.sample
40
42
  target = video_collection[sample_key]['title'] # This is the sample.
41
- path = ::MultimediaParadise.realvids_directory?+'*'+target.tr(' ','*')+'*'
43
+ path = realvids_directory?+'*'+target.tr(' ','*')+'*'
42
44
  result = Dir[path]
43
45
  if result.is_a?(Array) and (result.size > 1)
44
46
  # ===================================================================== #
@@ -48,7 +50,7 @@ module MultimediaParadise
48
50
  result = is_video_file?(result)
49
51
  end
50
52
  if result.empty? and shall_we_notify_the_user_if_the_video_file_is_missing
51
- e 'No file could be found at '+path+'.'
53
+ e "No file could be found at `#{path}`."
52
54
  end
53
55
  if result.is_a? Array
54
56
  result = result.first
@@ -60,7 +62,7 @@ module MultimediaParadise
60
62
  # === MultimediaParadise.return_random_video_that_exists
61
63
  # ========================================================================= #
62
64
  def self.return_random_video_that_exists
63
- return Dir[::MultimediaParadise.realvids_directory?+'*'].select {|entry|
65
+ return Dir[realvids_directory?+'*'].select {|entry|
64
66
  MultimediaParadise.is_this_a_video_file?(entry)
65
67
  }.sample
66
68
  end
@@ -69,5 +71,5 @@ end
69
71
 
70
72
  if __FILE__ == $PROGRAM_NAME
71
73
  _ = MultimediaParadise.return_random_video_file_from_the_video_collection(:notify_when_missing)
72
- puts _ if _
74
+ puts _ if _
73
75
  end # return_random_video_file_from_the_video_collection
@@ -4,19 +4,18 @@
4
4
  # =========================================================================== #
5
5
  # require 'multimedia_paradise/toplevel_methods/scale_video.rb'
6
6
  # =========================================================================== #
7
- require 'multimedia_paradise/ffmpeg/ffmpeg.rb'
8
-
9
7
  module MultimediaParadise
10
8
 
11
9
  # ========================================================================= #
12
10
  # === MultimediaParadise.scale_this_video
13
11
  #
14
12
  # For the documentation of this method, please look at the method called
15
- # MultimediaParadise.scale_this_video().
13
+ # MultimediaParadise.ffmpeg_scale_this_video().
16
14
  # ========================================================================= #
17
15
  def self.scale_this_video(
18
16
  this_video, optional_hash = {}
19
17
  )
18
+ require 'multimedia_paradise/toplevel_methods/ffmpeg.rb'
20
19
  ffmpeg_scale_this_video(this_video, optional_hash)
21
20
  end; self.instance_eval { alias resize_this_video scale_this_video } # === MultimediaParadise.resize_this_video
22
21
 
@@ -24,4 +23,4 @@ end
24
23
 
25
24
  if __FILE__ == $PROGRAM_NAME
26
25
  MultimediaParadise.scale_this_video(ARGV)
27
- end # scale_this_video ack.avi
26
+ end # scalethisvideo ack.avi
@@ -25,7 +25,7 @@ module MultimediaParadise
25
25
  # ========================================================================= #
26
26
  def self.set_title_of(
27
27
  these_audio_files = ARGV,
28
- use_this_title = nil
28
+ use_this_title = nil # Pass the title of the video or audio file here.
29
29
  )
30
30
  [these_audio_files].flatten.compact.each {|this_audio_file|
31
31
  if use_this_title
@@ -41,13 +41,13 @@ module MultimediaParadise
41
41
  # =================================================================== #
42
42
  # Build up our main command next, via ffmpeg:
43
43
  # =================================================================== #
44
- _ = 'ffmpeg -i '+
45
- this_audio_file+
46
- ' -metadata title="'+use_this_title+'" '\
47
- '-codec copy '+new_filename
44
+ _ = "ffmpeg -i "+
45
+ "#{this_audio_file}"+
46
+ ' -metadata title="'+use_this_title+'" '+
47
+ "-codec copy #{new_filename}"
48
48
  esystem _
49
49
  if File.exist? new_filename
50
- e "#{rev}Stored at `#{sfile(new_filename)}`."
50
+ e "#{rev}Stored at `#{sfile(new_filename)}#{rev}`."
51
51
  end
52
52
  end
53
53
  }
@@ -2,7 +2,7 @@
2
2
  # Encoding: UTF-8
3
3
  # frozen_string_literal: true
4
4
  # =========================================================================== #
5
- # require 'multimedia_paradise/help/help.rb'
5
+ # require 'multimedia_paradise/toplevel_methods/show_help.rb'
6
6
  # =========================================================================== #
7
7
  module MultimediaParadise
8
8
 
@@ -19,14 +19,16 @@ module MultimediaParadise
19
19
  # mpa --help
20
20
  #
21
21
  # ========================================================================= #
22
- def self.show_help
23
- e "#{rev}You can use the MultimediaParadise project in this manner:"
22
+ def self.show_help(
23
+ i = $PROGRAM_NAME
24
+ )
25
+ e "#{rev}The MultimediaParadise project can be used as follows:"
24
26
  e
25
- e ' '+simp($PROGRAM_NAME.to_s)+' foo.mp3 foo.wav'
27
+ e " #{simp(i.to_s)} foo.mp3 foo.wav"
26
28
  e
27
- e 'This would convert '+orange('foo.mp3')+' into '+orange('foo.wav')
29
+ e "#{rev}This would convert #{orange('foo.mp3')}#{rev} into #{orange('foo.wav')}"
28
30
  e
29
- e ' --formats # Will list all available format-conversions.'
31
+ e "#{rev} --formats # Will list all available format-conversions."
30
32
  e
31
33
  e ' --increase_volume file # Use this to increase the volume of an '\
32
34
  'audio file'
@@ -43,8 +45,8 @@ module MultimediaParadise
43
45
  e
44
46
  e ' --radio? # Show URLs to radio-stations for '\
45
47
  'use in e. g. '+orange('rhythmbox')
46
- e ' --cut-audio # Start the libui-wrapper for '\
47
- 'cutting multimedia files (such as a .mp3 file)'
48
+ e "#{rev} --cut-audio # Start the libui-wrapper for "\
49
+ "cutting multimedia files (such as a .mp3 file)"
48
50
  e
49
51
  end
50
52
 
@@ -72,4 +74,8 @@ EOF
72
74
  e intro # Output the intro.
73
75
  end
74
76
 
77
+ end
78
+
79
+ if __FILE__ == $PROGRAM_NAME
80
+ MultimediaParadise.show_intro
75
81
  end
@@ -4,8 +4,6 @@
4
4
  # =========================================================================== #
5
5
  # require 'multimedia_paradise/toplevel_methods/slow_down_this_video_file.rb'
6
6
  # =========================================================================== #
7
- require 'multimedia_paradise/ffmpeg/ffmpeg.rb'
8
-
9
7
  module MultimediaParadise
10
8
 
11
9
  # ========================================================================= #
@@ -23,6 +21,7 @@ module MultimediaParadise
23
21
  def self.slow_down_this_video_file(
24
22
  this_video_file = ARGV
25
23
  )
24
+ require 'multimedia_paradise/toplevel_methods/ffmpeg.rb'
26
25
  ffmpeg_slow_down_this_video_file(this_video_file)
27
26
  end
28
27
 
@@ -30,4 +29,4 @@ end
30
29
 
31
30
  if __FILE__ == $PROGRAM_NAME
32
31
  MultimediaParadise.slow_down_this_video_file(ARGV)
33
- end # slow_down_this_video_file foobar.mp4
32
+ end # slowdownthisvideofile foobar.mp4
@@ -9,8 +9,6 @@
9
9
  # =========================================================================== #
10
10
  module MultimediaParadise
11
11
 
12
- require 'multimedia_paradise/ffmpeg/ffmpeg.rb'
13
-
14
12
  # ========================================================================= #
15
13
  # === MultimediaParadise.start_screencast
16
14
  #
@@ -46,6 +44,7 @@ module MultimediaParadise
46
44
  use_this_framerate = '25', # ← This is the option -r to ffmpeg.
47
45
  use_this_video_codec = 'huffyuv' # ← or libx264, for instance.
48
46
  )
47
+ require 'multimedia_paradise/toplevel_methods/ffmpeg.rb'
49
48
  ffmpeg_start_screencast(
50
49
  use_this_screen_resolution,
51
50
  output_filename,
@@ -60,7 +59,9 @@ module MultimediaParadise
60
59
  # This is mostly an ad-hoc method.
61
60
  # ========================================================================= #
62
61
  def self.record_my_desktop
62
+ e
63
63
  esystem 'ffmpeg -video_size 1920x1080 -framerate 30 -f x11grab -i :0.0 -c:v libx264 -qp 0 -preset ultrafast capture.mkv'
64
+ e
64
65
  end
65
66
 
66
67
  end