Capto for Tablo (CLI Grabber)

The question is strange to me. Just update and try it. If it breaks let me know. Ive not had a single issue and im pretty sure im on the newest version.

1 Like

paranoia I guess. I’ve become relient on these tools - thanks!!

Well, now that you’ve mentioned it. This is the second time I’ve recently seen this

Wide character in print at script/capto.pl line 771.
[capto] [2019-08-25 13:00] (140598) This Old House — 40th Anniversary Special - s00e00 - 

The previous was in a Star Trek episode - Ep 29: Operation — Annihilate! (this was copyNpaste from MeTV)

I’ve pasted in to google and appears to be em dash You know, another one of those special characters they keep sticking in titles, descriptions and names from the guide data.

It’s unlikely related to firmware. It appears more of a warning than an error, it’s annoying mostly. I export that show, delete it and all is well. I used capto -e ID with nothing else and worked as expected.

Thanks again for the work!

twg.org appears to be down???

Browser times out when trying to connect.

Are you asking 3 questions???

I no longer support HTTP/80. You can reach the site here:
https://www.twg.org/capto/

I asking you a question, questioning my laptop, and questioning my own incompetence/ignorance :face_with_raised_eyebrow:

Would Capto work locally, i.e., extract the files from an old Tablo drive that is mounted as a local drive?

Hi tgwaste,
I installed capto on Ubuntu 19.10 and tested. Initially, when I tried to download an episode, I would get this:
./capto -e 299072 -f /home/rreed/Downloads/1234
[capto] datetime => Mon Jan 20 08:30:00 2020
[capto] duration => 1848
[capto] epid => 299072
[capto] episode => 11
[capto] epoch => 1579527000
[capto] eptitle => Stoop Planters; Fireplace Insert
[capto] recid => 69863
[capto] season => 18
[capto] series => Ask This Old House
[capto] title => Ask This Old House - s18e11 - Stoop Planters; Fireplace Insert
[capto] type => series
[capto] watchid => 299072
[capto]
[capto] [Control-C to Abort]
[capto]
[capto] /home/rreed/Downloads/1234.mp4
[capto] Progress: / (speed ) (size 0.00MB) [0%]
[capto] Export Completed in: 0h 0m 0s

And nothing downloaded. After some dinking around, I found that when I ran the ffmpeg binary in the capto directory, I get the error:
ffmpeg: error while loading shared libraries: libavdevice.so.57: cannot open shared object file: No such file or directory

So I moved the ffmpeg binary out of the folder and dropped a symlink in the folder to the ffmpeg binary already residing in /usr/bin. Then when I tried to download an episode, it worked, as shown below:
capto -e 299072 -f /home/rreed/Downloads/1234
[capto] datetime => Mon Jan 20 08:30:00 2020
[capto] duration => 1848
[capto] epid => 299072
[capto] episode => 11
[capto] epoch => 1579527000
[capto] eptitle => Stoop Planters; Fireplace Insert
[capto] recid => 69863
[capto] season => 18
[capto] series => Ask This Old House
[capto] title => Ask This Old House - s18e11 - Stoop Planters; Fireplace Insert
[capto] type => series
[capto] watchid => 299072
[capto]
[capto] [Control-C to Abort]
[capto]
[capto] /home/rreed/Downloads/1234.mp4
[capto] Progress: 00:31:15 / 00:30:47 (speed 14x) (size 1048.49MB) [101%]
[capto] Export Completed in: 0h 2m 15s

But the video and audio are out of sync. Is there anything I can to force the video and audio to resync?

Bob Reed

P.S. And please, no jokes about the This Old House video. I needed files for testing!

apt-get install ffmpeg
Then use -ffmpeg /path/to/ffmpeg with capto to make it use that. Only have to do it once. It’ll save path.

This is all very confusing to me?
I just want to export my recordings? What do I do? Where do I get it?
Richard

https://www.twg.org/capto/
Click the download button image

Use the instructions to install

Installation instructions:

  • tar -zxvf capto*tgz
  • apt-get -y install curl libdate-manip-perl libpar-packer-perl
  • ./capto -u -ip ip_or_host_of_tablo (example: ./capto -u -ip 10.0.1.6)

It works great on it’s own but I’ve found wrapto to be a great “add on”, but one thing at a time. You need to get capto it’s relatively easy to use and has little configuration involved.

I’ve discovered ways to get some great use from it, dump a list of recordings to selectively export. But if you just want to export shows from your tablo it can just dump them all or you can specify which you want.

mac version?

FYI, I just downloaded and tried capto for the first time (version 0.6). I had an issue with symptoms similar to rebel’s (immediate return with no transcoding).

After some experimentation, I found that if I specified the hostname in the -ip parameter (rather than the IP address), it caused capto to issue an invalid URL for the stream - for example:

http:///stream/pl.m3u8?Tzi7bDVq8b0nIO-Fs-BdyQ

(note the lack of a hostname or IP address in the URL).

By specifying the IP address, it works OK.

Any chance of getting that fixed?

ahagge,
This seems to actually be an issue with the Tablo API that @TabloSupport would need to fix. I have had similar issues with my tool…there is a prescribed process to get the streaming URL…it seems weird, but when you specify a name, which is not how Tablo knows itself, it doesn’t seem to issue a streaming url properly…it seems to drop the host name out (presumably because the server doesn’t know itself by that name…so, Capto is likely simply returning to you exactly what Tablo is giving it as the streaming URL

Discovered issues using names, virtually every aspect works… except streaming URL and you’ve discovered. @LJ_LongWing has some introspect. Here’s some what I’ve found, if you care, it’s not all specific to capto (witch I use daily) but issues are the same -

I’ve run across a small bug, where if an episode name contains a slash (/), it is not sanitized and becomes part of the output path rather than an escaped character as part of the file name. Here is an example:

jmenke@helga:/mnt/media/video/TV$ capto -s "Daytripper"
[capto] [2020-05-21 20:30] (2557072) The Daytripper - s11e11 - Palacios/Matagorda, TX
[capto] [2021-06-24 20:00] (3358302) The Daytripper - s09e02 - North Padre Island, TX

jmenke@helga:/mnt/media/video/TV$ capto -e 2557072 -f plex
[capto] datetime => Thu May 21 20:30:00 2020
[capto] duration => 1814
[capto] epid => 2557072
[capto] episode => 11
[capto] epoch => 1590111000
[capto] eptitle => Palacios/Matagorda, TX
[capto] recid => 1606349
[capto] season => 11
[capto] series => The Daytripper
[capto] title => The Daytripper - s11e11 - Palacios/Matagorda, TX
[capto] type => series
[capto] watchid => 2557072
[capto]
[capto] [Control-C to Abort]
[capto]
[capto] The Daytripper - s11e11 - Palacios/Matagorda TX.mp4
[capto] Progress:  / 00:30:13 (speed ) (size 0.00MB) [0%]
[capto] Export Completed in: 0h 0m 4s

No error output, just as if it completed without any progress. A stack trace shows ffmpeg attempting to write to the file path and failing, likely because it’s interpreting the specified file name as being prepended with a directory name:

wait4(9699, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 9699
write(1, "[capto] datetime => Thu May 21 20:30:00 2020\n", 45) = 45
write(1, "[capto] duration => 1814\n", 25) = 25
write(1, "[capto] epid => 2557072\n", 24) = 24
write(1, "[capto] episode => 11\n", 22) = 22
write(1, "[capto] epoch => 1590111000\n", 28) = 28
write(1, "[capto] eptitle => Palacios/Matagorda, TX\n", 42) = 42
write(1, "[capto] recid => 1606349\n", 25) = 25
write(1, "[capto] season => 11\n", 21)  = 21
write(1, "[capto] series => The Daytripper\n", 33) = 33
write(1, "[capto] title => The Daytripper - s11e11 - Palacios/Matagorda, TX\n", 66) = 66
write(1, "[capto] type => series\n", 23) = 23
write(1, "[capto] watchid => 2557072\n", 27) = 27
write(1, "[capto] \n", 9)               = 9
write(1, "[capto] [Control-C to Abort]\n", 29) = 29
write(1, "[capto] \n", 9)               = 9
write(1, "[capto] The Daytripper - s11e11 - Palacios/Matagorda TX.mp4\n", 60) = 60
write(1, "[capto] Starting...     \r", 25) = 25
stat("", 0x55e414c8e298)                = -1 ENOENT (No such file or directory)
pipe([6, 7])                            = 0
pipe([8, 9])                            = 0
clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7fb89c0a8790) = 9701
close(9)                                = 0
close(7)                                = 0
read(8, "", 4)                          = 0
close(8)                                = 0
ioctl(6, TCGETS, 0x7ffc74204fb0)        = -1 ENOTTY (Inappropriate ioctl for device)
lseek(6, 0, SEEK_CUR)                   = -1 ESPIPE (Illegal seek)
fcntl(6, F_SETFD, FD_CLOEXEC)           = 0
read(6, "ffmpeg version 3.2.12-1~deb9u1 Copyright (c) 2000-2018 the FFmpeg developers\n  built with gcc 6.3.0 (Debian 6.3.0-18+deb9u1) 20170516\n  configuration: --prefix=/usr --extra-version='1~deb9u1' --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-stripping --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-libmp3lame --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --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-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared\n  WARNING: library configuration mismatch\n", 8192) = 1225
stat("The Daytripper - s11e11 - Palacios/Matagorda TX.mp4", 0x55e414c8e298) = -1 ENOENT (No such file or directory)
write(1, "[capto] Progress:  /  (speed ) (size 0.00MB) [0%]     \r", 55) = 55
stat("The Daytripper - s11e11 - Palacios/Matagorda TX.mp4", 0x55e414c8e298) = -1 ENOENT (No such file or directory)
write(1, "[capto] Progress:  /  (speed ) (size 0.00MB) [0%]     \r", 55) = 55
stat("The Daytripper - s11e11 - Palacios/Matagorda TX.mp4", 0x55e414c8e298) = -1 ENOENT (No such file or directory)
write(1, "[capto] Progress:  /  (speed ) (size 0.00MB) [0%]     \r", 55) = 55
stat("The Daytripper - s11e11 - Palacios/Matagorda TX.mp4", 0x55e414c8e298) = -1 ENOENT (No such file or directory)
write(1, "[capto] Progress:  /  (speed ) (size 0.00MB) [0%]     \r", 55) = 55

I"ve never used the -f plex always quoted complete filenames - or used wrapto - Wrapto: Wrapper for Capto for Tablo in scripts.

…so You may have to use -f "The Daytripper - s11e11 - Palacios/Matagorda TX.mp4"

Well, I think that’s not exactly how it would be broken down for plex, but you probably already figured things out.

I have a feeling @tgwaste as moved on from capto and maybe even tablo from some of his posts

Yeah, even double-quoting the file name doesn’t work. I think they way it’s handling the file name before passing it to ffmpeg is simply not sanitizing that slash, so fmpeg is interpreting it as a literal relative path, and it’s trying to stat a file name in a directory that doesn’t exist.

I got around it by just changing the name (modifying the slash to an underscore).

I hadn’t realized he had abandoned the Tablo platform, but I see what you mean from his most recent activity.

I had problems with capto a year or so ago with the TLS or what it was with the HTTPS/security “deal”. It wouldn’t always process the file, I had it scripted to delete afterwards and I would end up loosing recordings.

It was really really great to have it all scripted via cron jobs and not have to worry about anything along with wrapto. I miss them both :slight_smile:
So I haven’t worked with it recently. I don’t recall ever having any issue with it not clearing special characters. I recall it always doing a great job. I do recall having some issues, with what I had and the developer, the had some settings/configurations different for their shell that weren’t “regular”.

I believe capto comes “self contained” with it’s own perl runtime, and maybe ffmpeg or your own, runs in your shell as you may have it configured.