Skip to content

Instantly share code, notes, and snippets.

@MartinBucko
Forked from mmstick/transcode-install.sh
Created October 20, 2022 21:48
Show Gist options
  • Select an option

  • Save MartinBucko/191759140ced08716960283d9b66ff2f to your computer and use it in GitHub Desktop.

Select an option

Save MartinBucko/191759140ced08716960283d9b66ff2f to your computer and use it in GitHub Desktop.
Ubuntu 10-bit HEVC Transcoding Tools -- Contains a script to install x265-10bit-git, libass-git, ffmpeg-git and bomi-git; another for updating everything; as well as scripts for transcoding videos with ffmpeg. Transcoding scripts require the fish shell to be installed.
#!/bin/bash
mkdir ~/.local/src
function compile() {
make -j9 CFLAGS='-march=native -O3 -pipe -fstack-protector -Wall' CXXFLAGS='-march=native -O3 -pipe -fstack-protector -Wall'
}
function package-deb() {
sudo checkinstall --pkgname "$1" --pkgversion "$2" --provides "$3" -y
}
function download-x265-stable() {
git clone https://github.com/videolan/x265
}
function download-ffmpeg-git() {
git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg
}
function compile-x265() {
cd ~/.local/src/x265/build/linux
[[ $(arch) == x86_64 ]] && LDFLAGS+=',-z,noexecstack'
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=/usr ../../source -DHIGH_BIT_DEPTH=1
compile
package-deb "x265-10bit" "1.6" "x265"
make clean
}
function compile-ffmpeg() {
cd ~/.local/src/ffmpeg
sudo apt-fast install -y libx264-dev libvpx-dev libtheora-dev libopus-dev libvorbis-dev libfdk-aac-dev libass-dev libx11-dev
./configure --prefix=/usr --enable-gpl --enable-nonfree --enable-libass --enable-libfreetype --enable-libopus --enable-libvorbis --enable-libfdk-aac --enable-libx265 --enable-libx264 --enable-libvpx --enable-libtheora --enable-x11grab --extra-cflags="-march=native -O3" --extra-cxxflags="-march=native -O3"
make -j9
package-deb "ffmpeg-git" "$(git rev-list --count HEAD)" "ffmpeg"
make distclean
}
cd ~/.local/src
download-x265-stable
download-ffmpeg-git
compile-x265
compile-ffmpeg
#!/usr/bin/fish
# Gets a list of all videos in the current directory and subdirectory.
function get_video_list
find * -type f -name \*.mkv
end
# Utilizes ffmpeg to transcode the current input video, $1, with Opus audio and
# H.265 video. It receives a preset parameter, "$2", and a CRF parameter, "$3",
# and will write the newly-transcoded videos to the transcoded directory.
function transcode
ffmpeg -i "$argv[1]" -c:a libopus -c:v libx264 -profile:v high -level 4.2 -crf "$argv[2]" (basename $argv[1] .mkv)_transcoded.mkv
end
# After the transcode is complete, it moves the files to another directory
# for easy cleanup.
function move_transcodes
mv "$argv[1]" original
mv (basename $argv[1] .mkv)_transcoded.mkv transcoded
end
# This will create two directories: transcoded and
# original; then get a list of all videos and begin transcoding each video
# one by one. After it finishes transcoding a video, it will
function main
mkdir transcoded original
for video in (get_video_list)
transcode "$video" "18"
move_transcodes "$video"
end
end
## Start script
main
#!/usr/bin/fish
# Gets a list of all videos in the current directory and subdirectory.
function get_video_list
find * -type f -name \*.mkv
end
# Utilizes ffmpeg to transcode the current input video, $1, with Opus audio and
# H.265 video. It receives a preset parameter, "$2", and a CRF parameter, "$3",
# and will write the newly-transcoded videos to the transcoded directory.
function transcode
ffmpeg -i "$argv[1]" -preset "$argv[2]" -c:a libopus -c:v libx265 \
-x265-params "crf=$argv[3]:ref=6:subme=7:bframes=16" (basename $argv[1] .mkv)_transcoded.mkv
end
# After the transcode is complete, it moves the files to another directory
# for easy cleanup.
function move_transcodes
mv "$argv[1]" original
mv (basename $argv[1] .mkv)_transcoded.mkv transcoded
end
# This will create two directories: transcoded and
# original; then get a list of all videos and begin transcoding each video
# one by one. After it finishes transcoding a video, it will
function main
mkdir transcoded original
for video in (get_video_list)
transcode "$video" "veryslow" "18"
move_transcodes "$video"
end
end
## Start script
main
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment