Video transcoding web interface (self hosted)
from MajesticElevator@lemmy.zip to selfhosted@lemmy.world on 23 Apr 14:48
https://lemmy.zip/post/37058714

Hi! I’m looking for an open-source, preferably FOSS video transcoding web interface.

I would like the transcoding to be done on the server side, be secured by a password if possible (so people don’t 100% the server), and I want no data sharing. Most important feature: must allow web uploads. I don’t want to automate transcoding, or transcode files that are in the server: I want clients to be able to upload their media and get it transcoded.

The transcoding aspect is important: not just a change in container / file extension, but a real transcoding (changing video codec). Being able to change the bitrate is a plus.

I’ve been looking at many projects and most are sadly either too simple for my needs (only container change, no real ability to choose the codec, or unchangeable bitrate), or focused on files that are already on the server.

(something like a ffmpeg web UI that runs on the server would be great)

Thanks :)

#selfhosted

threaded - newest

scrubbles@poptalk.scrubbles.tech on 23 Apr 14:53 next collapse

I’ll ask the question why do you want something hosted, if you don’t want the files to be on the server too, or at least accessible via a mount. There’s a couple projects who do that for a reason, you can’t just upload an 80gb video file through a web interface simply. For home use it makes more sense for it to be connected to some sort of nas and you point it to the file on the nas, and then point where on the nas you want the output file.

As written, I don’t think you’ll find a lot. I think what may serve you better is finding a server solution that watches a directory and then runs transcodes based on pre defined templates, and spits them back out in a known location.

MajesticElevator@lemmy.zip on 23 Apr 15:00 collapse

Because I want to be able to transcode files from my phone, or from any device without having to install anything.

just_another_person@lemmy.world on 23 Apr 15:05 next collapse

It doesn’t quite work like that.

Are you just looking to view these files on different devices? Run Jellyfin and get live transcoding when the files are accessed.

If you’re sure you want a transcoding pipeline, check out Encore, or one of the handbrake webUI’s available.

MajesticElevator@lemmy.zip on 23 Apr 16:15 collapse

I want to view files on different devices but I really need the transcoding. Sometimes, I want to store compressed versions of media and I don’t want to install ffmpeg or similar.

I’ll check “Encore”, but handbrake has the problem of only taking files that are already on the server and not allowing web uploads

just_another_person@lemmy.world on 23 Apr 16:23 collapse

Again, this is why you’re misunderstanding transcoding. Let me explain…

So you want a workflow where you upload files and then they get transcoded…to what exactly? Do you have specific sizes, formats, and codecs in mind? Are you planning on keeping multiple copies of transcoded files around for use in the future? Do you have a set list of devices it needs to work for? This is why you have a pipeline to take an input, and make multiple outputs that cover the outputs for different devices.

Now…if you’re just talking about some files you take on your phone, and then you want them to play on any device anywhere on-demand? This is what Jellyfin is good for.

There is no such thing as transcoding files that aren’t available on a server. It’s never going to be a thing, because the server needs those files to transcode them.

If you’re looking for a tool where you once in awhile may choose a certain video to transcode into something else, setup a pipeline service, and send the files to that service to transcode them, but you’ll be limited by needing to know where and what it needs to processed as input, and then the outputs.

MajesticElevator@lemmy.zip on 23 Apr 16:57 collapse

The finality isn’t that important here. I basically want ffmpeg, running on my server.

Input: video file from local storage of the device that browses the website. Any container or codec. On the web UI I can choose the output container I want, the codec I want, the bitrate/or quality setting.

Output: transcoded file available to download for a short period of time. Then, input and outputs are wiped. They should only stay for the duration of the transcoding (for the input), and for a really short period of time, like 30mins, the time that the device that browsed the website downloads it (for the output).

Jellyfin is more of a streaming server. I don’t need that: no apps on the device that needs the service, no bloat, no streaming. Just ffmpeg online and simplified.

I just want to fuck around with encoding, converting or compressing my file on any device I have on the go, without having to download software. You see those file converters online? I want that, but with more settings and self hosted.

I know what you’re trying to do, and no, I don’t want to automate file conversion from a file to another and stuff.

If you’re looking for a tool where you once in awhile may choose a certain video to transcode into something else, setup a pipeline service, and send the files to that service to transcode them, but you’ll be limited by needing to know where and what it needs to processed as input, and then the outputs

That’s a bit more like what I want, but I’m actually asking if there is anything that would suit my needs and requirements

just_another_person@lemmy.world on 23 Apr 17:08 collapse

I’m not “trying to do” anything but explain the different workflows. Again, I’ve given you solutions, but there isn’t any self-hosted thing in the way you’re asking about. Just find a handbrake UI or an ffmpeg frontend if that’s all you’re looking for.

The question is more about the WHY you need to transcode anything when you already have many better options available to you?

MajesticElevator@lemmy.zip on 23 Apr 17:27 collapse

I haven’t found anything that suits my needs as stated.

The main reasons why I need to transcode:

  • some software don’t support anything other than X formats/codecs (discord doesn’t display previews for VP9 files for example…)
  • some devices don’t support specific codecs natively
  • I want to fulfill all use cases. If I ever want to do something that’s not covered by handbrake (ex: can’t FTP to the server and upload the files I want to transcode).
  • I want simplicity: avoid complicated bridges and installing many things
  • i want it to be easily shareable and accessible: the client shouldn’t have to download an app, a software. Web browsers are easy and everyone has one. Normies use those online converters for a reason: they’re lazy and can’t be bothered to install things. They’ll take the easier route
  • if a file takes too much space (ex: on my phone), I want to be able to do encode it to HEVC without having to install software or sending it to my computer)
just_another_person@lemmy.world on 23 Apr 17:43 collapse

VLC does all of these things and does it locally for the client it’s installed on if pulling from a source.

MajesticElevator@lemmy.zip on 23 Apr 22:23 collapse

I don’t want to be an asshole but have you read what I wrote?

just_another_person@lemmy.world on 23 Apr 23:53 collapse

I did. You’ve been told no such thing exists multiple times already. I’m just giving you options for what DOES exist. Fuck me, right?

MajesticElevator@lemmy.zip on 23 Apr 23:56 collapse

VLC is anything but intuitive and I’m pretty sure you can’t encode media and save it on your computer, and for sure not on mobile devices

just_another_person@lemmy.world on 24 Apr 00:09 collapse

That’s exactly what VLC’s main purpose is. Have you even looked at it? It’s one of the most intuitive front-ends to transcoding out there. Desktop, mobile, and web.

MajesticElevator@lemmy.zip on 24 Apr 09:04 collapse

I guess I never found out how to do that. I’ve been using VLC for many years and never found a way to encode a file to something else, change its bitrate, and save to disk. It doesn’t work on iOS for sure.

scrubbles@poptalk.scrubbles.tech on 23 Apr 15:46 collapse

The problem exists of how do you get files to the server. Again for a big video file you need a place to have the original accessible for the entire duration of the transcode, and you need a drop point to place the file when it’s done. And if you’re doing that, more than likely you have something like Plex or jellyfin, so why not just hook it up to your existing file locations?

I run jobs all the time from my cluster, but the issue always comes back to persistent storage. Where are the files you need to act on, and where should the finished results be placed? You’re trying to skip those important steps here.

MajesticElevator@lemmy.zip on 23 Apr 16:13 collapse

It was meant to run on a server with pretty much nothing on it but yea, if uploading big files isn’t possible through a browser, I’ll find other solutions. I was hoping files smaller than like 4GB would be fine.

About the storage, I hoped that it would just either load the file in memory, or store during the transcode, then when done, delete the source file and put the transcoded server for a limited amount of time (1h for example), then wipe it (or just wipe it after download)

AtariDump@lemmy.world on 23 Apr 16:44 next collapse

Possible? Probably.

Practical? Nope!

Onomatopoeia@lemmy.cafe on 23 Apr 16:44 collapse

Yea, I’d take the approach of having the server monitor a folder, and then just drop files in that folder to be converted.

There are a number of ways to transfer files to that folder, tools like FolderSync (Android), Syncthing or Resilio (every OS) can handle this.

MajesticElevator@lemmy.zip on 23 Apr 23:06 collapse

Mhh, yea that seems like the obvious workaround, but not the ideal solution

catloaf@lemm.ee on 23 Apr 17:10 next collapse

I’m not aware of any existing products, but this sounds like you could knock it out in a day writing it yourself.

MajesticElevator@lemmy.zip on 23 Apr 17:14 collapse

That’s what I usually do but I’m trying not to reinvent the wheel this time (and not spend too much time on it). No luck :-/

Plus I’m a bad dev

i_stole_ur_taco@lemmy.ca on 23 Apr 17:28 next collapse

I feel sick saying it, but I think this is a project you could complete with AI. It sucks ass at understanding complex problems, but it’s good at cranking out small scripts to integrate tools together.

You basically just want a wrapper around ffmpeg with a light web interface to handle upload, script execution, and download.

LLMs are pretty good at spitting out a simple web interface that runs in a barebones server like Express or nginx.

If you don’t need to worry about security or accessibility or any “not on the critical path” concerns, this could probably work after a few iterations.

As for anything already out there - I’ve never come across anything. The closest app I can think of is TDARR which is intended to automatically transcode your media library to h265. That wraps up some of the ffmpeg stuff you want, but doesn’t address the upload/download half of the workflow.

MajesticElevator@lemmy.zip on 23 Apr 23:05 collapse

Yea, I’ve used it a fair bit before, and it’s pretty good at doing UI, the one thing that I dislike haha

My process is pretty much pointing out and fixing the small mistakes the model does. A lot of people hate AI but it’s honestly a game changer.

[deleted] on 23 Apr 18:44 next collapse
.
Mechanite@lemmy.world on 23 Apr 19:21 next collapse

Might be able to work something together with TDARR and maybe Syncthing or something to handle the file transportation

[deleted] on 23 Apr 21:47 next collapse
.
HybridSarcasm@lemmy.world on 23 Apr 22:27 next collapse

github.com/TheNickOfTime/handbrake-web

DaGeek247@fedia.io on 23 Apr 22:45 next collapse

Honestly, this one. Handbrake was made as a wrapper for ffmpeg anyways.

MajesticElevator@lemmy.zip on 23 Apr 23:02 collapse

must allow web uploads

HybridSarcasm@lemmy.world on 24 Apr 00:18 next collapse

Well, unless you feel like writing that feature into this project, perhaps you could modify your requirements slightly. Copying your local file to a share that’s also mounted to this handbrake-web instance would accomplish the same goal - taking local files and having them processed by this backend service.

MajesticElevator@lemmy.zip on 24 Apr 09:06 collapse

It’s mandatory, sadly. What you’re asking for would require using other software on different devices, and wouldn’t be easy to use for end users.

tripflag@lemmy.world on 24 Apr 08:21 collapse

combine it with a service for uploading files to your server, there’s dozens of those

Xanza@lemm.ee on 24 Apr 18:00 next collapse

I would like the transcoding to be done on the server side

Unless your server has access to a GPU, and uses WebGL to be able to utilize that GPU via web tech, I don’t recommend doing this at all. Gonna take a dozen hours to encode via CPU…

y0din@lemmy.world on 24 Apr 19:14 collapse

It may be feasible to integrate Nextcloud with HandBrake and a designated watch folder. This setup would allow file uploads and downloads through the Nextcloud web interface or mobile application, depending on user preference. This is a concept that occurred to me upon reviewing the information, not sure if it will fit your requirements or not.