【备份】ROC-RK3588S-PC开发板资料
『回复列表(43|显示机器人聊天)』
https://github.com/JeffyCN/FFmpeg/issues/4
由于许可证问题,公司没有进一步的 ffmpeg 计划
我更喜欢使用 gstreamer
我已经在 RK3568 上使用官方补丁测试了 gstreamer,解码和编码都运行良好
瑞芯微官方不支持 ffmpeg 编码
看起来我应该改用 gstreamer。
gstreamer
插件:apt list | grep '^gstreamer1.0' | grep -v dbg | awk -F/ '{print $1}' | xargs sudo apt install -y
gstreamer
插件和功能:gst-inspect-1.0
gst-inspect-1.0 | grep -iE '264|265|avc|hevc|mpp'
其中libav
就是ffmpeg
的核心库,可以支持ffmpeg
支持的所有编码。
gst-inspect-1.0 libav
可以看到它支持的所有编码。
RK3588的硬解是libav
(ffmpeg
)提供的,硬编是rockchipmpp
提供的。
含有mpp
字样的功能支持硬件加速。
gstreamer
官方插件文档(不含RK3588硬件加速)用gst-inspect-1.0
命令得到的可用插件要比这个文档里列出的多。
https://thiblahute.github.io/GStreamer-doc/plugins.html?gi-language=c
gst-launch-1.0
命令示例gstreamer
硬件加速功能gst-inspect-1.0 | grep -i mpp
rockchipmpp: mppjpegdec: Rockchip's MPP JPEG image decoder
rockchipmpp: mppvideodec: Rockchip's MPP video decoder
rockchipmpp: mppjpegenc: Rockchip Mpp JPEG Encoder
rockchipmpp: mppvp8enc: Rockchip Mpp VP8 Encoder
rockchipmpp: mpph265enc: Rockchip Mpp H265 Encoder
rockchipmpp: mpph264enc: Rockchip Mpp H264 Encoder
libav: avdec_vp9_rkmpp: libav vp9 (rkmpp) decoder
libav: avdec_vp8_rkmpp: libav vp8 (rkmpp) decoder
libav: avdec_mpeg2_rkmpp: libav mpeg2 (rkmpp) decoder
libav: avdec_mpeg1_rkmpp: libav mpeg1 (rkmpp) decoder
libav: avdec_mpeg4_rkmpp: libav mpeg4 (rkmpp) decoder
libav: avdec_hevc_rkmpp: libav hevc (rkmpp) decoder
libav: avdec_h264_rkmpp: libav h264 (rkmpp) decoder
libav: avdec_h263_rkmpp: libav h263 (rkmpp) decoder
gst-inspect-1.0 mpph265enc
gstreamer
把H.264
TS
文件转为H.265
,同时重新编码音频注意:
mp4mux
里的mp4
表示输出文件是.mp4
格式。tsdemux
里的ts
表示输入文件是.ts
格式。如果是其他格式,要换成对应的名称。
gst-launch-1.0 -e \
filesrc location=/data/share/hdd/ps5/2022-08-27-09_17_12.ts \
! tsdemux name=dmx \
\
dmx. ! queue ! h264parse ! mppvideodec ! mpph265enc ! h265parse ! mx. \
dmx. ! queue ! aacparse ! faad ! audioresample ! audioconvert ! voaacenc ! mx. \
\
mp4mux name=mx \
! progressreport update-freq=1 \
! filesink location=/data/share/hdd/ps5/output.mp4 \
# end
gstreamer
把H.264
TS
文件转为H.265
,不重新编码音频未实现,以下只是减少了步骤,并未阻止重新编码音频。
gst-launch-1.0 -e \
filesrc location=/data/share/hdd/ps5/2022-08-27-09_17_12.ts \
! tsdemux name=dmx \
\
dmx. ! queue ! h264parse ! mppvideodec ! mpph265enc ! h265parse ! mx. \
dmx. ! queue ! aacparse ! faad ! voaacenc ! mx. \
\
mp4mux name=mx \
! progressreport update-freq=1 \
! filesink location=/data/share/hdd/ps5/output.mp4 \
# end
gstreamer
把任意视频文件转为H.265
视频编码+AAC
音频编码decodebin
可用于自动检测输入文件的格式,并自动实现解码。
设置GST_DEBUG=2
环境变量就能确认它确实自动选择了最佳的解码器:mppdec
(RK3588的硬解)。
export GST_DEBUG=2
gst-launch-1.0 -e \
filesrc location=/data/share/hdd/ps5/2022-08-27-09_17_12.ts \
! decodebin name=dmx \
\
dmx. ! mpph265enc ! h265parse ! mx. \
dmx. ! audioconvert ! voaacenc ! mx. \
\
mp4mux name=mx \
! progressreport update-freq=1 \
! filesink location=/data/share/hdd/ps5/output.mp4 \
# end
设太低好像没作用,码率降到一定程度就降不下去了。
gst-launch-1.0 -e \
filesrc location=/data/share/hdd/ps5/2022-08-27-09_17_12.ts \
! decodebin name=dmx \
\
dmx. ! mpph265enc rc-mode=vbr bps-min=1 bps=100000 bps-max=400000 ! h265parse ! mx. \
dmx. ! audioconvert ! voaacenc ! mx. \
\
mp4mux name=mx \
! progressreport update-freq=1 \
! filesink location=/data/share/hdd/ps5/output.mp4 \
# end
设置qp-init
可以得到比上面更低的码率。
gst-launch-1.0 -e \
filesrc location=/data/share/hdd/ps5/2022-08-27-09_17_12.ts \
! decodebin name=dmx \
\
dmx. ! mpph265enc rc-mode=fixqp qp-init=30 ! h265parse ! mx. \
dmx. ! audioconvert ! voaacenc ! mx. \
\
mp4mux name=mx \
! progressreport update-freq=1 \
! filesink location=/data/share/hdd/ps5/output.mp4 \
# end
gstreamer
管道的图形化界面(GUI)https://github.com/virinext/pipeviz.git
sudo apt install qtbase5-dev qttools5-dev libunwind-dev libglib2.0-dev libgstreamer1.0-dev '*qt*wayland*' pipewire
git clone https://github.com/virinext/pipeviz.git
cd pipeviz
mkdir build
cd build
qmake ../pipeviz.pro
make -j4 || make -j4
QT_QPA_PLATFORM=wayland ./pipeviz