音视频处理

news2024/11/18 17:38:11

问题背景:h265格式的视频转码之后ios存在兼容问题
原转码命令:

/usr/local/bin/ffmpeg -y -i /data/tmp/1672385812000-tks3wa.mp4 -vf scale=720:1281 -r 30 /data/tmp/1672385812000-tks3wa_720.mp4 -hide_banner

解决办法:
// 原视频格式为hvc,ios只支持hvc,经过scale转换分辨率后视频格式为avc,ios不支持avc,-vcode libx265将视频转为hev,再将hev转为hvc(avc和hvc不能直接转换)

//ffmpeg -y -i /Users/xiaoyq/Downloads/1672817751000-nxxr5f.mp4 -vcodec libx265 -vf scale=360:720 -r 30  /Users/xiaoyq/Downloads/1672817751000-nxxr5f_720.mp4 -hide_banner
//ffmpeg -i '/Users/xiaoyq/Downloads/1672817751000-nxxr5f_720.mp4' -c:v copy -tag:v hvc1 -c:a copy 'output-hvc1.mp4'

./ffprobe -v error -select_streams v -show_entries stream=codec_tag_string -of default=noprint_wrappers=1:nokey=1 ./1672817751000-nxxr5f.mp4
查看视频格式
h264的用原来的处理流程;
新增一个h265的处理流程
代码:


func (client *Client) Transfer() (string, error) {
	global.Log.Info("client: ", client)
	if client.height%2 != 0 {
		client.height += 1
	}
	height := client.codeRate * client.height / client.width
	rateCmd := joinRateCmd(client.codeRate, height)
	targetName := parseTargetName(client.tempPath, client.fileName, client.codeRate)

	cmdArgumentProbe := []string{"-v", "error", "-select_streams", "v", "-show_entries", "stream=codec_tag_string", "-of", "default=noprint_wrappers=1:nokey=1", client.fileName}
	cmd := exec.Command("ffprobe", cmdArgumentProbe...)
	global.Log.Info(cmd)
	stout, err := cmd.CombinedOutput()

	if strings.TrimSpace(string(stout)) != "avc1" {
		// 原视频格式为hvc,ios只支持hvc,经过scale转换分辨率后视频格式为avc,ios不支持avc,-vcode libx265将视频转为hev,再将hev转为hvc(avc和hvc不能直接转换)
		cmdArguments := []string{"-y", "-i", client.fileName, "-vcodec", "libx265", "-vf", rateCmd, "-r", "30", targetName, "-hide_banner"}
		cmd = exec.Command("ffmpeg", cmdArguments...)
		global.Log.Info(cmd)
		err = cmd.Run()

		targetNewName := parseTargetNameNew(client.tempPath, client.fileName, client.codeRate)
		cmdArgumentsNew := []string{"-i", targetName, "-c:v", "copy", "-tag:v", "hvc1", "-c:a", "copy", targetNewName}
		cmd = exec.Command("ffmpeg", cmdArgumentsNew...)
		global.Log.Info(cmd)
		err = cmd.Run()
		return targetNewName, err
	} else {
		cmdArguments := []string{"-y", "-i", client.fileName, "-vf", rateCmd, "-r", "30", targetName, "-hide_banner"}
		cmd = exec.Command("ffmpeg", cmdArguments...)
		global.Log.Info(cmd)
		cmd.Run()
		return targetName, err
	}

}

一定注意要用数组,字符串拼接无法识别命令!!!

很好的参考资料
阮一峰 很细致明了

ffprobe 视频 查看视频的参数信息。
https://blog.csdn.net/zqx1205/article/details/115375075
https://blog.csdn.net/yinshipin007/article/details/127291422。
这两篇教程讲的很好,我也是看到这个之后逐渐摸索出的解决方法。
在这里插入图片描述
https://www.cnblogs.com/faithlocus/p/15559269.html
https://www.bilibili.com/video/BV1EQ4y1S7KP/?spm_id_from=333.788 视频教程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/183906.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

可持久化线段树(主席树)详解(c++ 图片演示+ 代码)

文章目录可持久化线段树(主席树)建树前准备!初始化建树!更新操作!区间查询!AC code可持久化线段树(主席树) 可持久化线段树指的是可持久化权值线段树,关于权值线段树可以看我这篇博客: 权值线…

Mininal BASH-like line editing is supported.

翻译:支持类似Mininal bash的行编辑。对于第一个单词,TAB列出了可能的命令补全。“其他任何地方”标签列出可能的设备或文件补全。原因分析:出现这个问题的原因是windows启动的时候,没有找到启动文件。(我的电脑之所以…

每天一道大厂SQL题【Day01】

每天一道大厂SQL题【Day01】 大家好,我是Maynor。相信大家和我一样,都有一个大厂梦,作为一名资深大数据选手,深知SQL重要性,接下来我准备用100天时间,基于大数据岗面试中的经典题,以每日1题的形…

5.6 奇异值

对单位圆的乘法 首先我们在单位圆上遍历所有的点,作为二维向量,来研究某个矩阵乘以这些向量得到的结果,我们选三种矩阵,秩为0的矩阵,秩为1的矩阵和秩为2的矩阵。   秩为0的矩阵就一个,也就是0矩阵&#x…

【页面设计】02.CSS

CSS&#xff1a;Cascading Style Sheets 层叠样式表1.不是编程语言。2.告诉浏览器如何指定样式、布局等一、基本格式效果&#xff1a;二、三种方式添加CSS1.外部样式表&#xff08;1&#xff09;CSS保存在.css文件中&#xff08;2&#xff09;在HTML的<head>中使用<li…

棕黑色L-CQDs/TiO2 离子液体修饰/500nm粒径氮硫掺杂碳量子点N,S-CQDs/ZnO的制备过程

棕黑色L-CQDs/TiO2 离子液体修饰/500nm粒径氮硫掺杂碳量子点N,S-CQDs/ZnO的制备过程 今天小编分享L-CQDs/TiO2 离子液体修饰碳量子点的制备过程&#xff0c;一起看看吧: L-CQDs/TiO2 离子液体修饰碳量子点的制备过程&#xff1a; 通过水热法制备L-CQDs/TiO2复合催化剂。将50 …

Harbor安装对接Containerd

使用docker-compose安装harbor 先决条件&#xff1a; 安装docker安装docker-compose 安装参考 下载并解压 wget -c https://github.com/goharbor/harbor/releases/download/v2.3.5/harbor-offline-installer-v2.3.5.tgztar -zxvf harbor-offline-installer-v2.3.5.tgz cd harbo…

Aurora、Chip2chip、Ethernet(一)

摘要&#xff1a;之前的文章对aurora、chip2chip以及Ethernet这三个IP都进行介绍、仿真和使用说明。但是在实际使用中一定没有那么简单&#xff0c;在复杂联合使用的情况下&#xff0c;肯定会碰到各种各样的问题。此系列文章主要说明如何解决联合使用情况下碰到的一系列问题。 …

操作系统(day02)

“指令”就是处理器&#xff08;CPU&#xff09;能识别、执行的最基本的命令也可以叫做机器指令 两种指令、两种处理器状态、两种程序 两种指令 特权指令 如内存清零指令&#xff0c;不允许用户程序使用非特权指令 如普通的运算指令 既然有两种指令&#xff0c;且特权指令不…

IB学习者培养目标-知识渊博

“We explore concepts, ideas and issues that have local and global significance. In so doing, we acquire in-depth knowledge and develop understanding across a broad and balanced range of disciplines.” -IB definition of the attribute Knowledgeable“Being …

C++ —— 容器适配器和仿函数

目录 1.什么是容器适配器 2.stack的模拟实现 3.queue的模拟实现 4.deque概述 5.priority_queue的模拟实现 5.1仿函数 5.2模拟实现 6.反向迭代器 1.什么是容器适配器 在已有的容器(vector、list)的基础上适配出其他的容器。就类似于手机、笔记本电脑的电源适配器&…

一些lc周赛

6285. 执行 K 次操作后的最大分数(327 贪心 优先队列模拟) Math.ceil(val) 向上取整函数 public long maxKelements(int[] nums, int k) {PriorityQueue<Integer> queuenew PriorityQueue<>((a,b)->(b-a));for(int n:nums){queue.add(n);}long sum0;for(int i0…

JavaScript高级 ES6新特性

ES6~ES13新特性1. ECMA新描述概念1. 概念区别回顾2. 词法环境3. 环境记录4. 内存图的表示2. let、const的使用1. 基础的使用2. 作用域提升3. 暂时性死区 (TDZ)4. window 添加属性的区别5. 块级作用域的使用6. var、let、const的选择3. 模板字符串的详解4. ES6函数的增强用法1. …

VSCODE 系列(七)格式化工具clang-format

文章目录一、VS Code中使用生成.clang-format文件VS Code设置参考一、VS Code中使用 VS Code 中自带clang-format.exe 生成.clang-format文件 使用命令 .\clang-format.exe -stylellvm -dump-config > .clang-format或者新建.clang-format文件&#xff0c;将自己的配置…

vscode firefox xdebug 安装及配置

一、安装 vscode扩展中招xdebug直接安装。 firefox扩展中找xdebug直接安装。 xdebug下载&#xff0c;以window为例。 根据配置选下载内容。 设置成和ide相同的 。 二、配置 文档地址&#xff1a;Xdebug: Documentation 所有配置说明&#xff1a;Xdebug: Documentation All …

.mp4 文件转化成 .bag 文件并在 rviz 中显示

文章目录一、Python实现.mp4和.bag相互转化1、.mp4转.bag验证是否转换成功&#xff1a;使用 rosplay2、.bag转.mp4二、rviz 读取 *.bag 数据包并显示1、查看bag数据包的基本信息2、rviz 显示信息一、Python实现.mp4和.bag相互转化 1、.mp4转.bag # -*- coding: utf-8 -*- ##i…

Webpack 的 Chunk,想怎么分就怎么分

想必大家都用过 webpack&#xff0c;也或多或少了解它的原理&#xff0c;但是不知道大家有没有写过 Webpack 的插件呢&#xff1f; 今天我们就一起来写一个划分 Chunk 的 webpack 插件吧&#xff0c;写完后你会发现想怎么分 Chunk 都可以&#xff01; 首先我们简单了解下 web…

图像配准:基于 OpenCV 的高效实现

在这篇文章中&#xff0c;我将对图像配准进行一个简单概述&#xff0c;展示一个最小的 OpenCV 实现&#xff0c;并展示一个可以使配准过程更加高效的简单技巧。什么是图像配准图像配准被定义为将不同成像设备或传感器在不同时间和角度拍摄的两幅或多幅图像&#xff0c;或来自同…

什么牌子的护眼灯最好推荐?盘点口碑好的护眼灯品牌

护眼灯是目前大部分家庭都在使用的灯具之一&#xff0c;利用光源起到保护视力的效果&#xff0c;预防近视&#xff0c;可谓是现代生活中伟大的发明&#xff0c;今天由小编来列出优秀的护眼灯品牌&#xff0c;并详细的介绍&#xff0c;告诉大家哪个护眼灯品牌好。① 南卡护眼台…

【微信小程序-原生开发】实用教程07 - Grid 宫格导航,详情页,侧边导航(含自定义页面顶部导航文字)

开始前&#xff0c;请先完成成员页的开发&#xff0c;详见 【微信小程序-原生开发】实用教程 06-轮播图、分类页签 tab 、成员列表&#xff08;含Tdesign升级&#xff0c;切换调试基础库&#xff0c;设置全局样式&#xff0c;配置组件按需注入&#xff0c;添加图片素材&#x…