Note: When we watch movies that we have downloaded ourselves, they often lag due to network or bandwidth issues. Therefore, MoeClub, a great expert, spent half a month in seclusion and wrote a script that automatically transcodes and slices videos and uploads them to a domestic cdn
. The script provides a default option to upload to the Yuque cdn
and uses multi-threaded uploading. The default is 10
threads, which can greatly improve the playback speed of videos.
Update#
【2020.4.1】
Due to the fix of the upload bug in Yuque, the default has been changed to Alibaba Cloud image bed.
Usage#
Github Repository: https://github.com/MoeClub/Note/tree/master/ffmpeg
1. Install ffmpeg
wget https://www.moerats.com/usr/down/ffmpeg/ffmpeg-git-$(getconf LONG_BIT)bit-static.tar.xz
tar xvf ffmpeg-git-*-static.tar.xz
mv ffmpeg-git-*/ffmpeg ffmpeg-git-*/ffprobe /usr/local/bin/
rm -rf ffmpeg-git-*
2. Install the script
# Create a new /opt/ffmpeg folder to store scripts and other files
mkdir /opt/ffmpeg && cd $_
# Download and run the script
wget https://raw.githubusercontent.com/MoeClub/Note/master/ffmpeg/Install.sh
bash Install.sh
3. Start the player
After the video is sliced and the m3u8
file is generated, a player is required to play it. The upload script will automatically push the m3u8
file to the player's root directory, so they can be used together. Of course, if you have a player that can play m3u8
files, you don't need to set up a player. Choose according to your own needs.
Install pip3
:
# For CentOS 6
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
yum install python34 -y
wget https://bootstrap.pypa.io/get-pip.py
python3 get-pip.py
# For CentOS 7
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum install python36 -y
wget https://bootstrap.pypa.io/get-pip.py
python3 get-pip.py
# For Debian/Ubuntu
apt update
apt install python3-pip -y
Install dependencies:
# Go to the player source code folder
cd /opt/ffmpeg/Player
pip3 install tornado
Start in the background:
nohup python3 Player.py&
Note that the MasterKey
value in the Player.py
file must correspond to the Token
value in the publish.sh
file. Do not modify it randomly.
4. Script usage
# Command example
bash /path/to/media.sh <filename_without_special_characters.mp4> [special_options]
# Special options: number; optional parameter, default is 0
# 0: Automatically calculate the appropriate slice size based on the file's bit rate. (The target file size is less than 20M, which is generally fine)
# 1: Force re-encoding with a bit rate of 2400k. (Generally used for non-H264 encoding, file slicing, slower speed)
# 2: Custom slice time. When set to 2, the slice time is 3 seconds. When greater than or equal to 3, the slice time is the value of the special option.
Usage example:
# Go to the directory where the video is located
cd /root/movies
# Default mode slicing
bash /opt/ffmpeg/media.sh rats.mp4
# Force re-encoding
bash /opt/ffmpeg/media.sh rats.mp4 1
# Ultra-fast mode, set a slice time of 2 seconds (for H264-encoded source files)
bash /opt/ffmpeg/media.sh rats.mp4 2
5. Player examples
# View all m3u8 files pushed to the player's side
http://ip:5866/Player/list
# Play the rats.m3u8 file in the root directory displayed in the list
http://ip:5866/Player/rats.m3u8
Upload to Yuque CDN#
Note: This solution is optional. Currently, Yuque provides a default free 10G storage. Please refer to the official instructions for details.
First, go to the Yuque official website and register an account→Link. Then, obtain the values of ctoken
and session
. Here is a brief method to obtain them, using Google Chrome as an example.
After logging in, press F12
to enter the console, select Network
, click on any link file starting with yuque
, and then select Cookies
to see the required 2
parameters.
Then, copy the values of ctoken
and session
.
Next, check the Yuque script→Link, copy all the contents of the script and replace them in the upload.sh
script. Fill in the values of ctoken
and session
, and save it. Refer to the above instructions for the upload method.
Finally, if you are using a VPS, it is not recommended to force transcoding. Slicing alone is sufficient. Otherwise, if the CPU is occupied for a long time, the server may be banned. Basically, most mp4
files can be sliced directly.
Original article Rat's Blog