this post was submitted on 23 Aug 2023
64 points (89.0% liked)

Selfhosted

40040 readers
1189 users here now

A place to share alternatives to popular online services that can be self-hosted without giving up privacy or locking you into a service you don't control.

Rules:

  1. Be civil: we're here to support and learn from one another. Insults won't be tolerated. Flame wars are frowned upon.

  2. No spam posting.

  3. Posts have to be centered around self-hosting. There are other communities for discussing hardware or home computing. If it's not obvious why your post topic revolves around selfhosting, please include details to make it clear.

  4. Don't duplicate the full text of your blog or github here. Just post the link for folks to click.

  5. Submission headline should match the article title (don’t cherry-pick information from the title to fit your agenda).

  6. No trolling.

Resources:

Any issues on the community? Report it using the report flag.

Questions? DM the mods!

founded 1 year ago
MODERATORS
 

Transcoding anything >720p is painful.

I run ancient hardware for desktop/laptop >10yrs old apple stuff running linux. I consume media mainly via rpi4 or android.

What's a minimum level system capable of trans-coding 4k video to x265 in at the very least real time? Is there a tiny trans-coding device out there somewhere?

Would a NUC do? How old or new to churn out 4k x265

Can I avoid hardware? Are cloud gpu's a thing?

you are viewing a single comment's thread
view the rest of the comments
[–] [email protected] 1 points 1 year ago (1 children)

I put it in a script, so I'll need to check my server later.

Do we have a remindme bot here?

[–] [email protected] 1 points 1 year ago (1 children)

Not as far as i know, consider this my reminder, I guess? 😅

[–] [email protected] 3 points 1 year ago (1 children)

Your reminder worked! Here is the command I used. I put it in a script, and would pass it the file I wanted to convert.

ffmpeg -i "$1" -vcodec libx265 -crf 28 -map 0 -c:s copy "${1%.*}.h265.mkv" > ./convert_logs 2>&1 < /dev/null &

If I called this script convert_to_h265.sh, I would call it with convert_to_h265.sh some_video.mkv

Here is an explanation for the options I used:

ffmpeg is the command
-i "$1" is the input file. In this case, the argument to the script
-vcodec libx265 is specifying the plugin to use as libx265
-crf 28 is specifying the quality/compression rate. I found this one to be pretty acceptable
-map 0 makes it select ALL audio tracks and ALL subtitle tracks
-c:s copy copies subtitle tracks
"${1%.*}.h265.mkv" specifies the output file. In this case, everything up to the last dot, then replace the extension with '.h265.mkv'
> ./convert_logs 2>&1 < /dev/null tells the program to output to a log file instead of writing to your terminal. It also sets the input to nothing, and without that, it won't work in a script for some reason.
& tells the whole thing run in the background so it doesn't hold up your terminal. You can even close your terminal and do other things and check back on it later.

You can monitor the progress with tail -f convert_logs

If you want to get fancy, you can even put this in a loop to run on all the files that end in .mkv in the current directory:

for i in *.mkv; do
       ffmpeg -i "$i" -vcodec libx265 -crf 28 -map 0 -c:s copy "${i%.*}.h265.mkv" > ./convert_logs 2>&1 < /dev/null
done

And if you want to get mega fancy, you can have it run recursively for all files that end in .mkv in the current directory and all files in all child directories.

shopt -s globstar
for i in **/*.mkv; do
        ffmpeg -i "$i" -vcodec libx265 -crf 28 -map 0 -c:s copy "${i%.*}.h265.mkv" > ./convert_logs 2>&1 < /dev/null
done

If you do either of the latter two, I would put it in a script. Let's call the first one convert_all_to_h265.sh and the second one convert_all_to_h265_recursively.sh. Call them with convert_all_to_h265.sh & and convert_all_to_h265_recursively.sh & if you want to run them in the background.

You also might want to play around with the -crf 28 value if you want more compression or more quality. The lower the number, the better the quality. It needs to be a value between 0 and 51.

[–] [email protected] 2 points 1 year ago (1 children)

Dude this is the most thorough explanation of a single command line I've ever had!

Thanks for the effort, and the line itself.

[–] [email protected] 2 points 1 year ago

I put a hours of research into this, and I felt like documentation was difficult to understand, so I wanted to pass along what I've learned! I hope it works for you.