FFmpegfs Fuse Multi Media Filesystem 2.14
Online News List
FFmpegfs NEWS
Important changes in 2.15 (2023-12-XX):
* Issue #151: Fixed autocopy STRICT never triggers for video streams
* Issue #149: 2023-05-04 - xxxxxxxxxx - lavu 58.7.100 - frame.h
Deprecate AVFrame.interlaced_frame, AVFrame.top_field_first, and
AVFrame.key_frame.
Add AV_FRAME_FLAG_INTERLACED, AV_FRAME_FLAG_TOP_FIELD_FIRST, and
AV_FRAME_FLAG_KEY flags as replacement.
* Issue #149: 2023-05-04 - xxxxxxxxxx - lavu 58.7.100 - frame.h
Deprecate AVFrame.interlaced_frame, AVFrame.top_field_first, and
AVFrame.key_frame.
Add AV_FRAME_FLAG_INTERLACED, AV_FRAME_FLAG_TOP_FIELD_FIRST, and
AV_FRAME_FLAG_KEY flags as replacement.
* Issue #149: 2021-09-20 - dd846bc4a91 - lavc 59.8.100 - avcodec.h codec.h
Deprecate AV_CODEC_FLAG_TRUNCATED and AV_CODEC_CAP_TRUNCATED,
as they are redundant with parsers.
* Closes #153: The --include_extensions parameter now contains a description,
which was previously missing from the manual and online help.
Important changes in 2.14 (2023-06-15):
* Bugfix: Closes #141: Improved memory management by allocating several times the
average size of allocations. This prevents obtaining tiny portions over and over
again. Additionally, after the file is opened, grab the entire expected memory
block rather than doing a tiny allocation initially, followed by a larger
allocation.
* Bugfix: Avoid race conditions that cause the inter-process semaphore creation to
fail for the second process.
* Bugfix: Issue #119: If a seek request is still open after EOF, restart
transcoding.
* Bugfix: Issue #119: To prevent frame/segment creation errors, the frame set and
HLS code has been updated.
* Bugfix: Avoid crashes during shutdown if cache objects have already been closed.
* Bugfix: Issue #119: The AVSEEK_FLAG_FRAME set should be used to seek to frames
when building frame sets. Otherwise, output images may vary if searched for or
continuously decoded.
* Bugfix: The conversion of PTS to frame number and vice versa for frame sets was
incorrect if TBR did not equal frames per second.
* Bugfix: Fixed seek requests that are being ignored with frame sets.
* Bugfix: When transferring from cache to the Fuse buffer, avoid a possible 1 byte
overrun.
* Bugfix: Issue #143: To avoid occasional EPERM failures, missing synchronisation
objects were added.
* Bugfix: Issue #144: To fix the crashes that may have been caused by them, the
variables impacted by a potential threading issue were marked as "volatile."
* Bugfix: Closes#1037653: Fix build with GCC-13
* Bugfix: Update docker build for Debian Bookworm
* Enhancement: Record milliseconds for every log event.
* Enhancement: make check: added a file size check to frame set tests.
* Optimisation: When reopening after invalidating the cache, the size remained
at 0. The original size is now once again reserved in order to prevent
reallocations.
* Optimisation: To avoid reallocations, save enough space in the cache buffer to
hold the entire frame set.
* Optimisation: Checking folders to see if they can be transcoded is completely
pointless. Directories are now immediately skipped.
* To avoid problems with logfile viewers, renamed built-in logfiles to
*_builtin.log (removing the double extension).
Important changes in 2.13 (2023-01-15):
* Added --prebuffer_time parameter. Files will be decoded until the buffer
contains the specified playing time, allowing playback to start smoothly
without lags. Works similar to --prebuffer_size but gives better control
because it does not depend on the bit rate. An example: when set to
25 seconds for HLS transcoding, this will make sure that at least 2 complete
segments will be available once the file is released and visible.
* Feature: Closes #140: Filtering the files that will be encoded has been
added. A comma-separated list of extensions is specified by the
--include_extensions parameter. These file extensions are the only ones that
will be transcoded.
The entries support shell wildcard patterns.
* Feature: The --hide_extensions parameter syntax has been extended. The
entries now support shell wildcard patterns.
* Bugfix: Closes #139: Additional files could be added using the --extensions
parameter. However, this is no longer necessary; in the past, a file's
extension determined whether or not it would be transcoded. Files with
unknown extensions would be ignored. The extension is no longer important
because FFmpegfs now examines all input files and recognises transcodable
files by the format.
The outdated --extensions argument was removed without substitution.
* Bugfix: Fixed crash when implode() function was called with an empty string.
Happened with Windows GCC 11.3.0 only.
Important changes in 2.12 (2022-08-27):
* The code has been run through clang-tidy to identify bug-prone or
inefficient code, and to find parts that could be modernised to C++17.
Several issues could be resolved. Sometimes, many lines of code could be
replaced by a few. Some parts run far more efficiently than before. C++17
is cool. I need to get a t-shirt.
* Bugfix: In get prores bitrate(), a crash that might have happened under
unusual circumstances has been corrected. If the best match resolution
could not be found, array access out-of-bounds could happen.
* Bugfix: Several unlikely, but potential problems that could have happened
when subtitle decoding failed or delayed video/audio packets couldn't be
decoded have been fixed.
* Bugfix: An internal problem could cause the application to crash. Should
never happen, though. Fixed anyway.
* Bugfix: Sometimes, the last segment's estimated size was incredibly small -
about 2 bytes. Each segment should have the same predicted size as it is
calculated simply by dividing the projected size of the entire file by the
number of segments. Following transcoding, the size was accurate.
Important changes in 2.11 (2022-06-16):
* Feature: Issue #86: Smart transcode now detects if a source file is audio only
and uses the correct target format. For example, with --destination=webm+mp3, if
one MP4 input file contains a video stream and another an audio stream only,
the resulting files will be WebM (for the video input) and mp3 for the audio only
file.
* Feature: Issue #137: Add --no_subtitles option to turn subtitles off.
* Bugfix: Smart encode selected the video format for cue sheet tracks, regardless
of the input format. This has been fixed now.
* Bugfix: Fix a crash that occurs when a DVD/Blu-ray is transcoded to audio only.
* Bugfix: If the track performer field in the cuesheet is blank, try album
performer instead.
* Bugfix: Failing to mount Fuse during "make check" went unnoticed as the result
code (which was supposed to be 99) was actually 0. Return the correct result
code, failing the operation as expected.
* Bugfix: The Docker build command contained a "make check" which actually failed
altogether. Step has been removed. "make check" mounts Fuse, but this requires
privileges that do not exist during "docker build".
* Bugfix: On error, mremap () returns MAP_FAILED rather than NULL. Fixed a check
for incorrect error conditions, which could cause the application to crash or
return illogical error messages.
* Bugfix: Issue #119: Fix a problem that caused frame set generation to fail
sometimes. It seems to be related to the nremap() issue.
* Generally revisited documentation, logging, and display texts. Improved grammar,
formatting, and fixed quite a few typos that escaped all proofreading sessions.
* The FFmpeg API INFO and DEBUG level log output has been changed to the
FFmpegfs DEBUG level. What FFmpeg considers "INFO" is far too chatty.
* Frequent memory reallocations when creating HLS segments have been reduced to
speed up processing.
* Optimised logging to save CPU time by not formatting log entries that are not
written anyway at their log level.
* Logging has been revised to shorten file paths and remove mount, input, and
cache paths. Log the additional portion only to reduce log file size and improve
readability.
* Bugfix: To fix the build with GCC 12, add the missing include headers
(closes: #1012925).
Important changes in 2.10 (2022-04-26):
* Feature: Issue #123: New command line option to hide files by extension. Example:
--hide_extensions=jpg,png,cue would stop covers and cue sheets from showing up.
* Feature: Issue #120: Added subtitle support. Subtitle streams can now also be
transcoded to the output files. Separate SRT or VTT files will be incorporated
as subtitle streams.
* Bugfix: Fixed memory leak in encode_audio_frame().
* Bugfix: Issue #122: Last song was missing from cuesheet files.
* Bugfix: Issue #129: Files remained zero size when previously transcoded.
* Bugfix: Issue #130: Fix file sizes can be incorrectly reported by ls but are
correct when data is read.
* Bugfix: Duration was not saved in cache SQLite database.
* Bugfix: Issue #131: Sometimes video parameters for some Blu-ray or DVD chapters
cannot be detected by FFmpeg API. Transcode then failes - fixed by using data
from the Blu-ray directory or DVD IFO instead.
* Lowest supported FFmpeg API version raised to 4.1.8 "al-Khwarizmi".
* Dropped libavresample support, library was removed from FFmpeg API after 3.4.9.
* Deprecated previous channel layout API based on uint64 bitmasks.
* Deprecated swr_alloc_set_opts() and swr_build_matrix().
* Going C++17 now: The packet queue has been recoded in C++17 to support
external subtitles files. As C++17 is required now, why not go all the way:
Starting to replace legacy C++ and somewhat C-like parts with real C++.
* Using std::shared_ptr to ensure proper memory allocation/free.
Important changes in 2.9 (2022-02-16):
* Feature: Issue #97: Added options to chose different codecs. The audio codec
can be selected with --audiocodec, for videos use --videocodec.
* Feature: Issue #109: Allow user defined file extensions for source files. By
default, only standard extensions are accepted, i.e., mp4, ts, avi etc.
Arbitrary file extensions can be defined now, e.g. using
--extensions=xxx,abc,yxz,aaa to also convert files ending with .xxx, .abc and
so on.
* Feature: Issue #121: Added MKV support. New format can be selected with
--desttype=mkv.
* Bugfix: Issue #112: Fixed Docker detection.
* Bugfix: Issue #110: Docker build command failed, added missing libchardet
and allow libdvdread4 or *8 to be used, whatever available.
* Bugfix: Fixed crash when video had no audio.
* Bugfix: Issue #112: Fixed access problems with frame sets and HLS.
* Bugfix: Issue #119: Fixed problem that caused frame set generation to
fail sometimes.
* Bugfix: Fixed JPG frame set generation. Suddenly FF_COMPLIANCE_UNOFFICIAL was
required to have FFmpeg API accept the codec.
* Enhancement: Issue #67: Enhance file size prediction.
* Bugfix: Need to synchronise screen log. Concurrent entries by separate flags
created garbled output.
* Bugfix: Avoid creating an HLS segment number which is out of bounds
(higher than the expected number of segments).
* Enhancement: Removed QMake support, replaced with CMake.
Important changes in 2.8 (2021-11-29):
* Bugfix: Issue #102: Not all SQL queries where case sensitive, causing cache
confusion. Several database entries were created, but only one was updated.
Made all queries case sensitive.
* Bugfix: Issue #91: Fixed HLS problems with cache causing garbled videos and
hick-ups in audio. Make sure that the cache is clean when transcoding starts.
There should be no remains left, all segments must be created or recreated
anyway. Do not append to cache when writing. This caused cache files to
become larger and larger.
* Enhancement: Issue #103: If requested HLS segment is less than X (adjustable)
seconds away, discard seek request. Segment would be available very soon
anyway, and that seek makes a re-transcode necessary. Can be set with
--min_seek_time_diff. Defaults to 30 seconds.
* Feature: Issue #105: Added Free Lossless Audio Codec (FLAC) support.
Activate with *--desttype=FLAC*.
* Feature: Issue #101: Sample format for audio files can be selected via
command line with --audiosamplefmt. Possible values are 0 to use the predefined
setting, 8, 16, 32, 64 for integer format, F16, F32, F64 for floating point.
Not all formats are supported by all destination types, selecting an invalid
format will be reported as error and a list of values printed.
Defaults to 0 (Use same as source or the predefined format of the destination
if source format is not possible).
Important changes in 2.7 (2021-11-08):
* Bugfix: Issue #92: Fixed crash when hardware decoding failed. The problem
is that the FFmpeg API very late reports that it cannot decode the file in
hardware. To find out about that, the source file must be decoded until the
first video frame is encountered.
It would be very time consuming to do this on every file (decode until it
is clear that the file is supported, then actually start transcoding it
from scratch). There is no feasible way to automatically handle the
situation. To get around this a --hwaccel_dec_blocked parameter has been
added.
If hardware decoding fails, check the log for a message similar this:
"[vp9 @ 0x7fe910016080] No support for codec vp9 profile 0."
If VP9 profile 0 is not supported, the parameter would be:
--hwaccel_dec_blocked=VP9:0
This will tell FFmpegfs to decode the file in software. To block VP9
as a whole, the parameter would be --hwaccel_dec_blocked=VP9. To block
both profile 0 and 1, use --hwaccel_dec_blocked=VP9:0:1.
The parameter can be repeated to block even more codecs.
* Bugfix: Issue #96: Fixed potential buffer overrun and crash when reading
corrupted input files.
* Enhancement: Issue #99: Report command line error if --desttype specifies
audio format first, or if the second format is not audio only. Avoid
misinterpretations. For example, --desttype=aiff+mov would create MOV
files out of any input. Correct would be --desttype=mov+aiff which will
create MOV files out of videos and AIFF from audio files, as expected.
Important changes in 2.6 (2021-09-04):
* No new features, just a bugfix. See V2.4 for details.
Important changes in 2.5 (2021-06-18)
* Feature: Issue #63 - Hardware acceleration for encoding/decoding is partly
implemented, VAAPI/MMAL/OMX/V4L2 are currently available only.
- Supported hardware: V4L2/VAAPI (Intel) and V4L2/MMAL/OMX (Raspberry).
- VAAPI: H264, H265/HEVC, MPEG-2 and VP-8 decoding and H264 encoding.
- VAAPI: MJPEG and VC-9 do not work (yet).
- MMAL: H264, MPEG-2, MPEG-4 and VC1 decoding.
- OMX: H264 encoding.
- V4L2: H263, H264, H265, MPEG1/2/4, VC-1, VP8/9 encoding/decoding.
* Feature: Added unit tests for hardware acceleration. Failing tests will
report as SKIPPED and not fail the whole test.
* Note: Which hardware en/decoder actually works depends on what your hardware
supports.
* Call for testers: Have a CUDA capable graphics adapter and interested in
testing? Please write me an E-Mail.
Important changes in 2.4 (2021-09-04)
* Bugfix: Issue #90: Make sure that one keyframe gets inserted at the start of
each HLS segment.
Important changes in 2.3 (2021-06-11)
* Enhancement: Issue #80: Open input video codec only if target supports
video. Saves resources: no need to decode video frames if not used.
* Enhancement: Issue #81: If source format has no audio, and the target supports
no video (e.g.WAV/MP3), the files have shown up zero sized. These will now not
be visible when doing ls. When trying to open them "File not found" will be
returned.
* Added "configure --enable-debug" to create binaries with debug symbols.
Defaults to the optimised version.
* Feature: Issue #73: Cue sheet tracks now play "gapless" if played in order.
Whenever a track is started, the next track will automatically be transcoded
as well.
* Feature: Issue #66 and issue #82: Added cue sheet support. If a file with cue
extension is found with the same name as a media file or if a cue sheet is
embedded into it (a tag named CUESHEET), tracks defined in it will show up in a
virtual directory.
* Feature: Issue #83: Character conversion for cue sheet files. Automatically
detects the character encoding of the cue sheet. and converts as necessary.
* Feature: Issue #78: Duplicate ARTIST to ALBUMARTIST tag if empty
* Feature: Issue #79: Added Docker support.
* Fixed deprecation: 2021-03-17 - f7db77bd87 - lavc 58.133.100 - codec.h
Deprecated av_init_packet()
* Fixed API compatitbility: Many pointers made const as of 2021-04-27. Although
reasonable, this breaks API compatibility with versions older than 59.0.100,
* Bugfix: find_original "fallback" method did not correctly handle the new filename
format (extension added, not the original one replaced).
* Bugfix: Issue #87: Segments are now properly separated, making sure that e.g.
segment 3 only goes from 30 seconds up to 40 (including 30, but not 40 seconds).
* Bugfix: Issue #88: HLS audio and video now stay in sync after longer playback
(more than 30 minutes) or after seek operations.
Important changes in 2.2 (2021-02-06)
This is a maintenance release, bugfixes only.
* Bugfix: Issue #75: Fix crash when opening mp3 output with Dolphin.
* Bugfix: Issue #70: Possible crash in Buffer::init: Should not assert if duration is 0
(and thus segment count 0). Report internal error and go on.
* Bugfix: Issue #70: Do not set duration to 0 from cache but leave unchanged. Caused HLS
transcoding to fail if more than one transcoder was concurrently started.
* Bugfix: Possible crash in transcoder_thread: Decoder object could have been used
after being freed.
* Bugfix: Stupid blooper. WAV and AIFF size was always calculated for a mono file,
thus for stereo files resulting in only half the correct size.
* Bugfix: Corrected documentation, "make checks" should read "make check", funny this
went unnoticed for over 3 years...
* Bugfix: Issue #74: Album arts were only copied from MP3/4 sources. Removed restriction,
if the input file contains an album art it will be copied to the target (if
supported, of course, e.g., to mp3 or mp4. Ogg is not yet supported because
embedding album arts in Ogg can only be done by an unofficial workaround).
* Bugfix: Issue #71:: Virtual directories were missing dot and dot-dot nodes.
Important changes in 2.1 (2020-12-14)
* Feature: Add BLURAY_VIDEO_FORMAT_2160P (UHD)
* Feature: Implemented in 1.7, removed experimental state for --win_smb_fix now.
Windows seems to access the files on Samba drives starting at the last 64K segment
simply when the file is opened. Setting --win_smb_fix=1 will ignore these attempts
(not decode the file up to this point).
* Feature: --win_smb_fix now defaults to 1 (fix on by default). Has no effect
if the drive is accessed directly or via Samba from Linux.
* Bugfix: Fixed grammatical error in text: It's "access to", not "access at".
* Bugfix: Did not transcode some source files with invalid DTS.
* Bugfix: Cosmetical - No need to log date/time twice in syslog.
* Bugfix: Cosmetical - Fix man page/online help for --recodesame parameter.
* Bugfix: Report correct segment duration
* Bugfix: Avoid crash if opening next HLS segment failed. Should not ignore this, but report
it instead and stop transcoding.
* Cosmetical: Log cache close action at trace level
* Cosmetical: Shorter log entry when opening cache files
Important changes in 2.0 (2020-09-13)
Hurray! This is release 2.0!
* Feature: No new features, new release 2.0 after feature freeze.
* Bugfix: Issue #64 - Fixed playback stopping prematurely on some files.
Important changes in 1.99 (2020-07-18)
* Libav support has been dropped. There is no activity on https://git.libav.org/?p=libav.git
since 21.08.2019, and some features that FFmpegfs required were already lagging behind
FFmpeg API. Supporting Libav already bound a lot of my time that I could better spend
on new features or fixes for FFmpegfs.
* Feature: Add PNG/BMP/JPG frame sets to 'make check'. Checks number of files and cp
operations in arbitrary order with wildcards and absolute file names.
* Feature: Add HLS segments to 'make check'. Checks number of segments, the segment sizes
and correct file names.
* Feature: Moved FFmpeg capabilities (formats) from --version/-V command to new -caps/-c
parameter to keep version information brief.
* Bugfix: Issue #61 - fix timeout problem when accessing JPG in arbitrary order.
* Bugfix: Issue #58 - Build list when ls/cp path/to/flles/00001.png is done. Access failed
because the file was not found.
* Bugfix: Issue #59 - *.m3u8 files were tried to be transcoded while they should simply be
passed through. Added to ignore and pass through list.
* Bugfix: Issue #57 - Correctly expand tilde when ~/ is used, for example in
"ffmpegfs --logfile=~/ffmpegfs.log".
* Bugfix: Issue #60 - Reopen cache file after it has been closed so that image frames can
be accessed after the file has been fully decoded.
Important changes in 1.98 (2020-04-15)
* Cool, there's an online revivew on Linux Uprising, you can read it here:
https://www.linuxuprising.com/2020/03/ffmpegfs-is-fuse-based-filesystem-for.html
* Support: FFmpegfs has recently been added to Debian sid and Debian Bullseye. It is also
available in Ubuntu 20.04 and Linux distributions based on it.
* Feature: HLS: Introducing direct segment access. If e.g. segment no. 333 is opened,
ffmpegfs will seek to this position and start transcoding the segment
immediately. *Please note that this feature is still experimental and may
produce unexpected results.*
* Support: No longer creating a user/group ffmpegfs while "make install". The user is not really
required, just bloats the system's user database.
* Support: Reduced quality of the test video to make the distribution archive slimmer. A full
HD (1920x1280) video at 60 frames per second was a bit of an overkill anyway.
720x400 at 30 fps should be enough for everybody.
* Feature: Cache dir changed to ${XDG_CACHE_HOME:-~/.cache}/ffmpegfs (as specified in the XDG
Base Directory Specification). Falls back to ${HOME:-~/.cache}/ffmpegfs if not
defined. Only if executed with root privileges, "/var/cache/ffmpegfs" will be used
(e.g. if invoked via /etc/fstab entry).
* Feature: Changed PTS generation: For DVD/Blu-ray chapters they will not start at 0 for each
chapter, but at the real time the chapter begins in its title. Fixes #51.
* Feature: Issue #52 - Added --audiochannels option to select a different number of channels.
Defaults to 2 (stereo), may be set to 1 to create mono files. Set to 0 to keep the
original number of channels.
* Bugfix: Issue #46 - Ensure the selected bitrate is used. Files could become much larger than
expected. There's a strange FFmpeg API behaviour behind that, added the solution used
in ffmpeg.c to fix.
* Bugfix: Issue #48 - Properly handle incorrectly authored DVDs with missing SRI_END_OF_CELL
marks after cells.
* Bugfix: Issue #49 - Avoid creating HLS last segments shorter than 200 ms, avoid stalls when
the total playtime is a multiple of the segment size, e.g. 10 seconds.
* Bugfix: Issue #54 - Made sure no duplicate filenames get created. This changes the output name
scheme, e.g. if two files xyz.ts and xyz.wmv exist and the destination type is mp4,
two output files named xyz.ts.mp4 and xyz.wmv.mp4 appear. An additional file xyz.mp4
will show up with its real name.
To continue using the old names, add --oldnamescheme=1 to the command line.
* Bugfix: Online help and docs state --autocopy=OFF would turn the function off, but this
actually was NONE. Changed to match documentation.
* Known bug: Libav support for videos seems broken. Not sure if this will be fixed or Libav be
simply dropped.
Important changes in 1.97 (2020-01-21)
* Support:
* Feature: Added support for HLS (HTTP Live Streaming). Select desttype=hls to enable.
* Feature: Added checks for mov/mp4/prores/webm video format.
* Bugfix: Moved video deinterlace filtering before rescaling. Deinterlace does not work properly on
rescaled videos, what a suprise. Especially caused strange results on Blu-ray sources,
created blurred frames if downscaled from HD to SD (or lower) before deinterlacing.
* Bugfix: Avoid EINVAL errors in case the cache file ends up at zero size. Minor problem, but ugly.
* Bugfix: Cache structure was not properly initialised, causing invalid values in the database.
* Bugfix: Properly handle case when start_time is AV_NOPTS_VALUE (frame sets only)
* Bugfix: Corrected mistake in online help: clear-cache should be clear_cache instead.
* Bugfix: Issue #43 - fix garbled first 12 frames. Enhanced overall picture quality.
* Workaround: Issue #45 - fix garbled Blu-ray/DVD playback. Just a workaround, the problem is
somewhere else.
* Due to copyright uncertanties and because the public domain license used is controversal, all
demo files in test/srcdir have been replaced with own works and put under the CC0 1.0 Universal
license.
* Known bug: Libav support for videos seems broken. Not sure if this will be fixed or Libav be
simply dropped.
Important changes in 1.96 (2019-11-18)
This is a pre-release towards the new version 2.0 coming up soon.
* Feature: Added version check and auto update to cache database. Older database versions will
now automatically upgraded to the latest structure.
* Feature: Transcode videos to frame works transparently for any input now (DVD, Blu-ray and VideoCD).
* Bugfix: Fix for "prores can't allocate memory #41".
* Bugfix: Do not shrink cache when reopening it.
* Known bug:
Important changes in 1.95 (2019-05-23)
This is a pre-release towards the new version 2.0 coming up soon.
* Feature: Added transcode videos to frame images option. Video files can be mounted to folders
with jpg/png/bmp files for each video frame.
* Feature: Reencode to same file format as source file. Normally files that already have the selected
output format will not be recoded. Added --recodesame option to allow transcoding to the
same format.
Important changes in 1.11 (2020-04-15)
* Cool, there's an online revivew on Linux Uprising, you can read it here:
https://www.linuxuprising.com/2020/03/ffmpegfs-is-fuse-based-filesystem-for.html
* Support: FFmpegfs has recently been added to Debian sid and Debian Bullseye. It is also
available in Ubuntu 20.04 and Linux distributions based on it.
* Support: No longer creating a user/group ffmpegfs while "make install". The user is not really
required, just bloats the system's user database.
* Support: Reduced quality of the test video to make the distribution archive slimmer. A full
HD (1920x1280) video at 60 frames per second was a bit of an overkill anyway.
720x400 at 30 fps should be enough for everybody.
* Feature: Cache dir changed to ${XDG_CACHE_HOME:-~/.cache}/ffmpegfs (as specified in the XDG
Base Directory Specification). Falls back to ${HOME:-~/.cache}/ffmpegfs if not
defined. Only if executed with root privileges, "/var/cache/ffmpegfs" will be used
(e.g. if invoked via /etc/fstab entry).
* Feature: Changed PTS generation: For DVD/Blu-ray chapters they will not start at 0 for each
chapter, but at the real time the chapter begins in its title.
* Feature: Issue #52 - Added --audiochannels option to select a different number of channels.
Defaults to 2 (stereo), may be set to 1 to create mono files. Set to 0 to keep the
original number of channels.
* Bugfix: Issue #46 - Ensure the selected bitrate is used. Files could become much larger than
expected. There's a strange FFmpeg API behaviour behind that, added the solution used
in ffmpeg.c to fix.
* Bugfix: Issue #48 - Properly handle incorrectly authored DVDs with missing SRI_END_OF_CELL
marks after cells.
* Bugfix: Issue #54 - Made sure no duplicate filenames get created. This changes the output name
scheme, e.g. if two files xyz.ts and xyz.wmv exist and the destination type is mp4,
two output files named xyz.ts.mp4 and xyz.wmv.mp4 appear. An additional file xyz.mp4
will show up with its real name.
To continue using the old names, add --oldnamescheme=1 to the command line.
* Bugfix: Online help and docs state --autocopy=OFF would turn the function off, but this
actually was NONE. Changed to match documentation.
* Libav support has been dropped. There is not activity on https://git.libav.org/?p=libav.git
since 21.08.2019, and some features that FFmpegfs required were already lagging behind FFmpeg
API. Supporting Libav already bound a lot of my time that I could better spend on new features
or fixes for FFmpegfs.
Important changes in 1.10 (2020-01-21)
* Feature: Added checks for mov/mp4/prores/webm video format.
* Bugfix: Moved video deinterlace filtering before rescaling. Deinterlace does not work properly on
rescaled videos, what a suprise. Especially caused strange results on Blu-ray sources,
created blurred frames if downscaled from HD to SD (or lower) before deinterlacing.
* Bugfix: Avoid EINVAL errors in case the cache file ends up at zero size. Minor problem, but ugly.
* Bugfix: Cache structure was not properly initialised, causing invalid values in the database.
* Bugfix: Skip corrupted and discarded video frames to avoid blurps.
* Bugfix: Corrected mistake in online help: clear-cache should be clear_cache instead.
* Bugfix: Issue #43 - fix garbled first 12 frames. Enhanced overall picture quality.
* Workaround: Issue #45 - fix garbled Blu-ray/DVD playback. Just a workaround, the problem is
somewhere else.
* Due to copyright uncertanties and because the public domain license used is controversal, all
demo files in test/srcdir have been replaced with own works and put under the CC0 1.0 Universal
license.
* Known bug: Libav support for videos seems broken. Not sure if this will be fixed or Libav be
simply dropped.
Important changes in 1.9 (2019-11-18)
* Support: Code has now been tested to work on ARMv7 (32 bit).
* Feature: Documented the whole project with Doxygen.
* Feature: Implemented a thread pool. File open (and thread starts) are now much faster than before.
The thread pool also ensures that not more threads than configured are started. Defaults
to 16x the number of processor cores available.
* Feature: Added Apple Lossles Audio Compression (ALAC) support.
* Feature: Added optional graphviz to configure, only required for Doxygen.
* Feature: Updated INSTALL.md with missing prerequisites. Rearranged paragraphs, mentioning building
from git first was confusing.
* Feature: Moved cache directory from rather unusual /tmp/ffmpegfs location to /var/cache/ffmpegfs.
* Bugfix: Fixed several warnings if compiled for 32 bit.
* Bugfix: Removed unused xmlint prerequisite from configure.
* Bugfix: Video and audio was out of sync on android devices.
* Bugfix: Fix crash when Blu-ray video without audio was opened.
* Bugfix: Cache files were left at the predicted size if it was larger than the result size.
Size is now correctly capped to the correct result size.
* Fixed deprecation in fpcompare: 2018-04-01 - f1805d160d - lavfi 7.14.100 - avfilter.h
Deprecate use of avfilter_register(), avfilter_register_all(),
avfilter_next(). Added av_filter_iterate().
Important changes in 1.8 (2019-05-23)
This is a bugfix/maintenance release with only a few minor features added.
* Feature: Added Doxygen documentation.
* Feature: Report all errors together with error number.
* Feature: More detailed error handling.
* Feature: Added "make wipe-all" to really clean up all generated files.
* Bugfix: Do not report "Not a directory" error for virtual directories. Not an error, it's a feature.
* Bugfix: Fixed make dist: checks did not work.
* Bugfix: Fixed make clean: some Doxgen files were not removed.
* Bugfix: Properly catch "no memory" errors.
* Bugfix: Deinterlacing filter only worked for YUV videos.
* Bugfix: Removed the check for invalid chapters - did not work as expected.
* Bugfix: Wrong bitrate for PAL (was 30 fps instead of 25 fps) and assume PAL if bits are invalid.
* Bugfix: Fixed potential crash in DVD handling.
* Bugfix: Do not add libavresample if libswresample is present. Saves build time.
* Bugfix: Removed dependency on unused libdvdnav. Saves buildtime.
* Bugfix: Fixed two (probably rare but possible) crashes.
* Bugfix: Image now not converted when the destination type is a video format.
Important changes in 1.7 (2019-02-26)
* Feature: Windows seems to access the files on Samba drives starting at the last 64K segment
simply when the file is opened. Setting --win_smb_fix=1 will ignore these attempts (not decode the
file up to this point).
* Feature: Added "Auto Stream Copy" option. This will copy audio or video streams to the output file rather than
recoding. Reduces computing time and CPU load.
* Feature: Sped up DVD/Blu-ray/VCD access drastically. FUSE calls getattr like crazy, using cached data now.
* Feature: Extended stream copy: now any codec can be copied if supported by target container using --autocopy=MATCH option.
* Feature: Added full virtual titles to DVD, Blu-ray and Video CD. Creating one virtual file per chapter is very nice for
music disks as it allows access to every single title very easily. For movies it is better to have it in one
piece.
* Feature: Enhanced win_smb_fix=1 functionality to hopefully catch all Windows incidents.
* Feature: Added min_dvd_chapter_duration parameter. DVD chapters shorter than this will be ignored. Defaults to 1 second.
* Bugfix: Decimal seconds in duration was wrong. Fixed.
* Bugfix: This was a bad one: The application crashed with a protection fault if there was not enough disk space
on the cache drive. This is now properly reported and transcoding aborted. Thanks for Muf for reporting
the issue.
* Bugfix: Fixed crash when DVD nav packet was missing
* Bugfix: Fixed clang compatibility. Project did not build with clang, this has gone unnoticed for a while...
* Bugfix: Fixed terrible miscalculation of DVD play time. No one told me the values are BCD, not decimal...
* Bugfix: Fixed conversion of DVD chapters consisting of more than one cell.
* Bugfix: Fixed pts/dts generation
* Known bug: Some Blurays are not recoded properly. The resulting files are much larger than expected, as a matter of
fact larger than the source (birates > 27 MBit). Happens only for some sources.
Important changes in 1.6 (2019-01-11)
* Feature: Made all parameters like --profile case insensitive.
* Feature: Added Apple MOV, Apple Prores and Apple AIFF formats.
* Feature: Enable "Smart Transcoding": To enable, specify --desttype=AUDIO+VIDEO, e.g.
--desttype=MOV+AIFF will automatically convert video files to MOV and audio
to AIFF.
* Feature: New parameter --level allows selecting a profile for Prores: proxy, lt, standard
or hq.
* Feature: Added MOV target format
* Feature: Added AIFF target format
* Feature: Smart conversion option ("Smart Transcode")
* Feature: Added level option for Prores
* Feature: Added Apple Prores support
* Feature: Do not "upgrade" mono audio to stereo. Create mono audio stream.
* Feature: Speed up DVD conversion significantly by using IFO data instead of probing each chapter.
* Feature: Added DVD angle support.Chapters with angles will show as separate files.
* Feature: Speed up Blu-ray conversion significantly by using the directory instead of probing each chapter.
* Feature: Speed up VCD conversion.
* Feature: EXPERIMENTAL: Windows seems to access the files on Samba drives starting at the last 64K segment
simply when the file is opened. Setting win_smb_fix=1 will ignore these attempts (not decode the file
up to this point).
* Bugfix: Suspend/decoding timeouts did not work. Transcoding never timed out...
* Bugfix: Fixed memory leak when using the deinterlace option.
* Bugfix: Deinterlace did not always work.
* Bugfix: Fixed memory leaks.
* Bugfix: Report correct error if directory mounted twice.
* Bugfix: Silence chatty log outputs.
* Bugfix: Fixed GPF when accessed.
* Bugfix: Fixed GPF when channel layout changed during playback.
* Bugfix: If transcode failed, the error was sometimes not reported to the client process, causing it to hang.
* Bugfix: Sometimes tried to create WebM files with zero width (failed to transcode).
* Bugfix: Avoid mpeg-4 profile/pixel format mismatches.
* Bugfix: Fixed creating zero sized files from DVDs when chapter playtime < 1 s.
* Bugfix: Update timeout when client just holds the file open without reading.
* Bugfix: Properly honour client exit (end wait for data).
* Bugfix: Issue #23: do not block open with a read waiting for data.
* Bugfix: WebM files had no duration. Added duration to Matroska container.
* Bugfix: Fixed EOF detection for Blu-ray chapters.
* Bugfix: Force mpeg format for DVDs to avoid misdetections.
* Bugfix: Force mpegts format for Blurays to avoid misdetections.
* Bugfix: Take DVD chapter duration from IFO as probed playtime from VOB segment is sometimes wrong.
* Bugfix: Take Blu-ray chapter duration from directory as probed playtime from MTS segment is sometimes wrong.
* Fixed deprecation:
Important changes in 1.5 (2018-06-08)
* Feature: Added WebM output format using VP9 video and Opus audio codec.
* Feature: Input format check is now done by FFmpeg, that means if the input file is
supported by FFmpeg, it will be transcoded. For performance, files are not
opened and scanned, the file's extension is checked only (e.g. mp3, wav, rm etc.).
* Feature: Replaced mutagen-inspect with internal code which also works with WAV and WebM.
test_tags works for all formats now. python-mutagen is no longer required.
* Feature: Check if sample rate or sample format is supported by audio codec and change if
necessary. Avoid transcode fails e.g. if 44.1KHz sampling rate is requested but
not supported (e.g. OPUS only supports 8K, 16K, 24K or 48K). Select nearest
supported sample rate or sample format.
Important changes in 1.4 (2018-05-30)
* The timeout for suspend and abort have been changed. Decoding will now be suspended
after 15 seconds (formerly 2 minutes). If no activity is detected after further 15 seconds
(formerly 3 minutes) decoding will be aborted. This will only happen if the file is actively
closed, so if playback is simply paused decoding will continue. The new limits proofed to
be fine and reduce system load significantly.
* Feature: Enhanced logging, added a colour profile to screen logs and raised or lowered
some messages log levels appropriately. Also added a few informative log
messages.
* Feature: Blu-ray support: Detect Blu-ray files in directories and list separate chapters
and titles as separate files.
* Feature: DVD support: Detect IFO files and list separate DVD chapters or programs
as separate files.
* Feature: S/VCD support: Detect Video CDs in directories and list chapters
as separate files.
* Feature: Changed the fuse operations code module to c++ (minimise danger of
memory leaks or buffer overruns)
* Feature: Added --enablescript option that will add virtual index.php to every
directory. It reads scripts/videotag.php from the ffmpegs binary directory.
This can be very handy to test video playback. Of course, feel free to
replace videotag.php with your own script.
* Feature: By default ignore decoding errors so that transcoding does not stop just
because a few frames are garbled. Can be disabled with the "decoding_errors"
option.
* Bugfix: Sometimes the pixel format could not be detected, raising an assert/application
crash with newer FFmpeg API versions. Fixed by setting it to the output format.
This will mostly ever create defect encoder results, but at least the FFmpegfs
process will not be shut down writing a core file.
* Bugfix: Set mp4 profile to high/3.1 to enable playback under enable playback under
Win 7.
* Bugfix: Fixed formatting of help text.
* Workaround: Fixed Libav support: Deinterlace code did not compile. Should be possible
to get it working, but for now it is simply disabled.
But honestly I don't want to get it working. I am thinking of dropping
Libav completely.
* Fixed deprecation: 2018-xx-xx - xxxxxxx - lavf 58.9.100 - avformat.h
Deprecate use of av_iformat_next(), av_oformat_next().
Important changes in 1.3 (2018-05-04)
Changes in this release:
* Feature: Added option to deinterlace video if required (will improve picture
quality when viewed in browsers via HTML5.
* Feature: Set stream duration from source file as hint for encoder.
* Feature: Enhanced logging output for better readability.
* Feature: Added pre-buffer option. Files will be decoded up to this limit first
before made accessible. This ensures smooth startup.
* Feature: Enhanced configure that checks whether libavresample or libswresample
is present.
* Feature: Improved recoding detection. Files are recoded if the source file size
or timestamp changes, or different encoding options are selected
(e.g. a different bitrate, vidoe size etc.).
* Feature: Allow profiles for target browsers or players. Currently selectable:
NONE no profile
FF optimise for Firefox
EDGE optimise for MS Edge and Internet Explorer > 11
IE optimise for MS Edge and Internet Explorer <= 11
CHROME Google Chrome
SAFARI Apple Safari
OPERA Opera
MAXTHON Maxthon
Defaults to NONE
* Feature: enhanced error output for SQLite (if supported by library version)
* Feature: copy album arts from source if supported by target format (MP3/4).
Use --noalbumarts parameter to disable, e.g., for streaming files.
* Bugfix: Only four lines of code: Avoid locking other clients when trying to get
the size of a file currently being decoded. Also speeds up directory
access quite significantly.
* Bugfix: Fixed lost frames at end of files (files where cut short)
* Bugfix: Fixed crash when video files were transcoded to audio only (e.g. mp3)
* Bugfix: Make WAV size prediction more accurate
* Bugfix: Recode existing cache files if not found in database (handle database inconsistencies).
* Bugfix: Fixed sharing problems with sqlite database when accessed by multiple instances.
* Bugfix: Files were truncated (mostly mp3) when cp'ed directly while transcoding. Now files
will have the final size as expected.
* Bugfix: Create valid WAV header for files transcoded on-the-fly.
* Bugfix: Ensure a file gets recoded when the last attempt failed.
* Bugfix: Ensure that transcoding errors get passed on to calling process, e.g. cp or rsync.
Otherwise copy operations might not notice that the file is invalid.
FFMpeg has evolved, many API parts have been deprecated and will be dropped
soon. This release adopts these changes by conditionally using the new
APIs from the FFMpeg version on that they are available.
* Fixed deprecation: 2017-xx-xx - xxxxxxx - lavr 4.0.0 - avresample.h
Deprecate the entire library. Merged years ago to provide compatibility
with Libav, it remained unmaintained by the FFmpeg project and duplicated
functionality provided by libswresample.
swresample is the preferred library in FFMpeg, so it will be used if compiled
with FFMpeg by default, even before being deprecated. With libav, which
makes libavresample available only, the latter will be used.
* Fixed deprecation: 2016-04-21 - 7fc329e - lavc 57.37.100 - avcodec.h
Added a new audio/video encoding and decoding API with decoupled input
and output -- avcodec_send_packet(), avcodec_receive_frame(),
avcodec_send_frame() and avcodec_receive_packet().
* Fixed deprecation: 2018-01-xx - xxxxxxx - lavf 58.7.100 - avformat.h
Deprecate AVFormatContext filename field which had limited length, use the
new dynamically allocated url field instead.
* Fixed deprecation: 2018-xx-xx - xxxxxxx - lavf 58.9.100 - avformat.h
Deprecate use of av_register_input_format(), av_register_output_format(),
av_register_all(), av_iformat_next(), av_oformat_next().
NOTE: av_iformat_next/av_oformat_next() lack a replacement (currently
still used in tools/probetest.c "static void probe" in 58.10.100)
* Fixed deprecation: 2018-xx-xx - xxxxxxx - lavc 58.10.100 - avcodec.h
Deprecate use of avcodec_register(), avcodec_register_all(),
av_codec_next(), av_register_codec_parser(), and av_parser_next().
Added av_codec_iterate() and av_parser_iterate().
* Fixed deprecation: 2016-04-11 - 6f69f7a / 9200514 - lavf 57.33.100 / 57.5.0 - avformat.h
Added AVStream.codecpar, deprecate AVStream.codec.
* Fixed deprecation: 2018-04-01 - f1805d160d - lavfi 7.14.100 - avfilter.h
Deprecate use of avfilter_register(), avfilter_register_all(),
avfilter_next(). Added av_filter_iterate().
nschlia@oblivion-software.de
Important changes in 1.2 (2018-04-03)
Changes in this release:
* Fixed issue #4: File size was wrong when file was first accessed.
* Fixed issue #5: Fixed crashes when transcoding.
* Feature: None. This a bug fix release.
nschlia@oblivion-software.de
Important changes in 1.1 (2018-03-19)
Changes in this release:
* Fixed: make clean for checks did not delete all logs
* Feature request #1: WAV output support (by github user Avuton)
* Feature: OGG output support
* Fixed: Did not write correct ID3v2 headers (thanks for the fix to gitbug user sdrik)
* Feature: Include configure command line arguments and host OS in "-V" option.
* Feature: Added --videoheight=HEIGHT and --videowidth=WIDTH parameters to allow
video size change. If source video is larger it will be scaled down.
If already smaller the size will be left as is. You should only set
one parameter, if both are set the aspect ratio may be changed and the
result look strange.
* Feature: Added clear_cache option to clear the whole cache everytime
the application is started.
* Note: Dropped ISMV option as it did not work as expected, especially creating an
mp4 on-the-fly did not work. The streamlined mp4 format already does the work.
nschlia@oblivion-software.de
Important changes in 1.00 (2018-01-19)
Changes in this release:
* Cheers! Made it! This is release version 1.0, the first production release.
* Fixed compile for FFmpeg versions prior to 3.0.
nschlia@oblivion-software.de
Important changes in 0.95 (2017-12-29)
NOTE: The cache format has changed and is not compatible with prior versions.
Please do a "rm -Rf /tmp/ffmpegfs" before starting this version to
create a new cache.
TODO: see new TODO file from now on.
Changes in this release:
* Heureka! This is the first beta release towards V1.0. From now on only bug
fixes will go into the code.
* Implemented automatic cache maintenance (ensure cache size, disk space, delete
outdated entries).
* Fixed checks ("make check" works now. Known problem: mp4 sizes seem to differ
when using different FFmpeg releases. Will be addressed soon.).
* Fixed mp3 format (The mp3s were completely braindead.).
* Fixed suspend timeout coming although file currently accessed.
* Fixed crash during shutdown because sqlite was used too late.
* Fixed handling of multiple destination types in same cache.
* Properly pass on errno/save and store in cache database.
* Additional database fields for target parameters (bitrate, error code etc.).
Will be used in later versions to detect if a file needs re-transcoding.
* Files will be recoded if source file changes (size or timestamp).
* Report compiler version when run with -v parameter.
* Set gcc optimisation higer (now -o3).
nschlia@oblivion-software.de
Important changes in 0.94 (2017-12-19)
Changes in this release:
* Decided to rename mp3fs to FFmpegfs because the project has grown far beyond
a simple clone of mp3fs and the changes it will surely never be pushed back
to the parent project. A big random applause to the makers of mp3fs for giving
me a good head start!
* Cache management: Keep cache size within limit, ensure min. disk space, prune
oldest entries
* Fixed many crashes
* Fixed memory leaks
* Fixed mp4 check suite
* Added mp3 check suite
* Added --disable_cache parameter
* Added --prune_cache parameter. Starts cache pruning manually.
* TODO: Add intelligent stream copy, e.g., if transcoding a transport stream
that already represents a H264 video stream it would be possible to
simply repackage it to a mp4 container without recoding.
* TODO: Cover art support still missing
nschlia@oblivion-software.de
Important changes in 0.92-FFmpeg (2017-12-14)
Changes in this release:
* Files will now be decoded to /tmp/ instead of memory.
* Full support for video files (mp4 target only).
* Removed --statcachesize option as caching will be handled by new disk cache.
* Fixed sync problems while accessing the same file concurrently
* Fixed many crashes due to incorrect usage of FFmpeg
* Cache directory user defineable
* Delete cache entries after predefined time
* Detect if file has changed and re-transcode
* Limit cache size
* Suspend transcode after n seconds
* Exit transcode after n seconds
* TODO: Add intelligent stream copy, e.g., if transcoding a transport stream
that already represents a H264 video stream it would be possible to
simply repackage it to a mp4 container without recoding.
nschlia@oblivion-software.de
Important changes in 0.91-FFmpeg (2017-10-04)
Added FFmpeg for decoding and encoding.
Changes in this release:
* Replaced decoding and encoding with FFmpeg.
* Removed discrete FLAC/Ogg/MP3 libraries. FFmpeg supports a wide range of
formats, including these, so they are no longer required.
* TODO: Supports a huge number of file formats now (run "mp3fs --codecs" for
a list).
* The standard target format is mp4 now (use "-o mp3" or "--output mp3"
to change back to mp3).
* Many other formats are possible, e.g. "-o ogg", they will be added later
because due to the manner in which Fuse requires access to the files they
need to be implemented with care.
* See manual or run "mp3fs -h" for even more new options.
* Run "mp3fs -f" to get a list of all supported input formats.
* Caching of file attributes is now the default as if
"--statcachesize=500" was given. Added "--statcachesize=0" to turn off
(not really a bright idea, though).
* TODO: Files will now be decoded to /tmp/ instead of memory if larger
than 100MB. Added "--maxmemcache=X" to change. Examples for X: 80000,
80MB or 1GB. Do not set to a too large value as you may run out of
memory.
* TODO: Support for video files.
* TODO: Add intelligent stream copy, e.g., if transcoding a transport stream
that already represents a H264 video stream it would be possible to
simply repackage it to a mp4 container without recoding.
nschlia@oblivion-software.de
Important changes in 0.91 (2014-05-14)
This is mainly bug fixes.
Changes in this release:
* Fixed a segfault caused by an overflow reading the list of available
decoders.
* A number of problems with the previous distribution tar are now fixed.
* The output of `mp3fs --version` has been made more complete.
Important changes in 0.9 (2014-04-06)
This is a major new release, and brings us very close to a 1.0 release!
Changes in this release:
* All transcoding code has been completely rewritten. Encoding and
decoding have been abstracted out into base classes defining interfaces
that can be implemented by different codec classes, with just a FLAC
decoder and MP3 encoder at the moment.
* The build system has been modified as well to support this usage.
* A number of small bugs or code inefficiencies have been fixed.
Important changes in 0.32 (2012-06-18)
This release has a lot of bug fixes and some code cleanup.
Changes in this release:
* The file size calculation should always be correct.
* A crash affecting programs like scp that might try to access past the
end of the file has been fixed.
* Too many other little fixes were made to list here. See the ChangeLog
for full details.
Important changes in 0.31 (2011-12-04)
This is a minor update, with bug fixes and a new feature.
Changes in this release:
* The ReplayGain support added earlier now can be configured through the
command line.
* Filename translation (from .flac to .mp3) is now fixed on filesystems
such as XFS that do not populate dirent.d_type.
* A couple other minor bugs fixes and changes were made.
Important changes in 0.30 (2010-12-01)
This is a major new release, and brings mp3fs much closer to an eventual
1.0 release.
Changes in this release:
* Support for additional metadata tags has been added. (From Gregor
Zurowski)
* Documentation improvements: the help message is more useful, and a man
page has been added.
* Choosing bitrate is now done with a command-line or mount option, rather
than the old comma syntax.
* A new option to select LAME encoding quality is now available. (From
Gregor Zurowski)
* Debug output can be enabled at runtime.
* Old external libraries included in distribution (StringIO, talloc) have
been removed and replaced.
* Numerous bug fixes have been made. (Some from Gregor Zurowski)
...
0.01 Initial release 06/Aug/2006
========================================================================
Copyright (C) 2010-2014 K. Henriksson
Copyright (C) 2017-2023 Norbert Schlia (FFmpeg support)
This documentation may be distributed under the GNU Free Documentation License
(GFDL) 1.3 or later with no invariant sections, or alternatively under the GNU
General Public License (GPL) version 3 or later.