Jump to content

New Plugin - Custom Scripting | Emby ScripterX


Anthony Musgrove

Recommended Posts

ChrisHammond56

Question on trigger event. I have successfully configured the plugin to execute a BASH script for the onLiveTVRecordingStart event. This is working perfectly. I wish to complete my integration by adding more events to Scripter-X.

The background here is that I am using an M3U IPTV source in Emby, and the BASH script changes to the desired channel. For Scheduled recording or by clicking Record in EMby, the BASH script is called. However, for Live TV playback (once a channel is selected), the onLiveTVRecrdfingStart event is not called (obviously). So, my question is, can events be added to Scripter-X for example onLiveTVStart onLiveTVChannelChange (or onLiveTVChannelUp/Down maybe?)

This way, I can point my three events (Playback/Channel Change and Recording) to the BASH script assuming that %nnnnnnn.channel.numner% and %xxxxxx.tuner.url% can be included in the trigger parameters.

If you can these events included, it would really make my day. Now if only Emby could sort out the multiple MU3 Tuner issue :)

Link to comment
Share on other sites

On 8/29/2020 at 12:40 PM, ltek said:

Can this send POST commands and replace the built-in Webhooks (which is nearly useless)?

Need more robust triggers for Emby like Tautulli has for Plex.  Looking for solution to automating lighting and such for Home Theater / Home Automation.

thx

 

On 8/29/2020 at 1:50 PM, PenkethBoy said:

indirectly - yes

once an event is triggered - then your script can do a POST/GET etc via the emby api

 

On 8/29/2020 at 2:38 PM, ltek said:

Hoping @Anthony Musgrove  can include a feature to directly send POST commands that include criteria his plugin already uses. Emby's API exposes POST too.  Having separate scripts that need to read/parse and then send POST is a tedious. 😞   Emby's lack of easy integration for home theater and home automation may push me to Plex.

 

I just discovered this extremely useful plugin! And coming here, I see that its creator, Anthony, hasn't been heard from for a while. I hope he's OK!

Even though I know @ltek and @PenkethBoy had the conversation I quoted above about six weeks ago, I wanted to reply in case this info is still useful to either of them. More than three months before you discussed it here, seemingly unaware of this feature, Anthony did indeed give the Scripter-X plugin the ability to natively call a webhook, without needing to write any script. I've tried it and it works great. See this post for details:

To use the feature, all you need to do is create a JSON file that will act as a template for the webhook payload. Within the template you use the same data field names (like %username%) that are shown in the plugin UI for that event. Then, in the UI, you click the plus (+) for the event you want to send a webhook for, and instead of pointing to a script you give it the URL of your webhook receiver and instead of "cmd" or "bash" you use "web:post" and then the parameter is the path to your JSON template file (which must be accessible from your Emby server). Simple, flexible, and works great.

Edited by harrv
  • Like 1
Link to comment
Share on other sites

PenkethBoy

cool - thanks - missed that amongst all the stuff Anthony did

yes i hope he is ok

and that he makes a return

Link to comment
Share on other sites

22 hours ago, PenkethBoy said:

cool - thanks - missed that amongst all the stuff Anthony did

yes i hope he is ok

and that he makes a return

Yeah, scary times. Hoping for the best.

If something sad has happened and we don't see Anthony here again, I worry his plugin could be dead in the water unless someone can find its source code somewhere (and finds it to be open source). Initially I thought that it would be possible for someone to fork the Scripter-X GitHub repo that Anthony created, and continue it from there. However, after examining it I see that repo doesn't actually have any of the plugin source code. It only has some example scripts and an example package that show some of the ways you can use Scripter-X. It also has a somewhat outdated binary .dll file that is the actual plugin, but no source code to build it (and the one in the Emby catalog is newer anyway).

Although the plugin is definitely useful the way it is now, especially as a way to trigger web hooks for events that Emby doesn't expose via their web hook feature yet, during the course of using it for the first time yesterday for a few hours I found several bugs, so not having a maintainer for it could make it less-than-ideal to use. Thankfully all but one or two of the bugs I encountered yesterday were minor and could be worked around. The one that will be harder for me to work around (but not impossible) is that replacement values that have JSON special characters in them are inserted into the JSON payload as-is with no escaping, causing the JSON to be invalid and unparsable. Very few values in Emby would have characters like that though--the most common being the '\' character found in Windows or UNC paths. That character is also the JSON escape character. It needs to be doubled when a literal '\' is desired in a JSON string.

Anyway, yeah, all that to say I'm hoping for the best for our friend (who I've never met, but think fondly of for even having come up with the idea of making this plugin!).

 

Edited by harrv
Link to comment
Share on other sites

PenkethBoy

Hi - yes at some point the plugin will stop working once the server code moves on far enough - which will be a shame.

if you look in the closed issues on git - Anthony was asked to open the source up but he said no - as he was going to make the plugin a premium feature

as for the escaping of special characters i have used it a lot (with paths etc) and do not get that issue - if you could give an example there might be something i do different that might get you past that etc

Link to comment
Share on other sites

sfatula
39 minutes ago, PenkethBoy said:

Hi - yes at some point the plugin will stop working once the server code moves on far enough - which will be a shame.

if you look in the closed issues on git - Anthony was asked to open the source up but he said no - as he was going to make the plugin a premium feature

as for the escaping of special characters i have used it a lot (with paths etc) and do not get that issue - if you could give an example there might be something i do different that might get you past that etc

Someone (perhaps me for example) should probably have asked him as a follow up to put the code into escrow then in case of abandonment for x time. He may not have done that either, but, it's a fair thing to ask for closed source with one developer. He didn't have to necessarily use an expensive agent. 

But hopefully he's ok and whatever issue(s) he is facing will subside. 

Link to comment
Share on other sites

In terms of something that would be easier for us to support, what if we had someone whip up a standalone app that can receive webhook notifications from the Emby webhooks feature, and then launch scripts of your choice depending on the notification?

In other words, it would essentially act as a passthrough from webhook to command line.

Then, as you need more new notifications, or more data attached to them, we simply add them to webhooks and everybody wins, both the webhooks crowd and the scripting crowd.

  • Like 2
Link to comment
Share on other sites

PenkethBoy

You would also need to enhance significantly the existing webhooks currently in emby as i dont think they match the sophistication of what anthony did

Link to comment
Share on other sites

12 minutes ago, PenkethBoy said:

You would also need to enhance significantly the existing webhooks currently in emby as i dont think they match the sophistication of what anthony did

Which is fine because the web hooks users have been asking for enhancements anyway.

  • Like 2
Link to comment
Share on other sites

Anthony Musgrove

Hey guys, thank you so much for your concern :) Ive been working flat out and moving house and things have been crazy!  I will be back into this very soon thpugh and I am so excited to be back :)

  • Like 6
Link to comment
Share on other sites

PenkethBoy
5 minutes ago, Anthony Musgrove said:

Hey guys, thank you so much for your concern :) Ive been working flat out and moving house and things have been crazy!  I will be back into this very soon thpugh and I am so excited to be back :)

Great and Great

welcome back cobba :)

Link to comment
Share on other sites

  • 2 weeks later...
ginjaninja
On 06/11/2020 at 14:49, MangoMC said:

Is it possible to script with that plugin something to stop playpack when ppl try to transcode HEVC?

i guess you could script off the onplaybackstart event..you could use user and filename tokens  to mostly target a specific session in api, but if you want to stop all hevc transcoding thats perhaps not an issue.

then you need  endpoints in the api that would provide the info/control

/sessions, seems to show the original codec , wether its being transcoded (playmethod) and wether remote control commands are supported.

/Sessions/{Id}/Command....may be end point that you can use to send 'stop' to.

of course this wont stop it before it begins but stop it soon after (if it could be made to work)...

[
  {
    "PlayState": {
      "PositionTicks": 41188580,
      "CanSeek": true,
      "IsPaused": false,
      "IsMuted": false,
      "VolumeLevel": 100,
      "AudioStreamIndex": 1,
      "MediaSourceId": "ebeb612b66c7d14a33c491d655b8adca",
      "PlayMethod": "DirectStream",
      "RepeatMode": "RepeatNone",
      "SubtitleOffset": 0,
      "PlaybackRate": 1
    },
    "AdditionalUsers": [],
    "RemoteEndPoint": "192.168.4.31",
    "PlayableMediaTypes": [
      "Audio",
      "Video"
    ],
    "PlaylistIndex": 0,
    "PlaylistLength": 1,
    "Id": "3bfe9d16c8e2892705fca0bf10db94a2",
    "ServerId": "fccaa6f897f140dbb689938224ae1938",
    "UserId": "6cc6d0fa039849af8147592f5da46188",
    "UserName": "Nicholas Bird",
    "Client": "Emby Web",
    "LastActivityDate": "2020-11-11T10:08:23.8933781Z",
    "DeviceName": "Chrome",
    "NowPlayingItem": {
      "Name": "Jayde Adams, Josie d’Arby, Rufus Hound and Scott Mills (2/5)",
      "ServerId": "fccaa6f897f140dbb689938224ae1938",
      "Id": "511563",
      "DateCreated": "2020-10-30T21:28:20.0000000+00:00",
      "PresentationUniqueKey": "a71871c0188748e410881f6fbd8d86b9-004 - 0012",
      "Container": "mkv",
      "PremiereDate": "2020-10-27T00:00:00.0000000+00:00",
      "ExternalUrls": [
        {
          "Name": "TheTVDB",
          "Url": "https://thetvdb.com/?tab=episode&id=7996093"
        }
      ],
      "Path": "L:\\TVDoNotKeep\\Richard Osman's House of Games\\Season 04\\Richard Osman's House of Games - S04E12 - Jayde Adams, Josie d’Arby, Rufus Hound and Scott Mills (2+5).mkv",
      "Overview": "Jayde Adams, Josie d’Arby, Rufus Hound and Scott Mills test their general knowledge skills on today's House of Games.",
      "Taglines": [],
      "Genres": [
        "Games & Quizzes"
      ],
      "RunTimeTicks": 17312600000,
      "ProductionYear": 2020,
      "IndexNumber": 12,
      "ParentIndexNumber": 4,
      "ProviderIds": {
        "Tvdb": "7996093"
      },
      "IsFolder": false,
      "ParentId": "510913",
      "Type": "Episode",
      "Studios": [],
      "GenreItems": [
        {
          "Name": "Games & Quizzes",
          "Id": 211757
        }
      ],
      "ParentBackdropItemId": "389180",
      "ParentBackdropImageTags": [
        "55f91cf32e06cf1aba16027954c71f21"
      ],
      "SeriesName": "Richard Osman's House of Games",
      "SeriesId": "389180",
      "SeasonId": "510913",
      "PrimaryImageAspectRatio": 1.7777777777777777,
      "SeriesPrimaryImageTag": "ee2f6bbe69fcb23b9804200e2d7b9c07",
      "SeasonName": "Season 4",
      "MediaStreams": [
        {
          "Codec": "h264",
          "ColorTransfer": "bt709",
          "ColorPrimaries": "bt709",
          "ColorSpace": "bt709",
          "TimeBase": "1/1000",
          "CodecTimeBase": "1/50",
          "VideoRange": "SDR",
          "DisplayTitle": "720p H264",
          "NalLengthSize": "4",
          "IsInterlaced": false,
          "IsAVC": true,
          "BitRate": 1430221,
          "BitDepth": 8,
          "RefFrames": 1,
          "IsDefault": true,
          "IsForced": false,
          "Height": 720,
          "Width": 1280,
          "AverageFrameRate": 25,
          "RealFrameRate": 25,
          "Profile": "Main",
          "Type": "Video",
          "AspectRatio": "16:9",
          "Index": 0,
          "IsExternal": false,
          "IsTextSubtitleStream": false,
          "SupportsExternalStream": false,
          "Protocol": "File",
          "PixelFormat": "yuv420p",
          "Level": 40,
          "IsAnamorphic": false
        },
        {
          "Codec": "aac",
          "Language": "eng",
          "TimeBase": "1/1000",
          "CodecTimeBase": "1/48000",
          "Title": "Stereo",
          "DisplayTitle": "English AAC stereo (Default)",
          "DisplayLanguage": "English",
          "IsInterlaced": false,
          "ChannelLayout": "stereo",
          "BitRate": 192000,
          "Channels": 2,
          "SampleRate": 48000,
          "IsDefault": true,
          "IsForced": false,
          "Profile": "LC",
          "Type": "Audio",
          "Index": 1,
          "IsExternal": false,
          "IsTextSubtitleStream": false,
          "SupportsExternalStream": false,
          "Protocol": "File"
        }
      ],
      "ImageTags": {
        "Primary": "e497681cbc0c0bd689e535493195fbee"
      },
      "BackdropImageTags": [],
      "Chapters": [
        {
          "StartPositionTicks": 0,
          "Name": "Chapter 1"
        },
        {
          "StartPositionTicks": 3000000000,
          "Name": "Chapter 2"
        },
        {
          "StartPositionTicks": 6000000000,
          "Name": "Chapter 3"
        },
        {
          "StartPositionTicks": 9000000000,
          "Name": "Chapter 4"
        },
        {
          "StartPositionTicks": 12000000000,
          "Name": "Chapter 5"
        },
        {
          "StartPositionTicks": 15000000000,
          "Name": "Chapter 6"
        }
      ],
      "MediaType": "Video",
      "Width": 1280,
      "Height": 720
    },
    "DeviceId": "958e4948-00fd-4c33-999d-e994eb35d23f",
    "ApplicationVersion": "4.6.0.5",
    "AppIconUrl": "https://github.com/MediaBrowser/Emby.Resources/raw/master/images/devices/chrome.png",
    "SupportedCommands": [
      "MoveUp",
      "MoveDown",
      "MoveLeft",
      "MoveRight",
      "PageUp",
      "PageDown",
      "PreviousLetter",
      "NextLetter",
      "ToggleOsd",
      "ToggleContextMenu",
      "Select",
      "Back",
      "SendKey",
      "SendString",
      "GoHome",
      "GoToSettings",
      "VolumeUp",
      "VolumeDown",
      "Mute",
      "Unmute",
      "ToggleMute",
      "SetVolume",
      "SetAudioStreamIndex",
      "SetSubtitleStreamIndex",
      "RefreshMediaSource",
      "DisplayContent",
      "GoToSearch",
      "DisplayMessage",
      "SetRepeatMode",
      "SetSubtitleOffset",
      "SetPlaybackRate",
      "ChannelUp",
      "ChannelDown",
      "PlayMediaSource",
      "PlayTrailers"
    ],
    "SupportsRemoteControl": true
  },
  {
    "PlayState": {
      "CanSeek": false,
      "IsPaused": false,
      "IsMuted": false,
      "RepeatMode": "RepeatNone",
      "SubtitleOffset": 0,
      "PlaybackRate": 1
    },
    "AdditionalUsers": [],
    "RemoteEndPoint": "192.168.4.162",
    "PlayableMediaTypes": [],
    "PlaylistIndex": 0,
    "PlaylistLength": 0,
    "Id": "7c9149dacce9009bf6202d1d2ddbfbea",
    "ServerId": "fccaa6f897f140dbb689938224ae1938",
    "Client": "nickapp",
    "LastActivityDate": "2020-11-11T10:08:19.8753227Z",
    "DeviceName": "Chrome",
    "DeviceId": "fccaa6f897f140dbb689938224ae1938",
    "ApplicationVersion": "4.5.0.11",
    "SupportedCommands": [],
    "SupportsRemoteControl": false
  },
  {
    "PlayState": {
      "CanSeek": false,
      "IsPaused": false,
      "IsMuted": false,
      "RepeatMode": "RepeatNone",
      "SubtitleOffset": 0,
      "PlaybackRate": 1
    },
    "AdditionalUsers": [],
    "RemoteEndPoint": "192.168.4.13",
    "PlayableMediaTypes": [
      "Audio",
      "Video"
    ],
    "PlaylistIndex": 0,
    "PlaylistLength": 0,
    "Id": "dc2be329055d18ff5705d1aa28caf2c4",
    "ServerId": "fccaa6f897f140dbb689938224ae1938",
    "UserId": "6cc6d0fa039849af8147592f5da46188",
    "UserName": "Nicholas Bird",
    "Client": "Emby for Android Mobile",
    "LastActivityDate": "2020-11-11T10:03:09.6069702Z",
    "DeviceName": "Galaxy S8+",
    "DeviceId": "6fea097c6c11e5fc",
    "ApplicationVersion": "3.1.44",
    "AppIconUrl": "https://github.com/MediaBrowser/Emby.Resources/raw/master/images/devices/android.png",
    "SupportedCommands": [
      "MoveUp",
      "MoveDown",
      "MoveLeft",
      "MoveRight",
      "PageUp",
      "PageDown",
      "PreviousLetter",
      "NextLetter",
      "ToggleOsd",
      "ToggleContextMenu",
      "Select",
      "Back",
      "SendKey",
      "SendString",
      "GoHome",
      "GoToSettings",
      "VolumeUp",
      "VolumeDown",
      "Mute",
      "Unmute",
      "ToggleMute",
      "SetVolume",
      "SetAudioStreamIndex",
      "SetSubtitleStreamIndex",
      "RefreshMediaSource",
      "DisplayContent",
      "GoToSearch",
      "DisplayMessage",
      "SetRepeatMode",
      "SetSubtitleOffset",
      "SetPlaybackRate",
      "ChannelUp",
      "ChannelDown",
      "PlayMediaSource",
      "PlayTrailers"
    ],
    "SupportsRemoteControl": true
  },
  {
    "PlayState": {
      "CanSeek": false,
      "IsPaused": false,
      "IsMuted": false,
      "RepeatMode": "RepeatNone",
      "SubtitleOffset": 0,
      "PlaybackRate": 1
    },
    "AdditionalUsers": [],
    "RemoteEndPoint": "::1",
    "PlayableMediaTypes": [
      "Audio",
      "Video"
    ],
    "PlaylistIndex": 0,
    "PlaylistLength": 0,
    "Id": "fc979cd242cea208056ee85f7801fed6",
    "ServerId": "fccaa6f897f140dbb689938224ae1938",
    "UserId": "6cc6d0fa039849af8147592f5da46188",
    "UserName": "Nicholas Bird",
    "Client": "Emby Web",
    "LastActivityDate": "2020-11-11T08:34:07.7617514Z",
    "DeviceName": "Chrome",
    "DeviceId": "TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzcyLjAuMzYyNi4xMjEgU2FmYXJpLzUzNy4zNnwxNTUyNzM5MTY1MzY5",
    "ApplicationVersion": "4.6.0.5",
    "AppIconUrl": "https://github.com/MediaBrowser/Emby.Resources/raw/master/images/devices/chrome.png",
    "SupportedCommands": [
      "MoveUp",
      "MoveDown",
      "MoveLeft",
      "MoveRight",
      "PageUp",
      "PageDown",
      "PreviousLetter",
      "NextLetter",
      "ToggleOsd",
      "ToggleContextMenu",
      "Select",
      "Back",
      "SendKey",
      "SendString",
      "GoHome",
      "GoToSettings",
      "VolumeUp",
      "VolumeDown",
      "Mute",
      "Unmute",
      "ToggleMute",
      "SetVolume",
      "SetAudioStreamIndex",
      "SetSubtitleStreamIndex",
      "RefreshMediaSource",
      "DisplayContent",
      "GoToSearch",
      "DisplayMessage",
      "SetRepeatMode",
      "SetSubtitleOffset",
      "SetPlaybackRate",
      "ChannelUp",
      "ChannelDown",
      "PlayMediaSource",
      "PlayTrailers"
    ],
    "SupportsRemoteControl": false
  },
  {
    "PlayState": {
      "CanSeek": false,
      "IsPaused": false,
      "IsMuted": false,
      "RepeatMode": "RepeatNone",
      "SubtitleOffset": 0,
      "PlaybackRate": 1
    },
    "AdditionalUsers": [],
    "RemoteEndPoint": "::1",
    "PlayableMediaTypes": [
      "Audio",
      "Video"
    ],
    "PlaylistIndex": 0,
    "PlaylistLength": 0,
    "Id": "6ff56edc17d3530167d5b39c95835bfa",
    "ServerId": "fccaa6f897f140dbb689938224ae1938",
    "UserId": "6cc6d0fa039849af8147592f5da46188",
    "UserName": "Nicholas Bird",
    "Client": "Emby Mobile",
    "LastActivityDate": "2020-11-11T01:54:50.6281979Z",
    "DeviceName": "Chrome",
    "DeviceId": "TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzcyLjAuMzYyNi4xMjEgU2FmYXJpLzUzNy4zNnwxNTUyNzM5MTY1MzY5",
    "ApplicationVersion": "4.6.0.5",
    "AppIconUrl": "https://github.com/MediaBrowser/Emby.Resources/raw/master/images/devices/chrome.png",
    "SupportedCommands": [
      "MoveUp",
      "MoveDown",
      "MoveLeft",
      "MoveRight",
      "PageUp",
      "PageDown",
      "PreviousLetter",
      "NextLetter",
      "ToggleOsd",
      "ToggleContextMenu",
      "Select",
      "Back",
      "SendKey",
      "SendString",
      "GoHome",
      "GoToSettings",
      "VolumeUp",
      "VolumeDown",
      "Mute",
      "Unmute",
      "ToggleMute",
      "SetVolume",
      "SetAudioStreamIndex",
      "SetSubtitleStreamIndex",
      "RefreshMediaSource",
      "DisplayContent",
      "GoToSearch",
      "DisplayMessage",
      "SetRepeatMode",
      "SetSubtitleOffset",
      "SetPlaybackRate",
      "ChannelUp",
      "ChannelDown",
      "PlayMediaSource",
      "PlayTrailers"
    ],
    "SupportsRemoteControl": true
  }
]

 

Edited by ginjaninja
Link to comment
Share on other sites

ginjaninja

can anyone think of a way to fire an event when the nextup view changes...or is that a feature request?

Link to comment
Share on other sites

PenkethBoy

not sure there is an event for that but

the nextup row changes when you finish watching an episode of a series in the row i.e. its fully played

so i would do that and review the emby log to see what the app is calling to get the row - to give you a better idea

not sure what the actual criteria is for being in next up row as never looked but can guess 

Edited by PenkethBoy
  • Thanks 1
Link to comment
Share on other sites

  • 3 weeks later...
mbevacqua_1999

I am looking for an option to do live-tv recording post processing with Node-Js on a Synology NAS.  The events supported by this plugin seem to return a ton of meta data, but I'm not seeing much information on the actual content format.  This link.. https://emby-scripterx.info/  is giving me SSL errors, so I've only been able to browse the Git-Hub, so I may not have all the info.  I need to find out if a newly added video is interlaced, is that information available, or will I need external means of reading the file content?

Thanks

Link to comment
Share on other sites

Don't forget you can kick off post processing scripts directly without this plugin as well.

Link to comment
Share on other sites

PenkethBoy

Ok you are missing a step - this plugin is mainly focussed on giving you an event to monitor

you then use that to run your script that does the necessary work

what i do is get the event then run with the info and process the file - either before its finished recording or after - depending what we are trying to accomplish

Emby PP is very limited as it only provides you the path to the recorded file after its finished recording

 

Link to comment
Share on other sites

mbevacqua_1999

Thanks.... I think I'm going in the right direction here.  I've got a very slow Synology NAS running an ARM8 (~3hrs to transcode an 1hr of 1080p) that I can't/don't know how to access ffmpeg on.  When a video is done recording, I want to check if it is interlaced, and, if it is, copy it to a temp folder that is setup for Emby to auto convert on new media add.  When it is done converting, I'm presuming that Emby will generate another "new media added" event, at which time I will copy it back to the original folder and delete it from the temp folder. 

This is all so I can selectively do the transcode based on interlacing.  I don't see a way to be selective in the current Emby folder settings.  I had 3 hrs of video to autoconvert last night, it started at midnight and took 10hrs. 2hrs of that was already 1080p and did not need to be converted.

Enjoy

Link to comment
Share on other sites

PenkethBoy

you dont need to know if it is interlaced or not

ffmpeg will de-interlace if necessary put "-vf yadif" in the ffmpeg command line and it will work it out itself

or use ffprobe to see if the file is interlaced first

and i would use something else beside the NAS to do you ffmpeg work :) 

if you have a gpu use that - e.g. an hour recording of 1080p on my 980ti to h265 takes 6-10 mins depending on the original file spec

 

Link to comment
Share on other sites

mbevacqua_1999

PenkethBoy That is plan "B".  My goal here, since I don't know anything about accessing ffmpeg on the NAS (maybe I need more research on that), is to have Emby do all the transcoding work.  I am just moving files around and letting Emby's autoconvert pick up the file change and do the transcoding.  I don't need any special knowledge to copy/paste.

Having said that, if ffmpeg has a simple command line interface, and presumably Emby server installed ffmpeg on the NAS, maybe that method is as easy as finding where ffmpeg is located and feeding it the file to convert.  

Enjoy

Link to comment
Share on other sites

PenkethBoy

personally - i would avoid emby convert you have little to no control

read up on ffmpeg/ffprobe and see that you have huge power/control on what happens

look in the transcode/convert logs and you will see how to connect to ffmpeg on your nas

but we are getting way off topic for this thread - open a new thread and you will get more help there

Link to comment
Share on other sites

On 10/17/2020 at 1:34 AM, Luke said:

In terms of something that would be easier for us to support, what if we had someone whip up a standalone app that can receive webhook notifications from the Emby webhooks feature, and then launch scripts of your choice depending on the notification?

In other words, it would essentially act as a passthrough from webhook to command line.

Then, as you need more new notifications, or more data attached to them, we simply add them to webhooks and everybody wins, both the webhooks crowd and the scripting crowd.

I still like this idea, just saying. Changing to this would temporarily set this plugin backwards in terms of supported features, but in the long run it would reduce the dev effort and make two features more robust together at the same time.

  • Like 1
Link to comment
Share on other sites

  • 4 months later...
CJTripper
On 10/12/2020 at 7:58 AM, ChrisHammond56 said:

Question on trigger event. I have successfully configured the plugin to execute a BASH script for the onLiveTVRecordingStart event. This is working perfectly. I wish to complete my integration by adding more events to Scripter-X.

The background here is that I am using an M3U IPTV source in Emby, and the BASH script changes to the desired channel. For Scheduled recording or by clicking Record in EMby, the BASH script is called. However, for Live TV playback (once a channel is selected), the onLiveTVRecrdfingStart event is not called (obviously). So, my question is, can events be added to Scripter-X for example onLiveTVStart onLiveTVChannelChange (or onLiveTVChannelUp/Down maybe?)

This way, I can point my three events (Playback/Channel Change and Recording) to the BASH script assuming that %nnnnnnn.channel.numner% and %xxxxxx.tuner.url% can be included in the trigger parameters.

If you can these events included, it would really make my day. Now if only Emby could sort out the multiple MU3 Tuner issue :)

Hi Chris,

I was able to accomplish channel change for playback using the onPlaybackStart (filter for LiveTvChannel) to pass the Channel Call Sign (%item.name%) to a PHP script and then search/parse/get the channel number from my .m3u tuner playlist file to use for my channel change. I don't have any hardware capable of testing the Channel Up/Down, but as long as it also triggers "onPlaybackStart" in Scripter-X, it should work for that too.

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...