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
@@ -0,0 +1,138 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'multimedia_paradise/toplevel_methods/audio_related_code.rb'
6
+ # =========================================================================== #
7
+ module MultimediaParadise
8
+
9
+ require 'multimedia_paradise/toplevel_methods/e.rb'
10
+ require 'multimedia_paradise/toplevel_methods/esystem.rb'
11
+
12
+ # ========================================================================= #
13
+ # === MultimediaParadise.delay_audio
14
+ #
15
+ # This method will delay the audio of a video-file, by n-seconds.
16
+ #
17
+ # The second argument to this method, `by`, handles that delay.
18
+ # ========================================================================= #
19
+ def self.delay_audio(
20
+ this_file = ARGV,
21
+ by = '3.85 seconds' # <- Input your delay here.
22
+ )
23
+ require 'multimedia_paradise/toplevel_methods/ffmpeg.rb'
24
+ ffmpeg_delay_audio(this_file, by)
25
+ end
26
+
27
+ # ========================================================================= #
28
+ # === MultimediaParadise.has_audio?
29
+ #
30
+ # This method can determine whether a multimedia-file has audio or
31
+ # does not.
32
+ # ========================================================================= #
33
+ def self.has_audio?(
34
+ i = ARGV
35
+ )
36
+ if i.is_a? Array
37
+ i = i.flatten.first
38
+ end
39
+ result = `ffprobe -i #{i} -show_streams -select_streams a -loglevel error`.to_s.strip
40
+ !result.empty?
41
+ end
42
+
43
+ # ========================================================================= #
44
+ # === MultimediaParadise.verbose_output_has_audio?
45
+ #
46
+ # This variant will show verbose output.
47
+ # ========================================================================= #
48
+ def self.verbose_output_has_audio?(i = ARGV)
49
+ require 'multimedia_paradise/colours/colours.rb'
50
+ result = has_audio?(i)
51
+ if result
52
+ e "#{rev}Yes, the file at "
53
+ e sfile(" #{i}")
54
+ e "#{rev}does contain an audio stream."
55
+ else
56
+ e "#{rev}No, the file at "
57
+ e sfile(" #{i}")
58
+ e "#{rev}does NOT contain an audio stream."
59
+ end
60
+ end
61
+
62
+ # ========================================================================= #
63
+ # === MultimediaParadise.increase_volume_of_this_audio_file
64
+ #
65
+ # The toplevel-method MultimediaParadise.increase_volume_of_this_audio_file
66
+ # can boost the volume of an audio file, by making use of sox or ffmpeg.
67
+ #
68
+ # Sox is currently the default, whereas ffmpeg is used if the input
69
+ # given ends with 'db', which is short for decibel. The latter variant
70
+ # allows you to just input an increase or decrease in decibel.
71
+ #
72
+ # The sox command can modify the audio volume, up or down, using the -v
73
+ # flag, followed by a multiplier. The following example doubles (x2)
74
+ # the audio volume of a file.
75
+ #
76
+ # sox -v 2.0 original-music.ogg louder-music.ogg
77
+ #
78
+ # ========================================================================= #
79
+ def self.increase_volume_of_this_audio_file(
80
+ input_file,
81
+ modify_volume_by_this_value = '5.0' # or 3.0 or 4.0 and so forth.
82
+ )
83
+ unless input_file.is_a? Array
84
+ input_file = [input_file]
85
+ end
86
+ if modify_volume_by_this_value.to_s.downcase.end_with? 'db'
87
+ ffmpeg_increase_volume_of_this_audio_file(
88
+ input_file, modify_volume_by_this_value
89
+ )
90
+ else
91
+ case modify_volume_by_this_value # case tag
92
+ when '1/4', :one_fourth,'25%'
93
+ modify_volume_by_this_value = 0.25
94
+ end
95
+ # ======================================================================= #
96
+ # Batch-process the Array next.
97
+ # ======================================================================= #
98
+ input_file.each {|this_file|
99
+ value = modify_volume_by_this_value.to_s
100
+ output_file = "modified_file_by_v#{value}_#{this_file}"
101
+ _ = 'sox -v '+value+
102
+ ' '+this_file+' '+output_file
103
+ esystem _
104
+ }
105
+ end
106
+ end
107
+
108
+ # ========================================================================= #
109
+ # === MultimediaParadise.analyze_audio_stream
110
+ #
111
+ # This method will use ffmpeg in order to analyze the audio stream. A
112
+ # Hash will be returned, which will keep the decibel-score value.
113
+ #
114
+ # For more documentation see the method
115
+ # MultimediaParadise.ffmpeg_analyze_audio_stream().
116
+ # ========================================================================= #
117
+ def self.analyze_audio_stream(
118
+ of_this_file
119
+ )
120
+ require 'multimedia_paradise/toplevel_methods/ffmpeg.rb'
121
+ ffmpeg_analyze_audio_stream(of_this_file)
122
+ end
123
+
124
+ end
125
+
126
+ if __FILE__ == $PROGRAM_NAME
127
+ alias e puts
128
+ ARGV.each {|entry|
129
+ e MultimediaParadise.verbose_output_has_audio?(entry)
130
+ }
131
+ # MultimediaParadise.delay_audio(ARGV)
132
+ MultimediaParadise.delay_audio(ARGV, 80)
133
+ pp MultimediaParadise.analyze_audio_stream(ARGV)
134
+ MultimediaParadise.increase_volume_of_this_audio_file(ARGV, '+20dB')
135
+ end # analyze_audio $MY_SONGS/YoonDohyun_Dolgo.mp3
136
+ # hasaudio
137
+ # delayaudio foo.mp4
138
+ # increase_volume_of_this_audio_file
@@ -4,10 +4,10 @@
4
4
  # =========================================================================== #
5
5
  # require 'multimedia_paradise/toplevel_methods/chop_into_segments_of_n_seconds_size.rb'
6
6
  # =========================================================================== #
7
- require 'multimedia_paradise/ffmpeg/ffmpeg.rb'
8
-
9
7
  module MultimediaParadise
10
8
 
9
+ require 'multimedia_paradise/toplevel_methods/ffmpeg.rb'
10
+
11
11
  # ========================================================================= #
12
12
  # === MultimediaParadise.chop_into_segments_of_n_seconds_size
13
13
  #
@@ -2,6 +2,8 @@
2
2
  # Encoding: UTF-8
3
3
  # frozen_string_literal: true
4
4
  # =========================================================================== #
5
+ # Conversion-related methods will be stored in this file.
6
+ #
5
7
  # Code in this .rb file has to do with converting multimedia formats, and
6
8
  # thus will contain all kind of conversion-related aspects - but it can
7
9
  # also be used for cutting, splitting etc.. of audio files, at the least
@@ -12,7 +14,6 @@
12
14
  # called image_paradise.
13
15
  # =========================================================================== #
14
16
  # require 'multimedia_paradise/toplevel_methods/conversions.rb'
15
- # MultimediaParadise.video_to_images
16
17
  # =========================================================================== #
17
18
  module MultimediaParadise
18
19
 
@@ -24,13 +25,14 @@ module MultimediaParadise
24
25
  require 'cliner'
25
26
  rescue LoadError; end
26
27
 
27
- require 'multimedia_paradise/constants/conversions.rb'
28
+ require 'multimedia_paradise/constants/constants.rb'
29
+ require 'multimedia_paradise/actions/actions.rb'
30
+ require 'multimedia_paradise/toplevel_methods/directory_related_code.rb'
28
31
  require 'multimedia_paradise/toplevel_methods/e.rb'
29
32
  require 'multimedia_paradise/toplevel_methods/esystem.rb'
30
- require 'multimedia_paradise/toplevel_methods/merge_multimedia_file.rb'
31
- require 'multimedia_paradise/toplevel_methods/output_directory.rb'
33
+ require 'multimedia_paradise/toplevel_methods/ffmpeg.rb'
34
+ require 'multimedia_paradise/toplevel_methods/merge.rb'
32
35
  require 'multimedia_paradise/toplevel_methods/rds.rb'
33
- require 'multimedia_paradise/toplevel_methods/run_sys_command.rb'
34
36
 
35
37
  # ========================================================================= #
36
38
  # === @use_this_binary_for_conversions
@@ -54,6 +56,110 @@ module MultimediaParadise
54
56
  Cliner.cliner
55
57
  end
56
58
 
59
+ # ========================================================================= #
60
+ # === MultimediaParadise.to_mp4
61
+ # ========================================================================= #
62
+ def self.to_mp4(*these_files)
63
+ File.absolute_path(
64
+ ffmpeg_to_mp4(these_files)
65
+ )
66
+ end
67
+
68
+ # ========================================================================= #
69
+ # === MultimediaParadise.to_gif
70
+ #
71
+ # This method can be used to quickly turn an .avi file or a .mp4
72
+ # file into an animated .gif.
73
+ #
74
+ # The quality is pretty low, so this is not ideal, but if you
75
+ # have a use case for animated .gif files then this is one
76
+ # way to do so.
77
+ #
78
+ # Usage example:
79
+ #
80
+ # MultimediaParadise.to_gif('foobar.mp4')
81
+ #
82
+ # ========================================================================= #
83
+ def self.to_gif(i)
84
+ [i].flatten.compact.each {|this_video_file|
85
+ _ = File.basename(this_video_file).
86
+ delete_suffix(
87
+ File.extname(this_video_file)
88
+ )
89
+ name_of_the_output_gif_file = "output_#{_}.gif"
90
+ cmd = "ffmpeg -i #{this_video_file} -pix_fmt rgb8 #{name_of_the_output_gif_file}" # Or use 0rgb.
91
+ esystem(cmd)
92
+ return name_of_the_output_gif_file
93
+ }
94
+ end
95
+
96
+ # ========================================================================= #
97
+ # === MultimediaParadise.to_ts
98
+ #
99
+ # This will batch-convert all .mp4 files into .ts files.
100
+ # ========================================================================= #
101
+ def self.to_ts
102
+ files = Dir['*.mp4']
103
+ files.each {|this_file|
104
+ cmd = 'ffmpeg -i '+this_file+' -c copy '\
105
+ '-bsf:v h264_mp4toannexb -f mpegts '+
106
+ this_file.sub(/#{File.extname(this_file)}$/,'')+
107
+ '.ts'
108
+
109
+ esystem cmd
110
+ }
111
+ end
112
+
113
+ # ========================================================================= #
114
+ # === MultimediaParadise.to_ogg
115
+ #
116
+ # Convert e. g. a .mp3 file into an .ogg file.
117
+ #
118
+ # The first argument should be an Array.
119
+ #
120
+ # The name MultimediaParadise.codec_conversion() is a legacy name for
121
+ # this method.
122
+ #
123
+ # In raw ffmpeg this method would be similar to:
124
+ #
125
+ # ffmpeg -i input.mp3 -c:a libvorbis output.ogg
126
+ #
127
+ # ========================================================================= #
128
+ def self.to_ogg(
129
+ input_files,
130
+ use_this_codec = :libvorbis
131
+ )
132
+ [input_files].flatten.compact.each {|this_input_file|
133
+ action(:to_ogg, this_input_file)
134
+ }
135
+ end; self.instance_eval { alias codec_conversion to_ogg } # === MultimediaParadise.codec_conversion
136
+
137
+ # ========================================================================= #
138
+ # === MultimediaParadise.to_flac
139
+ #
140
+ # Convert e. g. a .mp3 file into a .flac file.
141
+ # ========================================================================= #
142
+ def self.to_flac(input_files)
143
+ [input_files].flatten.compact.each {|this_input_file|
144
+ output_name = File.absolute_path(
145
+ "output_#{File.basename(this_input_file)}".
146
+ delete_suffix(File.extname(this_input_file))+'.flac'
147
+ )
148
+ e
149
+ esystem "ffmpeg -i #{this_input_file} #{output_name}"
150
+ e
151
+ }
152
+ end
153
+
154
+ # ========================================================================= #
155
+ # === MultimediaParadise.to_aiff
156
+ # ========================================================================= #
157
+ def self.to_aiff(i)
158
+ MultimediaParadise.esystem(
159
+ "ffmpeg -i #{_} -f aiff -ab 128000 -ar 44100 #{_}.aif"
160
+ )
161
+ end
162
+
57
163
  # ========================================================================= #
58
164
  # === MultimediaParadise.general_format_conversion
59
165
  #
@@ -107,7 +213,7 @@ module MultimediaParadise
107
213
  # ===================================================================== #
108
214
  when /^to(_|-)?ogg$/i,
109
215
  /ogg$/i
110
- target_file = input_file.gsub(File.extname(input_file), '')+'.ogg'
216
+ return MultimediaParadise.to_ogg(input_file)
111
217
  # ===================================================================== #
112
218
  # === to_aac
113
219
  # ===================================================================== #
@@ -132,7 +238,8 @@ module MultimediaParadise
132
238
  # ===================================================================== #
133
239
  when /^to(_|-)?mp3$/i,
134
240
  /mp3$/i
135
- target_file = input_file.gsub(File.extname(input_file), '')+'.mp3'
241
+ MultimediaParadise.to_mp3(input_file)
242
+ return
136
243
  # ===================================================================== #
137
244
  # === to_mp3
138
245
  # ===================================================================== #
@@ -178,13 +285,13 @@ module MultimediaParadise
178
285
  please_be_patient(
179
286
  input_file, 'to '+File.extname(target_file)+' format'
180
287
  )
181
- ::MultimediaParadise.display_warning(:lossy)
288
+ MultimediaParadise.display_warning(:lossy)
182
289
  }
183
290
  # =================================================================== #
184
291
  # By default we will use ffmpeg, but this can be changed to sox or
185
292
  # any other toolkit.
186
293
  # =================================================================== #
187
- _ = "#{::MultimediaParadise.use_this_binary_for_conversions?} -y ".dup
294
+ _ = "#{use_this_binary_for_conversions?} -y ".dup
188
295
  _ << " -i #{input_file} "
189
296
  # =================================================================== #
190
297
  # Do some ad-hoc clean up next.
@@ -222,27 +329,11 @@ module MultimediaParadise
222
329
  end; self.instance_eval { alias convert general_format_conversion } # === MultimediaParadise.convert
223
330
  self.instance_eval { alias basic_conversion general_format_conversion } # === MultimediaParadise.basic_conversion
224
331
 
225
- # ========================================================================= #
226
- # === MultimediaParadise.mp4_to_mp3
227
- # ========================================================================= #
228
- def self.mp4_to_mp3(a, b = '.mp3')
229
- ::MultimediaParadise.general_format_conversion(a, b)
230
- end
231
-
232
- # ========================================================================= #
233
- # === MultimediaParadise.ogg_to_mp3
234
- #
235
- # Convert .ogg files into .mp3 files.
236
- # ========================================================================= #
237
- def self.ogg_to_mp3(this_file, to = '.mp3')
238
- ::MultimediaParadise.general_format_conversion(this_file, to)
239
- end
240
-
241
332
  # ========================================================================= #
242
333
  # === MultimediaParadise.mp3_to_opus
243
334
  # ========================================================================= #
244
335
  def self.mp3_to_opus(this_file, to = '.opus')
245
- ::MultimediaParadise.general_format_conversion(this_file, to)
336
+ MultimediaParadise.general_format_conversion(this_file, to)
246
337
  end
247
338
 
248
339
  # ========================================================================= #
@@ -281,7 +372,7 @@ module MultimediaParadise
281
372
  # From .m4a audio to a .mp3 file.
282
373
  # ========================================================================= #
283
374
  def self.m4a_to_mp3(this_file, to = '.mp3')
284
- ::MultimediaParadise.general_format_conversion(this_file, to)
375
+ MultimediaParadise.general_format_conversion(this_file, to)
285
376
  end
286
377
 
287
378
  # ========================================================================= #
@@ -291,22 +382,17 @@ module MultimediaParadise
291
382
  # ffmpeg for this. This may be superior to the other variants actually.
292
383
  # ========================================================================= #
293
384
  def self.any_to_mp3(this_file, to = '.mp3')
294
- ::MultimediaParadise.general_format_conversion(this_file, to)
385
+ MultimediaParadise.general_format_conversion(this_file, to)
295
386
  end
296
387
 
297
388
  # ========================================================================= #
298
- # === MultimediaParadise.decrease_volume
389
+ # === MultimediaParadise.convert_these_images_into_a_video
299
390
  #
300
- # This should decrease audio volume, by using sox.
301
- #
302
- # We do this by using the command --volume FACTOR.
391
+ # This method can be used to "assemble" images into a video.
303
392
  # ========================================================================= #
304
- def self.decrease_volume(
305
- of_this_file,
306
- by_how_much = '0.5'
307
- )
308
- run_sys_command 'sox --volume '+
309
- by_how_much+' '+of_this_file+' AUDIO_REDUCED_'+of_this_file
393
+ def self.convert_these_images_into_a_video(*images)
394
+ _ = 'ffmpeg -f image2 -i '+images.join(' ').strip+' video.mpg'
395
+ esystem _
310
396
  end
311
397
 
312
398
  # ========================================================================= #
@@ -317,7 +403,7 @@ module MultimediaParadise
317
403
  # We will use ffmpeg for this conversion.
318
404
  # ========================================================================= #
319
405
  def self.wav_to_opus(this_file, to = '.opus')
320
- ::MultimediaParadise.general_format_conversion(this_file, to)
406
+ MultimediaParadise.general_format_conversion(this_file, to)
321
407
  end
322
408
 
323
409
  # ========================================================================= #
@@ -346,7 +432,7 @@ module MultimediaParadise
346
432
  def self.wav_to_mp3(
347
433
  this_file, bitrate_to_use = 192, to = '.mp3'
348
434
  )
349
- ::MultimediaParadise.general_format_conversion(this_file, to) {{
435
+ MultimediaParadise.general_format_conversion(this_file, to) {{
350
436
  bitrate_to_use: bitrate_to_use
351
437
  }}
352
438
  end
@@ -529,7 +615,7 @@ module MultimediaParadise
529
615
  def self.au_to_wav(
530
616
  this_file, to = 'wav'
531
617
  )
532
- ::MultimediaParadise.general_format_conversion(this_file, to: ot)
618
+ MultimediaParadise.general_format_conversion(this_file, to: ot)
533
619
  end
534
620
 
535
621
  # ========================================================================= #
@@ -681,7 +767,7 @@ module MultimediaParadise
681
767
  )
682
768
  optional_target_format = optional_target_format.to_s
683
769
  optional_target_format << ' ' if optional_target_format.empty?
684
- opn; e 'Converting `'+::MultimediaParadise.sfile(file)+'` '+
770
+ opn; e 'Converting `'+sfile(file)+'` '+
685
771
  optional_target_format.strip+
686
772
  ' next, please be patient.'
687
773
  end
@@ -842,7 +928,7 @@ module MultimediaParadise
842
928
  this_file,
843
929
  to = '.aac'
844
930
  )
845
- ::MultimediaParadise.general_format_conversion(this_file, to)
931
+ MultimediaParadise.general_format_conversion(this_file, to)
846
932
  end; self.instance_eval { alias to_aac mp3_to_aac } # === MultimediaParadise.to_aac
847
933
 
848
934
  # ========================================================================= #
@@ -861,7 +947,7 @@ module MultimediaParadise
861
947
  this_file,
862
948
  to = '.ogg'
863
949
  )
864
- ::MultimediaParadise.general_format_conversion(this_file, to)
950
+ MultimediaParadise.general_format_conversion(this_file, to)
865
951
  end; self.instance_eval { alias mp3toogg mp3_to_ogg } # === MultimediaParadise.mp3toogg
866
952
  self.instance_eval { alias mp32ogg mp3_to_ogg } # === MultimediaParadise.mp32ogg
867
953
  self.instance_eval { alias to_ogg mp3_to_ogg } # === MultimediaParadise.to_ogg
@@ -875,7 +961,7 @@ module MultimediaParadise
875
961
  #
876
962
  # ========================================================================= #
877
963
  def self.webm_to_mp3(a, b = '.mp3')
878
- ::MultimediaParadise.general_format_conversion(a, b)
964
+ MultimediaParadise.general_format_conversion(a, b)
879
965
  end
880
966
 
881
967
  # ========================================================================= #
@@ -887,7 +973,7 @@ module MultimediaParadise
887
973
  #
888
974
  # ========================================================================= #
889
975
  def self.to_webm(a, b = '.webm')
890
- ::MultimediaParadise.general_format_conversion(a, b)
976
+ MultimediaParadise.general_format_conversion(a, b)
891
977
  end
892
978
 
893
979
  # ========================================================================= #
@@ -899,7 +985,7 @@ module MultimediaParadise
899
985
  #
900
986
  # ========================================================================= #
901
987
  def self.to_mkv(a, b = '.mkv')
902
- ::MultimediaParadise.general_format_conversion(a, b)
988
+ MultimediaParadise.general_format_conversion(a, b)
903
989
  end
904
990
 
905
991
  # ========================================================================= #
@@ -913,12 +999,18 @@ module MultimediaParadise
913
999
  #
914
1000
  # ========================================================================= #
915
1001
  def self.to_dv(a, b = '.dv')
916
- ::MultimediaParadise.general_format_conversion(a, b)
1002
+ MultimediaParadise.general_format_conversion(a, b)
917
1003
  end
918
1004
 
919
1005
  end
920
1006
 
921
1007
  if __FILE__ == $PROGRAM_NAME
1008
+ alias e puts
1009
+ # ========================================================================= #
1010
+ # The next variants should be conversions in individual bin/ files:
1011
+ # ========================================================================= #
1012
+ MultimediaParadise.to_mp4(ARGV)
1013
+ MultimediaParadise.to_flac(ARGV)
922
1014
  # MultimediaParadise.extract_audio_from_until('/Depot/j/foobar.mp4')
923
1015
  # MultimediaParadise.increase_volume '/Depot/j/CLIPPED_foobar.mp4', '3'
924
1016
  # MultimediaParadise.increase_volume '/Depot/j/ack.mp3', '1.5'
@@ -4,13 +4,13 @@
4
4
  # =========================================================================== #
5
5
  # require 'multimedia_paradise/toplevel_methods/copy_and_merge_this_video_n_times.rb'
6
6
  # =========================================================================== #
7
- require 'multimedia_paradise/toplevel_methods/esystem.rb'
8
- require 'multimedia_paradise/toplevel_methods/copy_file.rb'
9
- require 'multimedia_paradise/toplevel_methods/merge_these_videos.rb'
10
- require 'multimedia_paradise/colours/colours.rb'
11
-
12
7
  module MultimediaParadise
13
8
 
9
+ require 'multimedia_paradise/toplevel_methods/esystem.rb'
10
+ require 'multimedia_paradise/toplevel_methods/files_related_code.rb'
11
+ require 'multimedia_paradise/toplevel_methods/merge.rb'
12
+ require 'multimedia_paradise/colours/colours.rb'
13
+
14
14
  # =========================================================================== #
15
15
  # === MultimediaParadise.copy_and_merge_this_video_n_times
16
16
  #
@@ -4,12 +4,12 @@
4
4
  # =========================================================================== #
5
5
  # require 'multimedia_paradise/toplevel_methods/create_video_from_this_audio.rb'
6
6
  # =========================================================================== #
7
- require 'multimedia_paradise/toplevel_methods/e.rb'
8
- require 'multimedia_paradise/toplevel_methods/esystem.rb'
9
- require 'multimedia_paradise/toplevel_methods/is_image_file.rb'
10
-
11
7
  module MultimediaParadise
12
8
 
9
+ require 'multimedia_paradise/toplevel_methods/e.rb'
10
+ require 'multimedia_paradise/toplevel_methods/esystem.rb'
11
+ require 'multimedia_paradise/toplevel_methods/is_audio_file_is_video_file_is_image_file_is_multimedia_file.rb'
12
+
13
13
  # ========================================================================= #
14
14
  # === MultimediaParadise.create_video_from_this_audio
15
15
  #
@@ -61,5 +61,6 @@ module MultimediaParadise
61
61
  end
62
62
 
63
63
  if __FILE__ == $PROGRAM_NAME
64
- MultimediaParadise.create_video_from_this_audio(ARGV)
65
- end # create_video_from_this_audio
64
+ MultimediaParadise.create_video_from_this_audio(ARGV[0], ARGV[1])
65
+ end # createvideofromthisaudio foobar.mp3 /home/x/data/images/NJOY/Susanne_03.jpg
66
+ # createvideofromthisaudio foobar.mp3 foobar.jpg
@@ -124,11 +124,11 @@ module MultimediaParadise
124
124
  _ << " #{output_file}"
125
125
  esystem _
126
126
  if File.exist? output_file
127
- e "Created file at `#{sfile(output_file)}`."
127
+ e "Created file at `#{sfile(output_file)}#{rev}`."
128
128
  return File.absolute_path(output_file) # And return it here, just to make this method more useful.
129
129
  end
130
130
  else
131
- e "No file exists at #{use_this_file}."
131
+ no_file_exists_at(use_this_file)
132
132
  end
133
133
  else
134
134
  e 'Please provide a valid file, via a key called '\
@@ -4,10 +4,10 @@
4
4
  # =========================================================================== #
5
5
  # require 'multimedia_paradise/toplevel_methods/denoise.rb'
6
6
  # =========================================================================== #
7
- require 'multimedia_paradise/ffmpeg/ffmpeg.rb'
8
-
9
7
  module MultimediaParadise
10
8
 
9
+ require 'multimedia_paradise/toplevel_methods/ffmpeg.rb'
10
+
11
11
  # ========================================================================= #
12
12
  # === MultimediaParadise.denoise
13
13
  #
@@ -4,10 +4,10 @@
4
4
  # =========================================================================== #
5
5
  # require 'multimedia_paradise/toplevel_methods/deshake.rb'
6
6
  # =========================================================================== #
7
- require 'multimedia_paradise/toplevel_methods/esystem.rb'
8
-
9
7
  module MultimediaParadise
10
8
 
9
+ require 'multimedia_paradise/toplevel_methods/esystem.rb'
10
+
11
11
  # ========================================================================= #
12
12
  # === MultimediaParadise.deshake
13
13
  #
@@ -29,11 +29,8 @@ module MultimediaParadise
29
29
  output_file = "output_#{input_file}"
30
30
  use_this_command = "ffmpeg -i #{input_file} -vf deshake #{output_file}"
31
31
  e
32
- e use_this_command
33
- e
34
- system use_this_command
32
+ esystem use_this_command, :steelblue, :use_newline
35
33
  end
36
-
37
34
  end
38
35
 
39
36
  end
@@ -2,12 +2,39 @@
2
2
  # Encoding: UTF-8
3
3
  # frozen_string_literal: true
4
4
  # =========================================================================== #
5
- # require 'multimedia_paradise/toplevel_methods/output_directory.rb'
5
+ # require 'multimedia_paradise/toplevel_methods/directory_related_code.rb'
6
6
  # =========================================================================== #
7
7
  module MultimediaParadise
8
8
 
9
+ require 'fileutils'
9
10
  require 'multimedia_paradise/toplevel_methods/is_on_roebe.rb'
10
11
 
12
+ # ========================================================================= #
13
+ # === MultimediaParadise.mkdir
14
+ #
15
+ # This method can be used to create a directory on the local computer
16
+ # system.
17
+ # ========================================================================= #
18
+ def self.mkdir(i)
19
+ FileUtils.mkdir_p(i)
20
+ end
21
+
22
+ # ========================================================================= #
23
+ # === MultimediaParadise.ensure_that_the_output_directory_exists
24
+ #
25
+ # We must make sure that the output directory exists, hence the
26
+ # check belove and the call to FileUtils.mkdir_p().
27
+ # ========================================================================= #
28
+ def self.ensure_that_the_output_directory_exists(
29
+ output_directory = MultimediaParadise.output_directory?
30
+ )
31
+ unless File.exist? output_directory
32
+ FileUtils.mkdir_p(
33
+ output_directory
34
+ )
35
+ end
36
+ end
37
+
11
38
  # ========================================================================= #
12
39
  # === @output_directory
13
40
  # ========================================================================= #
@@ -58,4 +85,14 @@ module MultimediaParadise
58
85
  self.instance_eval { alias log_directory? output_directory? } # === MultimediaParadise.log_directory?
59
86
  self.instance_eval { alias log_dir? output_directory? } # === MultimediaParadise.log_dir?
60
87
 
88
+ # ========================================================================= #
89
+ # === MultimediaParadise.chdir
90
+ #
91
+ # Use this method if you wish to change directory to another target
92
+ # directory.
93
+ # ========================================================================= #
94
+ def self.chdir(i)
95
+ Dir.chdir(i) if File.directory? i
96
+ end; self.instance_eval { alias cd chdir } # === MultimediaParadise.cd
97
+
61
98
  end