Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Expected chapter end timestamp, found END=.97. #7

Closed
tvinhas opened this issue Nov 18, 2016 · 18 comments
Closed

Expected chapter end timestamp, found END=.97. #7

tvinhas opened this issue Nov 18, 2016 · 18 comments
Assignees
Labels

Comments

@tvinhas
Copy link

tvinhas commented Nov 18, 2016

Some of my recordings fails because the generated ffmeta file has the first chapter as:
[CHAPTER]
TIMEBASE=1/1
START=0
END=.97

This causes comskip to fail:
[ffmetadata @ 0x55744b6a0480] Expected chapter end timestamp, found END=.97.
[ffmetadata @ 0x55744b6a0480] Expected chapter start timestamp, found START=.97.
[ffmetadata @ 0x55744b6a0480] Expected chapter end timestamp, found START=.97.
Input #0, ffmetadata, from '/plex/The Big Bang Theory (2007) - S10E09 - The Geology Elevation.ffmeta':
Duration: 00:21:03.00, start: 0.000000, bitrate: 0 kb/s
Chapter #0:0: start 0.000000, end 115.000000
Chapter #0:1: start 0.000000, end 115.000000
Metadata:
END : 115.05
Chapter #0:2: start 115.000000, end 600.000000
Chapter #0:3: start 600.000000, end 1237.000000
Chapter #0:4: start 1237.000000, end 1263.000000
concat:/plex/The Big Bang Theory (2007) - S10E09 - The Geology Elevation.part-1.ts|/plex/The Big Bang Theory (2007) - S10E09 - The Geology Elevation.part-2.ts|/plex/The Big Bang Theory (2007) - S10E09 - The Geology Elevation.part-3.ts|/plex/The Big Bang Theory (2007) - S10E09 - The Geology Elevation.part-4.ts|/plex/The Big Bang Theory (2007) - S10E09 - The Geology Elevation.part-5.ts: No such file or directory
rm: cannot remove '/plex/The Big Bang Theory (2007) - S10E09 - The Geology Elevation.part-1.ts': No such file or directory

@tvinhas
Copy link
Author

tvinhas commented Nov 18, 2016

This is how my edl file looks like:

0.97 4.87 0
118.95 246.85 0
732.20 1001.77 0
1639.24 1815.38 0
1841.14 1859.19 0

I've changed the start chapter from 0.97 to 1.00 and now comcut works fine. We need to fix the logic because it was dropping the 0 and generating the ffmeta chapter as .97 instead of 0.97.

I have no idea how to do that though.

@BrettSheleski
Copy link
Owner

Could you test to see if the .ffmeta file has 0.97 instead of .97 (include leading zero) if ffmpeg accepts the metadata file?

If so, then it should be an easy fix to make sure comcut includes a leading zero.

@tvinhas
Copy link
Author

tvinhas commented Nov 18, 2016

No, the .ffmeta has .97, while the edl that comskip generates has the proper 0.97.

@tvinhas
Copy link
Author

tvinhas commented Nov 18, 2016

Here are the .edl and the .ffmeta:

0.97    4.87    0
118.95  246.85  0
732.20  1001.77 0
1639.24 1815.38 0
1841.14 1859.19 0
;FFMETADATA1
[CHAPTER]
TIMEBASE=1/1
START=0
END=.97
[CHAPTER]
TIMEBASE=1/1
START=.97
END=115.05
[CHAPTER]
TIMEBASE=1/1
START=115.05
END=600.40
[CHAPTER]
TIMEBASE=1/1
START=600.40
END=1237.87
[CHAPTER]
TIMEBASE=1/1
START=1237.87
END=1263.63

@BrettSheleski
Copy link
Owner

I guess I wasn't clear. Could you update the ffmeta file with the leading zero and run that into ffmpeg specifying it as the metadata file and see if that works?

@tvinhas
Copy link
Author

tvinhas commented Nov 18, 2016

Yes, it works.

@BrettSheleski
Copy link
Owner

K, good. Should be an easy fix then.

@BrettSheleski
Copy link
Owner

Just added a commit to handle this. Give it a shot.

@tvinhas
Copy link
Author

tvinhas commented Nov 18, 2016

Did not work. Here is the error:

ffmpeg version 3.2-1~16.04.york1 Copyright (c) 2000-2016 the FFmpeg developers
  built with gcc 5.4.1 (Ubuntu 5.4.1-3ubuntu1~ubuntu16.04.1york0) 20161019
  configuration: --prefix=/usr --extra-version='1~16.04.york1' --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-libtesseract --disable-stripping --disable-decoder=libschroedinger --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libebur128 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librubberband --enable-libschroedinger --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-opengl --enable-sdl2 --enable-x11grab --enable-libdc1394 --enable-libiec61883 --enable-openal --enable-frei0r --enable-libopencv --enable-libx264 --enable-chromaprint --enable-shared
  libavutil      55. 34.100 / 55. 34.100
  libavcodec     57. 64.100 / 57. 64.100
  libavformat    57. 56.100 / 57. 56.100
  libavdevice    57.  1.100 / 57.  1.100
  libavfilter     6. 65.100 /  6. 65.100
  libavresample   3.  1.  0 /  3.  1.  0
  libswscale      4.  2.100 /  4.  2.100
  libswresample   2.  3.100 /  2.  3.100
  libpostproc    54.  1.100 / 54.  1.100
Input #0, ffmetadata, from 'The Big Bang Theory (2007) - S10E09 - The Geology Elevation.ffmeta':
  Duration: 00:21:03.00, start: 0.000000, bitrate: 0 kb/s
    Chapter #0:0: start 0.000000, end 0.000000
    Chapter #0:1: start 0.000000, end 115.000000
    Chapter #0:2: start 115.000000, end 600.000000
    Chapter #0:3: start 600.000000, end 1238.000000
    Chapter #0:4: start 1238.000000, end 1263.000000
concat:The Big Bang Theory (2007) - S10E09 - The Geology Elevation.part-1.ts|The Big Bang Theory (2007) - S10E09 - The Geology Elevation.part-2.ts|The Big Bang Theory (2007) - S10E09 - The Geology Elevation.part-3.ts|The Big Bang Theory (2007) - S10E09 - The Geology Elevation.part-4.ts|The Big Bang Theory (2007) - S10E09 - The Geology Elevation.part-5.ts: No such file or directory
rm: cannot remove 'The Big Bang Theory (2007) - S10E09 - The Geology Elevation.part-1.ts': No such file or directory
root@plex:/plex/tmp#

Here is the generated .ffmeta:

;FFMETADATA1
[CHAPTER]
TIMEBASE=1/1
START=0.000000
END=0.970000
[CHAPTER]
TIMEBASE=1/1
START=0.970000
END=115.050000
[CHAPTER]
TIMEBASE=1/1
START=115.050000
END=600.370000
[CHAPTER]
TIMEBASE=1/1
START=600.370000
END=1238.080000
[CHAPTER]
TIMEBASE=1/1
START=1238.080000
END=1263.840000

If I manually change the 0.97 value on the edl file to 1.0, the script works just fine.

@BrettSheleski BrettSheleski self-assigned this Nov 18, 2016
@BrettSheleski
Copy link
Owner

Well it looks like I'll have to revert the last commit.

I thought you had said that when you added the leading zero to the ffmeta file things worked fine.

I want to avoid adding arbitrary rounding because things like that usually come back to haunt you.

I'll have to actually do some of my own testing to get this working.

@BrettSheleski
Copy link
Owner

I suspect this has to do with ffmpeg reading the START and END times in the metadata file as integer values.

I've done some testing with changing the TIMEBASE to 1/1000 and multiplying the START and END times by 1000 and things seem to work. However for some reason multiplying the start and end times in the script is causing the end time to not be written to the metadata file.

Once I figure this out I'll commit the change and you can confirm.

@BrettSheleski
Copy link
Owner

Yep, the ffmpeg documentation confirmes the above. It states that START and END must be integer values.

https://www.ffmpeg.org/ffmpeg-all.html#Metadata-1

That would explain why the decimal portion gets ignored.

BrettSheleski added a commit that referenced this issue Nov 22, 2016
@BrettSheleski
Copy link
Owner

Turns out it wasn't just the metadata file. When making temp files for each chapter it needs to specify the start time and duration of each part. Apparently that needs have a leading zero for durations less than 1 second.

@Reed97123
Copy link
Contributor

Playing around with this. I used the multiply by 1000 method and it seems to work for my example:

  1. Change the timebase:
    echo TIMEBASE=1/1000 >> "$metafile"
  2. Modify end and startnext:
    end=`awk -vp="${line[0]}" 'BEGIN{printf "%.0f" ,p*1000}'`
    startnext=`awk -vp="${line[1]}" 'BEGIN{printf "%.0f" ,p*1000}'`
  1. Modify the last end:
    echo END=`$ffmpegPath -i "$infile" 2>&1 | grep Duration | awk '{print $2}' | tr -d , | awk -F: '{ print ($1*3600)+($2*60)+$3 }'| awk '{printf "%.0f",$1*1000}'` >> "$metafile"

Before and after diff of the .edl files:

3c3
< TIMEBASE=1/1
---
> TIMEBASE=1/1000
5c5
< END=0.00
---
> END=0
8,10c8,10
< TIMEBASE=1/1
< START=0.00
< END=7.37
---
> TIMEBASE=1/1000
> START=0
> END=7370
13,15c13,15
< TIMEBASE=1/1
< START=7.37
< END=97.06
---
> TIMEBASE=1/1000
> START=7370
> END=97060
18,20c18,20
< TIMEBASE=1/1
< START=97.06
< END=250.18
---
> TIMEBASE=1/1000
> START=97060
> END=250180
23,25c23,25
< TIMEBASE=1/1
< START=250.18
< END=600.1
---
> TIMEBASE=1/1000
> START=250180
> END=600100

Works for this one example. Is this the same method you used? What issue did you see?

@BrettSheleski
Copy link
Owner

Take a look at the code commit, it's all in there.

In comcut it was already doing the math by piping to bc. I just added a multiply factor of 1000 in there.

echo START=`echo "($start - $totalcutduration) * 1000" | bc | awk '{printf "%i", $0}'` >> "$metafile"
echo END=`echo "($end - $totalcutduration) * 1000" | bc | awk '{printf "%i", $0}'` >> "$metafile"

I then added this to comchap similarly in this commit.

echo START=`echo "$end * 1000" | bc | awk '{printf "%i", $0}'`>> "$metafile"
echo END=`echo "$startnext * 1000" | bc | awk '{printf "%i", $0}'`>> "$metafile"

In both cases I'm then piping to awk to format the string as an integer. The only real advantage this does is if the START or END times are less than 1 it avoids a value starting with a decimal point.

The real problem with this bug, as it turns out, was not this. It had to do with the duration for chapters less than a second long and ffmpeg apparently needing a leading zero before the decimal point. Awk again took care of this by formatting the value as a floating point value. See this commit

duration=`echo "$end" - "$start" | bc | awk '{printf "%f", $0}'`

@Reed97123
Copy link
Contributor

Since you are already using awk, I'd recommend using it for the math as well. 'bc' isn't installed by default everywhere, whereas I believe awk is more universal. On my Ubuntu server 16.04, 'bc' wasn't installed by default.

@BrettSheleski
Copy link
Owner

Sounds like a good idea. I lifted using bc from some other inspirational script anyway. If you are feeling inspired, feel free to create a pull request resolving this. I likely won't be able to get to it for a few days.

@Reed97123
Copy link
Contributor

Sure I'll do it later this evening. I already worked out a working example.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants