[mythtv-users] Converting MythTV Frame/time to ffmpeg time?

Philipp Hahn pmhahn+mythtv at pmhahn.de
Mon Jan 25 07:51:00 UTC 2016


Hello,

I have several recordings from DVB-C (Europe/Germany, so PAL with 720p,
50Hz) already with H.264, which MythTranscode refuses to cut losslessly.
I normally start my recordings 2 minutes early and let it record 5
minutes after the scheduled end to not miss anything.
I now try to remove those extra seconds to save space.  I've then set
two cut points to cut the beginning and ending.

As MythTranscode refuses to cut H.264 itself (`mythtranscode --mpeg2
--honorcutlist` errors out with 'no more queue slots' or other error
messages), it seems I have to do it myself using ffmpeg directly. Bug I
can't convert the MythTV frame number or time stamp to something ffmpeg
understand or is exact. There also seems to be different values for the
end:

# chanid="13120"
# starttime="20150715225300"
# mythutil -q --chanid "$chanid" --starttime "$starttime" --getcutlist
Cutlist: 0-12129,175474-185836

If I open the cut-list editor in the frontend and go to the very end, I
get a different frame number:

Frame   Time
     1    00:00:021
 12129    04:02.600
175474    58:29.500
185776  1:01:55.540
^^^^^^ At least the last one is different from the output of
--getcutlist above?

If I directly look at the SQL tables, I get yet another set of values:

mysql> SELECT * FROM recordedmarkup WHERE starttime="20150715225300" AND chanid="13120";
+--------+---------------------+--------+------+---------+
| chanid | starttime           | mark   | type | data    |
+--------+---------------------+--------+------+---------+
|  13120 | 2015-07-15 22:53:00 |  12129 |    0 |    NULL |
0=MARK_CUT_END
|  13120 | 2015-07-15 22:53:00 |      1 |   12 |    NULL |
12=MARK_ASPECT_16_9
|  13120 | 2015-07-15 22:53:00 |      1 |   30 |    1280 |
30=MARK_VIDEO_WIDTH
|  13120 | 2015-07-15 22:53:00 |      1 |   31 |     720 |
31=MARK_VIDEO_HEIGHT
|  13120 | 2015-07-15 22:53:00 |      1 |   32 |   50000 |
32=MARK_VIDEO_RATE: 50 Hz
|  13120 | 2015-07-15 22:53:00 |      0 |   33 | 3720000 |
33=MARK_DURATION_MS: 3729.000s = 1:02:00.000
|  13120 | 2015-07-15 22:53:00 |      0 |   34 |  185785 |
34=MARK_TOTAL_FRAMES: yet another value?
|  13120 | 2015-07-15 22:53:00 |      0 |   -3 |    NULL |
-3=MARK_UPDATED_CUT
|  13120 | 2015-07-15 22:53:00 |   7014 |    4 |    NULL |
|  13120 | 2015-07-15 22:53:00 |  12126 |    5 |    NULL |
|  13120 | 2015-07-15 22:53:00 | 175468 |    4 |    NULL |
|  13120 | 2015-07-15 22:53:00 | 186260 |    5 |    NULL |
4=MARK_COMM_START
5=MARK_COMM_END
|  13120 | 2015-07-15 22:53:00 | 175474 |    1 |    NULL |
1=MARK_CUT_START
+--------+---------------------+--------+------+---------+
13 rows in set (0.00 sec)


mysql> SELECT * FROM recordedseek WHERE starttime="20150715225300" AND chanid="13120" LIMIT 0,10;
+--------+---------------------+------+---------+------+
| chanid | starttime           | mark | offset  | type |
+--------+---------------------+------+---------+------+
|  13120 | 2015-07-15 22:53:00 |    0 |       0 |    9 |
|  13120 | 2015-07-15 22:53:00 |   32 |  378444 |    9 |
|  13120 | 2015-07-15 22:53:00 |   64 |  622092 |    9 |
|  13120 | 2015-07-15 22:53:00 |  100 |  940752 |    9 |
|  13120 | 2015-07-15 22:53:00 |  136 | 1305096 |    9 |
|  13120 | 2015-07-15 22:53:00 |  168 | 1673952 |    9 |
|  13120 | 2015-07-15 22:53:00 |  200 | 2103156 |    9 |
|  13120 | 2015-07-15 22:53:00 |  232 | 2615456 |    9 |
|  13120 | 2015-07-15 22:53:00 |  264 | 3061580 |    9 |
|  13120 | 2015-07-15 22:53:00 |  296 | 3604336 |    9 |
+--------+---------------------+------+---------+------+
10 rows in set (0.01 sec)
mysql> SELECT * FROM recordedseek WHERE starttime="20150715225300" AND chanid="13120" LIMIT 11480,10;
+--------+---------------------+--------+---------+------+
| chanid | starttime           | mark   | offset  | type |
+--------+---------------------+--------+---------+------+
|  13120 | 2015-07-15 22:53:00 | 185744 | 3714900 |   33 |
|  13120 | 2015-07-15 22:53:00 | 185776 | 3715540 |   33 |
+--------+---------------------+--------+---------+------+
2 rows in set (0.02 sec)


So how does one convert the MythTV values to something I can pass to
ffmpeg to get the exact cut points?
My tries with frame * 1s/50 have failed so far, which leads to the
output file to still start with some frames before or after the exact
frame, etc.

Thanks in advance.
Philipp
-- 
  / /  (_)__  __ ____  __ Philipp Hahn
 / /__/ / _ \/ // /\ \/ /
/____/_/_//_/\_,_/ /_/\_\ pmhahn at pmhahn.de


More information about the mythtv-users mailing list