Hacker News new | comments | ask | show | jobs | submit login
Show HN: Fileshifter – Easily convert files and videos between different formats (fileshifter.io)
61 points by mtusman 9 months ago | hide | past | web | favorite | 36 comments

Structurally, the service is hosted online as a website, this means one must upload a copy of their data to be converted. Naturally that raises questions because there's a lot we don't know about this site: who runs it, what are the terms of service (I saw none on the site), what are users granting the site owners to do with uploaded data? Answers to these are almost certainly guesses as this information is not readily available. The site source code is minified Javascript; designed to be terse and at the cost of legibility (variable names are often shortened, useful or long comments eliminated), certainly not the source code a developer would work with when writing the software.

How could this have been implemented in a way that obviates all of these show-stopper failings? Respect users' software freedom by offering users one or more programs to do the conversion jobs with reasonable default settings. Distribute complete corresponding source code alongside the rest of the site so as to let the user host an instance of the site on their own. Users so inclined can set this up for themselves and others, or use their software freedom to end up with a conversion service they don't need to guess about.

Hey, thanks for your feedback. I'm the guy that created the site. I agree that more information needs to be listed on the site about how the process works and also agree that the code needs some work. I'm a self-taught programmer and created this to put on my cv and thought it would just be cool to share what I created. I plan to add much more features and pages but just wanted to test what I've already created.

To those that are interested in understand out how the website works, the process goes as follows: the files are uploaded to the server and then uploaded to a private s3 bucket where the user will have an hour to download the converted content via a presigned url after which it will be permanently deleted. Furthermore, as soon as the file is converted, the original file is deleted from the server. In hindsight, I should have shipped an "about" page explaining this process.

- I appreciate these posts that promote software freedom.

- The tools `convert` and `ffmpeg` should cover your criteria and the functionality of the site.

Thank you for suggesting this. I never knew about this. I learnt that it is from/ part of Imagemagick [1].

Unoconv tool [2], recommended in another comment here, is also great to convert documents to and from formats that are supported by OpenOffice (LibreOffice?).

Pandoc [3] is also a worthy option to convert between document formats.

[1] : https://www.imagemagick.org/script/convert.php, https://www.lifewire.com/convert-linux-command-unix-command-...

[2] : http://dag.wiee.rs/home-made/unoconv/

[3] : http://pandoc.org/

unoconv too, for the office formats.


Cool! I think you need a way to get back to the home screen so that someone can try another conversion. After I did the default png->pdf, there is nothing to click on to go back and try another conversion, besides editing the URL. (maybe a link 'try another' or just home) - but cool thanks for sharing! Edit: on Safari mac 10.13 if that helps

Hey, glad you liked it! I'm working on a new update that does exactly that! So, thanks for your suggestion.

Edit: Feature has now been implemented

Wonderful!! I'll give it a try.

So...it's like zamzar?

Will this be open-sourced? I'd like the idea of a self-hosted version of this. Good work!

If you run Linux, you can use `ffmpeg` and `convert` to duplicate the functionality of this site locally. For example

    $ convert input-file.jpg output-file.pdf
    $ ffmpeg -i input-file.mov output-file.mp4

For the video, you'd probably want to do a stream copy, which will retain the original quality and save you from having to potentially wait a long time for it to encode:

  $ ffmpeg -i input-file.mov -c copy output-file.mp4
This works if the output container format supports the codecs used by the input file, which should be the case for most mov->mp4 conversions.

I've seen you mention those tools a couple times. I'm familiar with ffmpeg. Does convert also cover the MS Office file formats, as this tool purports to?

The convert tool is part of imagemagick and only works on image formats as far as I know. I personally use pandoc to do similar conversions on documents and ssconvert for spreadsheets.

That's kind of what I thought. Although I'm aware of imagemagick itself, I didn't know that convert was provided by it. Thanks for the clarification.

No. For office formats there's unoconv


I missed the MS formats -- sorry! I don't know off the top of my head, but doubt it. libreoffice should though.

Thanks for your feedback. Really appreciate it. I’m looking into open sourcing some features it in the coming weeks and I’ll post an update on the website when that happens, so just keep checking.

Just curious, why would you want to self-host it?

Many reasons. Primarily because of security and control of my information. Secondly because services like these tend to be short-lived and unreliable, if i host it myself i can trust it's there when i need it. And i hadn't considered the uploading time issue mentioned in a previous comment, but that is actually a very good point that self-hosting would solve as well.

I also just want to see the code because i think it's cool

>I also just want to see the code because i think it's cool

This is not "the" code but here's a script. I can't take credit for it... I don't remember but I probably cobbled it together by taking stack overflow code and making it more friendly. First, you need ffmpeg (ymmv.. this assumes macOS, for others installing ffmpeg is also possible but left as an exercise for the reader):

    $ brew install ffmpeg

[edit: fixed some typos]


    export OLD_IFS=$IFS
    export IFS=''

    mkdir -p converted
    for a in *.{webm,mkv,ts} 
        ffmpeg -i "$a" -c:v libx264 -preset slow -crf 20 -c:a libvo_aacenc -b:a 128k "$a.mp4"
        if [[ $? == 0 ]]; then
            mv "$a.mp4" converted
    export IFS=$OLD_IFS
Save as convert-to-mp4.sh then run it in a directory containing files of undesirable types like .webm

Not saying this is perfect. Take it as a proof of concept. And there's no web UI, nor would I want one. Suggestions for tweaks welcome.

> First, you need ffmpeg (ymmv.. this assumes macOS, for others installing ffmpeg is also possible but left as an exercise for the reader):

> $ brew install ffmpeg

FWIW, there's a `brew` fork for linux: https://github.com/Linuxbrew/brew

It's not especially useful in this case as ffmpeg is available in linux package managers, but it's handy for tools that aren't.

Yeah, the primary benefit I see is if one fully audits the code and any future updates. Otherwise, self-hosting doesn't confer much in the way of guarantees for security or privacy.

For me, often, it's just a bandwidth issue. If a colleague has a 12 GB movie they'd like to transmute, a local app might be a possibility, but an hour long upload followed by a 20 minute long download won't be.

The creator mentions in another post that the service does indeed upload the data to a server for processing. But, in general, it being a web app doesn't mean it uploads your data any more than a locally run application might. A web app can just as well do the processing in the browser without it ever leaving your machine.

Using a web app requires one to upload their file 100% of the time. Using a local app requires one, I'd expect, to upload their file 0% of the time.

On what are you basing these expectations? Uploading means transmitting data to a third party. One could write a CLI that does just that. One could also write a web app where the processing takes place in the browser and the data never leaves the machine.

The difference is the web app runs within the browser sandbox while the CLI executes with user permissions.

Well, that, plus whatever the conversion time would be.

Not op, but for myself, not having any way of knowing if the service reads or retains any information from my files (outside of the core purpose) would limit the amount of data I would be willing to put through the service.

Interesting. I tried to convert an iPhone photo from jpg to pdf (from phone) and it threw the following error: "C952B34B-95B4-4908-9018-C224DBB753A1.jpeg - File not in jpg format"

yep, looks like an error at the frontend. I’ll look it to it. Thanks for reporting it

Error is now fixed

It's nice! Quick feedback for UX improvement: let the user upload a file first, detect the extension, then ask what file type to convert to.

Thanks for the feedback, I'll take it onboard and try my best to implement it.

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact