类似于caffe,tensorflow等深度学习框架的集成,在XLearning中增加了基于Hadoop Yarn上的FFmpeg的调度。
1. 安装ffmpeg
install-ffmpeg.sh脚本代码:
#安装EPEL Release,因为安装需要使用其他的repo源,所以需要EPEL支持
yum install -y epel-release
#导入一个Code
sudo rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
#安装nux-dextop源
sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-1.el7.nux.noarch.rpm
#查看repo源是否安装成功
yum repolist
#yum安装ffmpeg
yum install -y ffmpeg
#安装完成后检查ffmpeg 版本
ffmpeg -version
2.ffmpeg转压视频命令
ffmpeg -i H00C1T20171120230303C77.sdv -vcodec libx264 -preset fast -crf 20 -y -vf "scale=1920:-1" -acodec libmp3lame -ab 128k b.mp4
参数简单解释如下:
-vcodec: libx264 强制指定视频编码模式,使用codec编解码
-preset:指定编码的配置。x264提供了一些预设值,而这些预设值可以通过preset指定。这些预设值包括:ultrafast,superfast,veryfast,faster,fast,medium,slow,slower,veryslow和placebo。ultrafast编码速度最快,但压缩率低,生成的文件更大,placebo则正好相反。x264所取的默认值为medium。需要说明的是,preset主要是影响编码的速度,并不会很大的影响编码出来的结果的质量。压缩高清电影时,一般用slow或者slower,当你的机器性能很好时也可以使用veryslow,不过一般并不会带来很大的好处。
-crf:这是最重要的一个选项,用于指定输出视频的质量,取值范围是0-51,默认值为23,数字越小输出视频的质量越高。这个选项会直接影响到输出视频的码率。
-vf :video filters 设置视频过滤器
-acodec:audio codec,强制指定音频处理模式,使用codec编解码
-ab :audio bitrate 设置音频码率 64k/128k
-y:覆盖输出文件
3.运行脚本
run.sh脚本代码:
#/bin/sh
$XLEARNING_HOME/bin/xl-submit \
--app-type "ffmpeg" \
--app-name "ffmpeg_demo" \
--input /tmp/data/ffmpeg#data \
--output /tmp/ffmpeg_output#video \
--files demo.sh,ffmpeg.py \
--launch-cmd "sh demo.sh" \
--worker-memory 2G \
--worker-cores 2 \
--queue default \
demo.sh脚本代码:
用于传递ffmpeg命令参数
python ffmpeg.py -i ./data/H00C1T20171120230303C77.sdv -preset fast -crf 20 -ab 128k -y ./video/b.mp4
ffmpeg.py代码:
import argparse
import sys
import os
import json
import subprocess
sys.path.append(os.getcwd())
FLAGS = None
def test():
print("start test!")
input_file = FLAGS.i
video_codec = FLAGS.vcodec
pre_set = FLAGS.preset
crf = FLAGS.crf
video_filters = FLAGS.vf
audio_codec = FLAGS.acodec
audio_bitrate = FLAGS.ab
output_file = FLAGS.y
print("test finished!")
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.register("type", "bool", lambda v: v.lower() == "true")
# Flags for defining the tf.train.ClusterSpec
parser.add_argument(
"-i",
type=str,
default="",
help="input of video file"
)
parser.add_argument(
"-vcodec",
type=str,
default="libx264",
help="Coercive use of video codec codec"
)
parser.add_argument(
"-preset",
type=str,
default="medium",
help="Coded configuration,included ultrafast,superfast,veryfast,faster,fast,medium,slow,slower,veryslow and placebo"
)
parser.add_argument(
"-crf",
type=int,
default=23,
help="Quality of output video,the range of value is 0-51"
)
parser.add_argument(
"-vf",
type=str,
default="scale=1920:-1",
help="set video filters "
)
parser.add_argument(
"-acodec",
type=str,
default="libmp3lame",
help="use of audio codec codec"
)
parser.add_argument(
"-ab",
type=str,
default="",
help="Setting the audio bitrate"
)
parser.add_argument(
"-y",
type=str,
default="",
help="Overlay output file"
)
FLAGS, unparsed = parser.parse_known_args()
test()
4. 运行结果
…
…
更多精彩原创文章,详见红象云腾社区