背景

最近我一直在研究怎么把后端的视频流到前端去。后端我选用了python写,使用了框架uwsgi。前端我用的以前的代码修修补补,用的react框架。中间件用的nginx。后端转码的工具使用ffmpeg。

如果是静态文件就比较好做。但是我的想法是,后端因为有各种各样的格式的电影和电视剧,通过后端在线转码,转一点送一点到前端去。再加上本来我的磁盘也不够用,这样就不用落盘了。但是我真是太业余了,只能实现一点点。

ffmpeg

安装

nginx和uwsgi的安装之前已经讲过了,就剩下ffmpeg的安装,也是大差不差,总的来说就是安装ffmpeg的官方仓库,然后使用yum安装。

在没有安装仓库前list ffmpeg:

[appadmin@localhost ~]$ yum list *ffmpeg*
CentOS Stream 8 - AppStream                                                   5.1 kB/s | 4.4 kB     00:00
CentOS Stream 8 - AppStream                                                   2.1 MB/s |  33 MB     00:16
CentOS Stream 8 - BaseOS                                                      3.9 kB/s | 3.9 kB     00:00
CentOS Stream 8 - BaseOS                                                       12 MB/s |  50 MB     00:04
CentOS Stream 8 - Extras                                                      3.2 kB/s | 2.9 kB     00:00
CentOS Stream 8 - Extras common packages                                      3.0 kB/s | 3.0 kB     00:01
MariaDB                                                                       5.0 kB/s | 3.4 kB     00:00
nginx stable repo                                                             4.4 kB/s | 2.9 kB     00:00
错误:没有匹配的软件包可以列出
[appadmin@localhost ~]$ yum list *ffmpeg*
上次元数据过期检查:0:00:09 前,执行于 2023年10月19日 星期四 17时30分51秒。
错误:没有匹配的软件包可以列出

ffmpeg的官网上对redhat系列的安装步骤链接到rpmfusion仓库的网址:http://www.ffmpeg.org/download.html#build-linux
rpmfusion仓库安装步骤:https://rpmfusion.org/Configuration

rpmfusion仓库安装步骤中搜索RHEL or compatible like CentOS。然后根据步骤一个一个命令执行就ok了。

查看rpmfusion是否安装成功:

[root@localhost ~]# ls -l /etc/yum.repos.d/
总用量 88
-rw-r--r--. 1 root root  713 3月  28 2022 CentOS-Stream-AppStream.repo
-rw-r--r--. 1 root root  698 3月  28 2022 CentOS-Stream-BaseOS.repo
-rw-r--r--. 1 root root  316 3月  28 2022 CentOS-Stream-Debuginfo.repo
-rw-r--r--. 1 root root  744 3月  28 2022 CentOS-Stream-Extras-common.repo
-rw-r--r--. 1 root root  700 3月  28 2022 CentOS-Stream-Extras.repo
-rw-r--r--. 1 root root  734 3月  28 2022 CentOS-Stream-HighAvailability.repo
-rw-r--r--. 1 root root  696 3月  28 2022 CentOS-Stream-Media.repo
-rw-r--r--. 1 root root  683 3月  28 2022 CentOS-Stream-NFV.repo
-rw-r--r--. 1 root root  718 3月  28 2022 CentOS-Stream-PowerTools.repo
-rw-r--r--. 1 root root  690 3月  28 2022 CentOS-Stream-RealTime.repo
-rw-r--r--. 1 root root  748 3月  28 2022 CentOS-Stream-ResilientStorage.repo
-rw-r--r--. 1 root root 1771 3月  28 2022 CentOS-Stream-Sources.repo
-rw-r--r--  1 root root 1680 4月  17 2023 epel-modular.repo
-rw-r--r--  1 root root 1332 4月  17 2023 epel.repo
-rw-r--r--  1 root root 1779 4月  17 2023 epel-testing-modular.repo
-rw-r--r--  1 root root 1431 4月  17 2023 epel-testing.repo
-rw-r--r--  1 root root  572 10月 12 14:56 MariaDB.repo
-rw-r--r--  1 root root  398 10月 12 10:25 nginx.repo
-rw-r--r--  1 root root 1026 1月  30 2019 rpmfusion-free-updates.repo
-rw-r--r--  1 root root 1098 1月  30 2019 rpmfusion-free-updates-testing.repo
-rw-r--r--  1 root root 1071 1月  30 2019 rpmfusion-nonfree-updates.repo
-rw-r--r--  1 root root 1143 1月  30 2019 rpmfusion-nonfree-updates-testing.repo

仓库安装完成后list ffmpeg:

[root@localhost ~]# yum list *ffmpeg*
RPM Fusion for EL 8 - Free - Updates                                          197 kB/s | 310 kB     00:01
RPM Fusion for EL 8 - Nonfree - Updates                                        88 kB/s |  93 kB     00:01
可安装的软件包
ffmpeg.x86_64                               4.2.9-1.el8                                 rpmfusion-free-updates
ffmpeg-devel.x86_64                         4.2.9-1.el8                                 rpmfusion-free-updates
ffmpeg-libs.x86_64                          4.2.9-1.el8                                 rpmfusion-free-updates
ffmpegthumbnailer.x86_64                    2.2.0-9.el8                                 rpmfusion-free-updates
ffmpegthumbnailer-devel.x86_64              2.2.0-9.el8                                 rpmfusion-free-updates
mythffmpeg.x86_64                           33.1-2.15.20230725git402c6d7758.el8         rpmfusion-free-updates
python3-ffmpeg-normalize.noarch             1.23.1-1.el8                                rpmfusion-free-updates
python3-ffmpeg-progress-yield.noarch        0.2.0-1.el8                                 rpmfusion-free-updates
[root@localhost ~]#

执行yum install ffmpeg

使用

subprocess

我这次使用的python,所以开了一个subprocess的进程,该进程可以直接使用宿主机上的命令。

import subprocess

ffmpeg_command1 = [
  "ffmpeg",
  "-ss", str(ss),
  "-t", str(t),
  "-copyts",
  "-start_at_zero",
  "-i", video_path,
  "-f", "mp4",
  "-vcodec", "libx264",
  "-acodec", "aac",
  "-channel_layout", "stereo",
  "-movflags", "frag_keyframe+default_base_moof+empty_moov",
  "pipe:",
]

ffmpeg_command2=f'ffmpeg -i {video_path} -c:a aac -c:v libx264 -map 0 -map 0 -b:v:0 800k -b:v:1 300k -s:v:1 320x170 -bf 1 -keyint_min 120 -g 120 -sc_threshold 0 -b_strategy 0 -ar:a:1 22050 -use_timeline 1 -use_template 1 -adaptation_sets "id=0,streams=v id=1,streams=a" -single_file 1 -f dash pipe:'

pipe = subprocess.Popen(ffmpeg_command1, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

outs, errs = pipe.communicate()
pipe.wait()

ffmpeg-python

使用python集成版本的ffmpeg:ffmpeg-pythonhttps://github.com/kkroening/ffmpeg-python
安装

  1. 安装ffmpeg
  2. 安装ffmpeg-python

    pip install ffmpeg-python
  3. 使用

    import ffmpeg
    
    proc = (
     ffmpeg
         .input(video_path,ss=ss,t=t)
         .output("pipe:",format="mp4",vcodec="libx264",acodec="aac",channel_layout="stereo", movflags="frag_keyframe+default_base_moof+empty_moov")
         .run(cmd="ffmpeg",capture_stdout=True)
    )
    proc return (out, err)

BreezingSummer
45 声望0 粉丝

« 上一篇
nginx安装