部署简单的流媒体播放网页(1)ffmpeg的安装和使用 您所在的位置:网站首页 一个字的网名男生冷酷 部署简单的流媒体播放网页(1)ffmpeg的安装和使用

部署简单的流媒体播放网页(1)ffmpeg的安装和使用

2023-10-28 06:49| 来源: 网络整理| 查看: 265

ffmpeg网址与下载 官网Github地址 打开官网后,可以通过下面的2个地址下载解压缩的7z版本 在这里插入图片描述在这里插入图片描述 解压缩后,在bin目录中可以看到其中主要的文件ffmpeg.exe:音视频转码、转换器ffplay.exe:简单的音视频播放器ffserver.exe:流媒体服务器ffprobe.exe:简单的多媒体码流分析器 解压缩,并把bin目录配置到环境变量中,执行ffmpeg -version查看是否看装成功 ffmpeg的使用 ffmpeg \ [全局参数] \ [输入文件参数] \ -i [输入文件] \ [输出文件参数] \ [输出文件]

例如:

ffmpeg \ -y \ # 全局参数 -c:a libfdk_aac -c:v libx264 \ # 输入文件参数 -i input.mp4 \ # 输入文件 -c:v libvpx-vp9 -c:a libvorbis \ # 输出文件参数 output.webm # 输出文件

上面的命令将 mp4 文件转成 webm 文件,这两个都是容器格式。输入的 mp4 文件的音频编码格式是 aac,视频编码格式是 H.264;输出的 webm 文件的视频编码格式是 VP9,音频格式是 Vorbis。 如果不指明编码格式,FFmpeg 会自己判断输入文件的编码。因此,上面的命令可以简单写成下面的样子。

ffmpeg -i input.avi output.mp4

常用的命令行参数如下:

-c:指定编码器-c copy:直接复制,不经过重新编码(这样比较快)-c:v:指定视频编码器-c:a:指定音频编码器-i:指定输入文件-an:去除音频流-vn: 去除视频流-preset:指定输出的视频质量,会影响文件的生成速度,有以下几个可用的值 ultrafast, superfast, veryfast, faster, fast, medium, slow, - slower, veryslow。-y:不经过确认,输出时直接覆盖同名文件。 如果比较耗费cpu,可以尝试指定threads参数。可以通过concat合并2段视频 实例

查看视频信息

ffmpeg -i input.mp4

加上-hide_banner可以精简显示

ffmpeg -i input.mp4 -hide_banner

将文件转换成h.265输出

ffmpeg -i [input.file] -c:v libx265 output.mp4

改变视频分辨率

ffmpeg \ -i input.mp4 \ -vf scale=480:-1 \ output.mp4 命令行转码实例

视频先转码成h.264后再转成m3u8会极大的减少体积,所以可以将2个命令放在一起执行

命令1&命令2&命令3…(无论前面命令是否故障,照样执行后面)命令1&&命令2&&命令3…(仅当前面命令成功时,才执行后面)命令1||命令2||命令3…(仅当前面命令失败时.才执行后面) ffmpeg -i ./start/xx.mp4 -c:v libx264 out.mp4&&ffmpeg -i ./out.mp4 -c copy -map 0 -f segment -segment_list aa/video.m3u8 -segment_time 10 aa/video-%04d.ts 通过python将文件夹下所有视频转码

首先新建start文件夹,并将mp4文件放入,再新建end文件夹,用于放转码后的视频文件 完整代码如下:

import os import re import pathlib import shutil import json from nanoid import generate path = './start/' for file in os.listdir(path): if file.endswith(".mp4"): file_end = re.sub(r"\d+\.","",file).replace("(","-").replace(")", "").replace(" ","") print(file) os.rename(os.path.join(path,file),os.path.join(path,file_end)) video_dir = pathlib.Path.cwd().joinpath("start") videos = [] shutil.rmtree("./end") def my_mkdir(path): isExists=os.path.exists(path) if not isExists: # 不存在创建 os.makedirs(path) return True else: shutil.rmtree(path) # 存在就删除后再创建 os.makedirs(path) return True def turn_video(url): video_name = pathlib.Path(url).stem # 获取不包含文件后缀的文件名 video_dir = generate('1234567890abcdef', 10) end_video_path = pathlib.Path.cwd().joinpath("end",video_dir) # 拼接路径 my_mkdir(end_video_path) cmd_1 = "ffmpeg -i {} -c:v libx264 {}.mp4&&ffmpeg -i ./{}.mp4 -c copy -map 0 -f segment -segment_list {}/video.m3u8 -segment_time 10 {}/video-%04d.ts".format(url,video_name,video_name,end_video_path,end_video_path) os.system(cmd_1) end_video_path = "http://10.226.10.72/video/{}/vide0.m3u8".format(video_dir) return video_name,end_video_path for i in video_dir.glob("**/*"): # 级联获取文件夹下所有文件 v_name,v_path = turn_video(i) # 对start文件夹下的所有视频转码 v_dict = dict(name=v_name, path=v_path) videos.append(v_dict) json_file_path = './result.json' json_file = open(json_file_path, mode='w') json.dump(videos, json_file, indent=4, ensure_ascii=False)

可以看到执行后输出了result.json文件,把视频部署到nginx服务中,再在前端用video.js等插件播放就可以了



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有