ffmpeg-myth1: check the recording basename of the rec and tr-rec, if
they are equal, don't schedule a deletion
ffmpeg-myth0: institute an error handler around ffmpeg-myth1
ffmpeg-myth-do-pending-jobs: institute job control to prevent a collision
or previous recording on the same channel, that may overlap or abut
the current one.
To avoid error in the concatenation, we drop unknown streams and data streams.
ltbtranscodedtobedeleted table in mythconverg has been added:
CREATE TABLE `ltbtranscodedtobedeleted` (
`basename` varchar(256) NOT NULL,
`deleted` tinyint(1) NOT NULL DEFAULT '0',
`expirydate` datetime NOT NULL,
`updatetimestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8
MYTH-MERGE-TWO-RECORDINGS takes a recording chanid and starttime and
finds the next recording on that same chanid and uses the concat muxer
to merge the two files. The recording information is updated in
mythconverg.
We should check for compatibility, but don't at the moment.
FFMPEG-REMUX-TO-H264-TS remuxes a recording into an mpegts
container. The name is somewhat wrong, because it does not transcode
to h264, but the main use is in converting matroska to mpegts
containers, and all my mkvs use h264-encoded video.
With the new file endings, we need to split file names at #\. and pick
up the beginning (e.g. 1031_20210405000300) and add
ending (e.g. h264.ts) but drop any middle parts.
The current version of ffprobe,
ffprobe version 4.2.4-1ubuntu0.1 Copyright (c) 2007-2020 the FFmpeg developers
prints a value of 0 for each frame number in an h265-encoded
mpegts. So, we need to count for ourselves.
----
Experiments with h265-encoded videos shows that there is great
compression (~30-40% better than h264), but:
-the mythling player on android can't play them;
-the 8-yr old asus frontend can play cartoons fine, but not
"real-life" video
-transcoding is about 1/3 the speed with libx265 vs. libx264
I will revisit the issue when one of the first two points makes it
possible, but until one of them needs to be replaced, I will stick
with h264.
In v31 of mythtv, playback and editing of matroska-formatted
containers does not work well--seeking is broken so bookmarks,
jumping, etc. do not work.
So, an option to set the container format/muxer has been added to
FFMPEG-SPLIT+TRANSCODE-RECORDING, namely FFMPEG-TRANSCODED-FILE-MUXER,
and this is set to mpegts by default.
Because we relied on defaults for the matroska container, we have made
some things explicit (like using libx264 for the video codec). The
preset is also now veryfast, rather than slow, which is a recommended
setting on the ffmpeg users' mailing list.
FFMPEG-SPLIT+TRANSCODE-RECORDING also uses FFMPEG-TRANSCODING-OPTIONS
now, rather than hard-coded options.
If cut list is empty, set it to ((0 0)), so that concat list ends up
being ((0 N)) where N is either the last i-frame number or
greatest-fixnum.
When fed to the concat filter in ffmpeg-split+transcode-recording, the
recording will be transcoded.
With the current ffprobe [1], time or frame numbers for an I-frame may be
output that are invalid (N/A).
[1] ffprobe version 3.4.8-0ubuntu0.2 Copyright (c) 2007-2020 the FFmpeg developers
In some older video files, ffprobe returns N/A (and possibly other
non-numeric data) when it can't determine the PTS. These cause
problems and ruin a transcode.
In older versions of ffmpeg (incl. ffmpeg version 3.4.8-0ubuntu0.2 ),
using the end-time (-to) causes a syntax error, so we need to switch
to using the duration.
The library mis-match on ubuntu 18.04 seems impossible to fix, so
revert to using the system binaries.
This makes including a subtitle stream impossible for now, but moving
to the concat *filter* had made that pretty much impossible anyway,
because ffmpeg (even in HEAD) does not set the right PTS when the
input is in matroska format.
The release upgrade from 16.04 to 18.04 was not seamless.
LD_LIBRARY_PATH= ld ffmpeg.git/ffmpeg
ld: warning: libcdio_paranoia.so.1, needed by //usr/lib/x86_64-linux-gnu/libavdevice-ffmpeg.so.58, not found (try using -rpath or -rpath-link)
ld: warning: libcdio_cdda.so.1, needed by //usr/lib/x86_64-linux-gnu/libavdevice-ffmpeg.so.58, not found (try using -rpath or -rpath-link)
ld: warning: libbluray.so.1, needed by //usr/lib/x86_64-linux-gnu/libavformat-ffmpeg.so.58, not found (try using -rpath or -rpath-link)
ld: warning: libx265.so.79, needed by //usr/lib/x86_64-linux-gnu/libavcodec-ffmpeg.so.58, not found (try using -rpath or -rpath-link)
the original code used >= or <= as the test, but the code actually
implemented > or <. This causes an ffmpeg error when there is only 1
i-frame between the lower and upper bound.
-use the concat filter rather than segment+concat muxers
-currently, do not create a separate subtitle stream from closed
captions
-ffmpeg-myth-do-pending-jobs will look up recordings with a cutlist and
run the transcoder (ffmpeg-myth-cut) over each