-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathCHANGELOG
More file actions
570 lines (382 loc) · 18.7 KB
/
CHANGELOG
File metadata and controls
570 lines (382 loc) · 18.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
== 8.3.0 2026-03-19
* Introduce inline remux when there's no output path provided
== 8.2.0 2026-03-11
Improvements:
* Added remuxer to clone media with clean containers within milliseconds.
== 8.1.1 2026-02-24
Fixes:
* FFmpeg v8 no longer allows `-y` as an argument for `ffprobe`.
== 8.1.0 2026-02-04
Improvements:
* Added smart audio channel selection to FFMPEG::CommandArgs.
== 8.1.0-beta.5 2025-10-31
Improvements:
* Added audio channels configuration to built-in presets.
Fixes:
* Fixed MPEG-DASH timing issues by using avoid_negative_ts 'make_zero' instead of the asetpts filter.
== 8.1.0-beta.4 2025-10-10
Improvements:
* Added audio sample rate adjustment to built-in presets.
* Audio sample rates now work similarly to frame rates - when the input has a lower sample rate than the target, the closest standard sample rate is used.
* Standard audio sample rates supported: 8000, 11025, 16000, 22050, 32000, 44100, 48000, 88200, 96000, 176400, 192000 Hz.
== 8.1.0-beta.3 2025-09-30
Improvements:
* Handle bit rates reported as `0` in `FFMPEG::CommandArgs` by @elthariel.
== 8.1.0-beta.2 2025-09-25
Improvements:
* Added support for base URLs in HLS playlists generated via the `FFMPEG::DASH` classes.
== 8.1.0-beta.1 2025-07-17
Fixes:
* Correctly implement HLS specification for EXT-X-MEDIA and GROUP-ID.
== 8.1.0-beta 2025-07-15
Improvements:
* Added comprehensive MPEG-DASH manifest parsing capabilities with the new `FFMPEG::DASH` module.
* Added support for converting MPEG-DASH manifests to HLS (M3U8) playlists.
* Added support for configurable base URLs and segment queries in DASH manifests.
== 8.0.0 2025-06-27
Improvements:
* Added support for retries in the `FFMPEG::Transcoder` class. This allows for more robust command
argument composing and thus more stable outputs.
Breaking Changes:
* The `FFMPEG::Transcoder#process!` method will now fail if the expected output files do not exist after
successful processing. This behaviour can be controled by passing `checks: []` to the transcoder
initializer.
* The `FFMPEG::Status::ExitError` class has been renamed to `FFMPEG::ExitError`.
* The `FFMPEG::ExitError` class now holds a reference to the `StringIO` output of the FFmpeg command
(before it contained the `String` representation).
== 7.1.4 2025-06-23
Fixes:
* Handle 0 for height when calculating display aspect ratio (ZeroDivisionError was raised before).
== 7.1.3 2025-06-05
Fixes:
* Ensure consistent bit rates for all video representations in the built-in MPEG-DASH presets.
== 7.1.2 2025-05-09
Fixes:
* Removed `-reconnect_at_eof` from `FFMPEG::CommandArgs::NetworkStreaming` to prevent retries
when processing a file that is not a stream.
== 7.1.1 2025-05-09
Fixes:
* Removed invalid option `-reconnect_on_timeout` from `FFMPEG::CommandArgs::NetworkStreaming`.
== 7.1.0 2025-05-09
Improvements:
* Added new modular way of composing ffmpeg commands using the `FFMPEG::CommandArgs::Composable` module.
== 7.0.0 2025-05-09
(No changes since the last beta.)
== 7.0.0-beta.14 2025-04-25
Improvements:
* Built-in presets now use the closest standard frame rate to the input file
when the input file has lower frame rate than the preset.
* Increased the keyframe interval of the MPEG-DASH H.264 preset to 2 seconds by default.
This results in a more efficient encoding process and smaller file sizes, while
still maintaining a good quality.
Fixes:
* Fixed some audio timeline shifting issues with the MPEG-DASH H.264 preset due to which
some players would skip to the end of the video upon loading.
== 7.0.0-beta.13 2025-04-23
Fixes:
* Fixed a bug that caused the `FFMPEG::IO#each` method to crash when the parent process
was receiving and trapping exit signals.
== 7.0.0-beta.12 2025-04-15
Breaking Changes:
* The `display_aspect_ratio` and `sample_aspect_ratio` methods have been renamed to
`raw_display_aspect_ratio` and `raw_sample_aspect_ratio` respectively on both
the Media and Stream classes.
* The `calculated_aspect_ratio` and `calculated_pixel_aspect_ratio` methods have been
renamed to `display_aspect_ratio` and `sample_aspect_ratio` respectively on both
the Media and Stream classes.
* Rolled back zlib scale changes (they caused more errors than what they resolved).
Improvements:
* Added more getters for color information to the Media class.
* Added more options to the scale filter.
* Greatly simplified the MPEG-DASH H.264 preset.
* Added support for stream specifiers in many RawCommandArgs methods.
== 7.0.0-beta.11 2025-04-10
Improvements:
* Better mimic the output of FFmpeg with the stream overview methods.
* Added support for using zlib with the Scale filter.
* Updated the H.264 presets to use zlib for scaling by default.
== 7.0.0-beta.10 2025-04-08
Fixes:
* Properly handle uncommon input pixel formats in the built-in presets.
== 7.0.0-beta.9 2025-04-07
Improvements:
* Use more reliable M4A container for AAC presets.
* Add settings to control the number of threads used by built-in presets.
* Improve MPEG-DASH presets with more standard defaults.
Fixes:
* Properly handle nil values during argument composition.
== 7.0.0-beta.8 2025-04-02
Fixes:
* MPEG-DASH presets should only include the applicable adaptation sets.
== 7.0.0-beta.7 2025-03-28
Improvements:
* Added new Format, SetDAR and SetSAR filters.
* FFmpeg commands from the logs are now actually copy-paste executable.
* Reduced default keyframe interval for MPEG-DASH presets to 1 seconds.
Fixes:
* MPEG-DASH presets now produce any warnings.
* The H.264 MPEG-DASH preset failing due to incorrectly calculated aspect ratios.
== 7.0.0-beta.6 2025-03-25
Improvements:
* Increased default MPEG-DASH segment duration from 2 seconds to 4 seconds.
* Removed the MPEG-DASH min_keyframe_interval and max_keyframe_interval options in
favor of calculating the optimal keyframe interval based on the
segment duration.
Fixes:
* Resolve byte sequence issues in progress reports.
== 7.0.0-beta.5 2025-03-18
Fixes:
* Make sure the `CommandArgs` `compose` method does not raise an error if the metadata is missing.
== 7.0.0-beta.4 2025-02-24
Improvements:
* Added support for per-operation timeout.
* Added global setting for the default per-operation timeout.
* FFMPEG::Status objects now keep track of the duration of operations.
Fixes:
* No progress reported for audio-only transcoding operations.
== 7.0.0-beta.3 2025-02-10
Improvements:
* Added new `FFMPEG::Status` class to handle the status of ffmpeg and ffprobe processes.
Breaking Changes:
* Removed the borderline useless thumbnail preset.
== 7.0.0-beta.2 2025-01-29
Fixes:
* Make sure the DASH H.264 preset includes at least one video stream.
Improvements:
* Added LD H.264 presets for the DASH H.264 preset that are only included when no other preset fits the specific media.
* Added more options to customize most presets.
== 7.0.0-beta.1 2025-01-22
Fixes:
* Some incorrect or incomplete documentation comments.
Improvements:
* Added non-blocking popen3 methods for both ffmpeg and ffprobe.
* Improved IO handling for ffmpeg and ffprobe processes.
Breaking Changes:
* Dropped support for Ruby 3.1, Ruby 3.2 is now the minimum supported version.
== 7.0.0-beta 2024-11-29
Breaking Changes:
* Added new, more powerful (though less extensible) DSL to build ffmpeg commands.
* Introduced new concept of long-lived presets and transcoders.
* Removed full output storage during the transcoding process.
* Added built-in presets that can be used out-of-the-box:
* H.264 360p all the way up to 4K resolution.
* AAC 128k all the way up to 320k bit rate.
* DASH H.264 360p all the way up to 4K resolution.
* DASH AAC 128k all the way up to 320k bit rate.
* Dropped support for Ruby 3.0, Ruby 3.1 is now the minimum supported version.
== 6.1.2 2024-11-07
Fixes:
* Calculate rotation correctly for media files with multiple side data elements
== 6.1.1 2024-11-04
Fixes:
* MOV files processed in iMovie should not be marked as audio with attached picture
== 6.1.0 2024-10-24
Improvements:
* Added new `default?` and `attached_pic?` helper methods to FFMPEG::Stream objects
* Added new `audio_with_attached_pic?` helper method to FFMPEG::Media objects
== 6.0.3 2024-06-19
Fixes:
* Fixed a possible race condition that would cause the transcoder to time out even if the transcoder was still running
== 6.0.2 2024-06-18
Fixes:
* Fixed a crash where extremely long media files would cause the transcoder to fail with SystemStackError: stack level too deep
== 6.0.1 2024-06-05
Fixes:
* Fixed crashes when using FFMPEG::IO with non-UTF-8 encoding (e.g.: when ffprobe or ffmpeg output contains non-UTF-8 byte sequences)
== 6.0.0 2024-06-05
Breaking Changes:
* Changed FFMPEG::IO to use UTF-8 encoding instead of ISO-8859-1 by default
* Changed FFMPEG::Transcoder#run to raise FFMPEG::Error if FFMPEG exits with non-zero exit code even if validate was set to false on the transcoder
* Removed the errors attribute of FFMPEG::Transcoder
Improvements:
* Changed FFMPEG::IO to handle carriage returns by FFMPEG – progress reports will be more frequent and more reliable
* Changed FFMPEG::Transcoder to report progress only on whole percentages by default (e.g.: 0.01, 0.2 etc.)
* Added new progress_digits kwarg to FFMPEG::Transcoder to allow more frequent progress updates
== 5.0.0 2024-05-02
Breaking Changes:
* Dropped support for Ruby 2.x
== 4.2.0 2024-05-02
Improvements:
* Added new methods to cut `FFMPEG::Media#cut` and concat `FFMPEG::Media.concat` media
* Added new API to deal with filters
* Added `FFMPEG::Filters::SilenceDetect` to detect silence in audio streams
* Added `FFMPEG::Filters::Grayscale` as a sample filter
== 4.1.0 2024-04-29
Improvements:
* Added new `(ffmpeg|ffprobe)_(capture3|popen3)` methods to the `FFMPEG` module to allow custom calls to the ffmpeg and ffprobe binaries
== 4.0.0 2024-04-27
Breaking Changes:
* FFMPEG::Movie was renamed to FFMPEG::Media to better reflect the fact that it can handle both audio and video files
* FFMPEG::Stream was introduced to handle the streams within a media file
* Some FFMPEG::Media methods were renamed or removed to better reflect the new structure
* FFMPEG::Transcoder now requires encoding options to be passed
* FFMPEG::Transcoder now expects the formerly called transcoder_options to be passed as keyword arguments
== 3.0.2 2016-11-18
Improvements:
* Issue #153 Adds support for multiple audio streams
* Issue #150 Does not trust reported SAR/DAR as these may not be defined per https://trac.ffmpeg.org/ticket/3798
== 3.0.1 2016-11-10
Improvements:
* Issue #144 is fixed. Of a nil movie is presented to transcode, the progress block does not fail
* Issue #145 Adds ability to follow URLs when presented as Movie inputs
== 3.0.0 2016-09-07
Breaking Changes:
* Changes: custom parameters now specified using an array syntax
Improvements:
* Issue # 128, #137 are fixed (custom parameters passed as strings) which was caused
by 2.1.0 in attempting to avoid the use of shell and filename escaping issues
on various platforms.
== 2.1.0 2016-08-08
New:
* Issue #135, Support creating slideshows from stills
* Issue #130, Adds support for a URL as an input
* Support for specifying options to apply to the input file
* Improved support for calling FFMpeg with popen3, improving compatibility with various platforms, including windows
* Issue #111. uses attr_accessor for the timeout attribute
* Exposes the movie's entire meta data and format tags as movie attributes
* Issue #122, adds encoding fix to stderr
* All specs pass and brought current with Rspec V3
* Issue #123, #131 improved stream validation, ignoring additional invalid streams if a valid stream is recognized
* Issue #124, improved parsing for moving creation_time
* SAR and DAR now adapt after rotation, DAR is ignored when calculating dimensions
Improvements:
* Allow parenthesis in colorspace (thanks walterdavis for initial code and rociiu for finding a bug with it)
* Width and height now switched if video is filmed in portrait mode. ffmpeg 2.7 or later now automatically rotates output
* Movie metadata now provided with ffprobe (#114). Thanks to Ryan Lovelett for the contributions!
* Ability to create multiple screenshots at consistent intervals in one pass (#113)
== 2.0.0 2016-01-14
New:
* Support watermarking (thanks smoothdvd)
* Bumped target ffmpeg version to 2.8
Improvements:
* Allow parenthesis in colorspace (thanks walterdavis for initial code and rociiu for finding a bug with it)
* Width and height now switched if video is filmed in portrait mode. ffmpeg 2.7 or later now automatically rotates output
* Movie metadata now provided with ffprobe (#114). Thanks to Ryan Lovelett for the contributions!
* Ability to create multiple screenshots at consistent intervals in one pass (#113)
== 1.0.0 2013-07-08
New:
* Bumped target ffmpeg version to 1.2.1
Improvements:
* Simpler implementation for timeouts.
Should be far less cpu and memory dependent (don't spawn a thread for every line of output)
Timeout spec now passes in Rubinius (using 1.9 mode)
* Give helpful error message for windows users lacking the win32-process gem (thanks casoetan)
* Add Movie#container (thanks vitalis)
* Support vprofile and preset encoding options (thanks vitalis)
Changes:
* Default timeout lowered to 30 seconds
Bugs:
* Avoid crash if asking for frame_rate of a video without video stream (thanks squidarth)
* Fix crash when doing audio transcoding on ffmpeg >= 1.0.1 (thanks vitalis)
Deprecations:
* Removed support for Ruby 1.8
* Removed support for ffmpeg 0.7
Refactorings:
* Quite a few, see commit history for details.
== 0.9.0 2012-07-24
New:
* Bumped target ffmpeg version to 0.11.1
* Add hung process detection with configurable timeout (thanks stakach)
* Raise FFMPEG::Error instead of generic RuntimeError on failed transcodings
* Movie#screenshot for more intuitive screenshotting (README has details)
* Movie#creation_time and Movie#rotation attributes when metadata is available (thanks Innonate)
Bugs:
* Fixed too many open files bug (thanks to akicho8)
* Fixed missing path escaping (thanks to mikesager)
* Fixed README typo (thanks to Linutux)
* Files outputing "could not find codec parameters" are now recognized as invalid
Deprecations:
* Removed Movie#uncertain_duration?
* Removed all the deprecated crop options (use :custom => '-vf crop=x:x:x:x' if you need it)
Refactorings:
* Removed the deprecated duration validation code
* Polish on the transcoder class
* Polish on the spec suite
== 0.8.5 2011-03-05
* If a clip has a DAR that doesn't make sense fall back to calculating aspect ratio from dimensions
* Allow filenames with single quote characters (thanks to youpy)
== 0.8.4 2011-11-30
* Duration now one decimal more accurate (thanks to Russel Brooks)
* Added encoding option seek_time (thanks to Misty De Meo)
== 0.8.3 2011-09-01
* Parameters now come in the order of codecs, presets, others so that we can override the presets
* Added encoding option keyframe_interval to set number of frames between i-frames (aka GOP size)
* Streamio (sponsor of this project) have launched new awesome pricing @ http://streamio.com
== 0.8.2 2011-08-19
* Path to ffmpeg binary can now be specified (thanks jonathandean)
* If ffmpeg output contains "is not supported" the Movie will be considered invalid
== 0.8.1 2011-07-28
* Fix progress yielding with ffmpeg 0.8
* Updated specs to pass with ffmpeg 0.8
== 0.8.0 2011-05-26
* Duration is now ALWAYS considered uncertain (we've noticed that ffmpeg is not always correct)
* This means that the duration check will normally never run (unless you manually hack @uncertain_duration to false)
* Movie#audio_channels now returns nil if there is no audio stream (instead of crashing)
* Development: Use Bundler
* Development: Update RSpec to 2.6
== 0.7.8 2011-04-04
* Fixed number of audio channels on files with 5.1 audio
== 0.7.7 2011-02-01
* Movies with starttime are now considered as having uncertain duration as its behavior is not consistent across formats
* Upgrade development environment to RSpec 2.4
== 0.7.6 2011-01-14
* Another ruby 1.9 encoding fix
== 0.7.5 2011-01-14
* Fixed some ruby 1.9 issues
* Added Movie#video_bitrate and Movie#audio_bitrate (thanks to mbj)
== 0.7.4 2010-12-07
* Fixed broken duration on movies with start times over 0 by reducing duration with start-time
== 0.7.3 2010-08-26
* Replaced Jewler with simple dynamic gemspec file
* Spec files now not in published gem to make it a lot smaller in size
* Full output from ffmpeg command in error raised during transcoding
== 0.7.2 2010-08-11
* Added encoding option duration
* Avoid crashing when ffmpeg can't find resolution of a movie
== 0.7.1 2010-07-08
* Make sure preset parameters are always put last to avoid them ending up before any codec assignments
* Testing against a fresh ffmpeg build (r24069)
== 0.7.0 2010-07-07
* Support for ffpresets through video_preset, audio_preset and file_preset encoding options
* Added encoding option video_bitrate_tolerance
== 0.6.8.1 2010-07-06
* Bugfix - aspect ratio was not calculated properly on movies with no DAR
== 0.6.8 2010-07-06
* Don't use encoding options with nil values
* Added encoding options video_max_bitrate, video_min_bitrate and buffer_size for constant bitrate encoding
== 0.6.7 2010-06-10
* Bugfix - aspect ratio preserver could suggest non even resolutions in certain circumstances
== 0.6.6 2010-06-10
* Transcodings to .jpg and .png will now work as they will skip duration validation
== 0.6.5 2010-05-19
* Movie#size method to get file size.
== 0.6.4 2010-05-12
* Ruby 1.9 compatibility fix for EncodingOptions (thanks michalf!)
== 0.6.3 2010-05-05
* Use DAR to calculate aspect ratio if available
== 0.6.2 2010-05-05
* Added Movie#uncertain_duration? which is true if ffmpeg is guessing duration from bitrate
* Skipping the transcoders duration validation if original file has uncertain duration
* Made sure aspect ratio preservation always rounds new size to an even number to avoid "not divisible by 2" errors
* Changed Movie#valid? logic to accept any movie with either a readable audio or video stream
== 0.6.0 2010-05-04
* Cropping options now handled by EncodingOptions (croptop, cropbottom, cropleft and cropright)
* Aspect ratio parameter calculated and added by default
* Added transcoder options to preserve original aspect ratio on width or height
== 0.5.0 2010-04-28
* Added logging capabilities
== 0.4.3 2010-04-06
* Correctly identify invalid movies on latest ffmpeg build (r22811)
== 0.4.2 2010-04-06
* Escape the path to handle spaces in filenames and avoid CLI injection attacks (thanks J. Weir!)
== 0.4.1 2010-02-10
* Forgot to change the transcoding shortcut from Movie
== 0.4.0 2010-02-10
* Transcoding API changed to make use of more humanly readable options (see README for examples)
* Fixed frame rate parsing for integer frame rates
== 0.3.0 2010-02-07
* Simple transcoding
== 0.2.0 2010-02-06
* Some more metadata parsing
== 0.1.0 2010-02-05
* Some basic parsing of metadata added