ffmpeg将多个yuv文件编码为MP4视频文件

一、编码方案

        在视频录制时,每一帧保存为一个yuv文件,便于纠错和修改。在编码为MP4文件时,我的方案是将所有yuv文件先转码为单个MP4文件,然后使用ffmpeg的concat功能拼接为完整的视频。

二、shell脚本

#!/bin/bash# 检查参数数量是否正确
if [ "$#" -ne 5 ]; thenecho "Usage: $0 <directory> <width> <height> <FPS> <quality>"echo "quality : ultrafast superfast veryfast faster fast medium slow slower veryslow placebo"exit 1
fi# 将传入的参数赋值给变量
# 使用双引号将变量括起来,防止变量被shell解释
DIRECTORY="$1"
WIDTH="$2"
HEIGHT="$3"
FRAMERATE="$4"
QUALITY="$5"# 输入输出格式
PIX_FMT="yuv420p"# 输入文件名前缀
PREFIX="video_frame_"# 输出文件名    
OUTPUT_VIDEO="output.mp4"# 进入目录
cd $DIRECTORY || exit 1# 清理文件列表
rm -f filelist.txt# 删除临时文件
rm -f temp_*.mp4# 使用for循环遍历目录中的YUV文件  
for file in ./${PREFIX}*.yuv; do  # 提取文件名(不带扩展名)  base=$(basename "$file" .yuv)# 设置输出文件名output_temp="temp_${base}.mp4"# 不显示输出ffmpeg -s ${WIDTH}x${HEIGHT} -f rawvideo -pix_fmt $PIX_FMT -r $FRAMERATE -i "$file" -c:v libx264 -pix_fmt $PIX_FMT -frames:v 1 "$output_temp" > /dev/null 2>&1# 显示输出#ffmpeg -s ${WIDTH}x${HEIGHT} -f rawvideo -pix_fmt $PIX_FMT -r $FRAMERATE -i "$file" -c:v libx264 -pix_fmt $PIX_FMT -frames:v 1 "$output_temp"echo "file '$output_temp'" >> filelist.txt
done# 使用FFmpeg合并所有MP4文件
ffmpeg -f concat -safe 0 -i filelist.txt -c copy "$OUTPUT_VIDEO"# 检查ffmpeg命令是否执行成功
if [ $? -eq 0 ]; thenecho "Success! Conversion completed: $OUTPUT_VIDEO"
elseecho "Error! Conversion failed."
fi# 删除临时文件
rm -f temp_*.mp4# 清理文件列表
rm -f filelist.txt

使用filelist.txt保存中间文件名,注意写入格式,前面有一个file,这是concat功能的读取格式。

每一项参数都可以查到,注意要加上 -frames:v 1,不加会报错

三、总结

        该方法为自身实验并成功播放,用于提供思路,并不是最优解,还有很多可以优化的地方。

由于我是在开发板上运行的,所以编码较慢。

放一张效果图:

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

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

相关文章

MYSQL8.0环境部署

创建用户 groupadd mysql useradd -g mysql mysql 删除原来的包 # rpm -qa|grep mysql # rpm -qa|grep mari mariadb-libs-5.5.68-1.el7.x86_64 # rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64 解压 cd /usr/local & mkdir mysql cd mysql # cp mysql-8…

Ubuntu 22.04 安装中文字体

笔者在用OpenCV4.9处理图片加水印时&#xff0c;中文乱码。原来是Ubuntu 22.04发行版缺少中文字体支持&#xff0c;因此&#xff0c;笔者就找资料安装了需要的中文字体&#xff0c;特此记录&#xff0c;以备后查。 1、打开终端&#xff1a; 2、更新软件包列表&#xff1a; su…

水利行业的智慧化转型实践:结合具体案例,探讨智慧水利在提升水资源利用效率、改善水生态环境方面的实际效果

目录 一、引言 二、智慧水利的定义与意义 三、智慧水利在提升水资源利用效率方面的实践 1. 智慧灌溉系统 2. 智慧供水系统 3. 智慧水务管理平台 四、智慧水利在改善水生态环境方面的实践 1. 智慧水质监测系统 2. 智慧水生态修复系统 3. 智慧防洪减灾系统 五、具体案例…

如何在 Odoo 16 中添加计算字段的搜索过滤器

首先&#xff0c;了解 Odoo 使用计算字段的原因很重要。当我们需要从其他字段获取计算值或计算值时&#xff0c;就会使用计算字段。换句话说&#xff0c;不是从数据库中检索值&#xff0c;而是可以使用函数计算字段的值。计算字段的一个例子是产品总金额&#xff0c;即通过将产…

EtherCAT通讯介绍

一、EtherCAT简介 EtherCAT&#xff08;Ethernet for Control Automation Technology&#xff09;是一种实时以太网技术&#xff0c;是由德国公司Beckhoff Automation在2003年首次推出的。它是一种开放的工业以太网标准&#xff0c;被设计用于满足工业自动化应用中的高性能和低…

汇聚荣拼多多评价好不好?

汇聚荣拼多多评价好不好?在探讨电商平台的口碑时&#xff0c;用户评价是衡量其服务质量和商品质量的重要指标。拼多多作为国内领先的电商平台之一&#xff0c;其用户评价自然成为消费者选择购物平台时的参考依据。针对“汇聚荣拼多多评价好不好?”这一问题&#xff0c;可以从…

vue css 链式布局模式

<div class"pp-wrap"> <div class"pp-left"><!--跳活动反思--><div class"even-box" v-for"(item,index) in trackingPtoPLeftList" :key"index" click"jumpReview(item)"><div …

echarts柱状选中shadow阴影背景宽度设置

使用line&#xff0c;宽度增大到所需要的宽度&#xff0c;设置下颜色透明度就行 tooltip: {trigger: axis,//把阴影的层级往下降z:-15,axisPointer: {type: line,lineStyle: {color: rgba(150,150,150,0.3),width: 44,type: solid,},}, }, series: [{type: bar,barWidth:20,//…

python自动化办公之BeautifulSoup爬取并解析html文本

用到的库&#xff1a;BeautifulSoup 实现效果&#xff1a;爬取网站内容&#xff0c;拿到html文本并解析html文本 代码&#xff1a; 先爬取 # 先导入requests包 import requests urlhttps://www.baidu.com responserequests.get(url) # 做1个断言&#xff0c;如果执行成功&a…

【C语言】—— 文件操作(上)

【C语言】—— 文件操作&#xff08;上&#xff09; 一、 为什么使用文件二、 什么是文件2.1、 程序文件2.2、 数据文件2.3、 文件名2.4、二进制文件与文本文件 三、 文件的打开和关闭3.1、流和标准流&#xff08;1&#xff09;流&#xff08;2&#xff09;标准流 3.2、文件指针…

64.函数参数和指针变量

目录 一.函数参数 二.函数参数和指针变量 三.视频教程 一.函数参数 函数定义格式&#xff1a; 类型名 函数名(函数参数1,函数参数2...) {代码段 } 如&#xff1a; int sum(int x&#xff0c;int y) {return xy; } 函数参数的类型可以是普通类型&#xff0c;也可以是指针类…

Python可实现各种算法库之algorithms使用详解

概要 在软件开发和计算机科学领域,算法是解决问题的核心工具。Python 作为一种广泛使用的编程语言,提供了多种内置和第三方库来实现各种算法。algorithms 库是一个集合了多种常用算法和数据结构的 Python 库,旨在帮助开发者快速实现和应用这些算法。本文将详细介绍 algorit…

Ollama基于Casaos一键部署,并接入Dify知识库,无需再为API付费

什么是Ollama Ollama是一个开源的大型语言模型服务工具&#xff0c;它帮助用户快速的运行大模型。浪浪云将它做为一键部署通过简单的安装&#xff0c;用户可以执行一条命令就可以运行开源大型语言模型&#xff0c;如 llama3 ,通以千问。极大地简化了部署和管理LLM的过程&#x…

modelscope可控细节的长文档摘要

modelscope可控细节的长文档摘要尝试 本文的想法来自今年OpenAI cookbook的一篇实践&#xff1a;summarizing_long_documents&#xff0c;目标是演示如何以可控的细节程度总结大型文档。 如果我们想让大语言模型总结一份长文档&#xff08;例如 10k 或更多tokens&#xff09;&…

6个步骤实现Postman接口压力测试(建议收藏)

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 这里讲是postman做接口并发测试&#xff0c;基础用法不做赘述 1、第一步接口可以通的情况下点击…

Proteus-51单片机-DS18B20多点测温

DS18B20多点测温 一、Proteus仿真演示 每个DS18B20都有一个唯一的64位序列号,这使得在同一总线上可以挂载多个传感器,无需额外的地址分配。主机(通常为单片机)通过特定的时序控制,可以依次读取各个DS18B20的温度数据,实现分布式测温。 二、代码特点 三、开发环境介绍 本…

基于Arduino平台开源小车的初步使用体验

创作原因&#xff1a;偶然有机会接触到基于Arduino平台的开源智能小车&#xff0c;初步使用后与大家分享。因使用时间不常&#xff0c;可以纯当个乐子看看&#xff0c;感谢大家的阅读&#xff01; 图&#xff1a;一款基于Arduino平台的开源小车 一、开发环境 Misly&#xff1…

shark云原生-日志体系-filebeat高级配置(适用于生产)

文章目录 1. filebeat.inputs 静态日志收集器2. filebeat.autodiscover 自动发现2.1. autodiscover 和 inputs2.2. 如何配置1.2.1. Providers 提供者1.2.2. Providers kubernetes templates1.2.3. 基于提示&#xff08;hints&#xff09;的自动发现支持的 **hints**的完整列表&…

windows搭建mqtt服务器,并配置DTU收集传感器数据

1.下载并安装emqx服务器 参考&#xff1a;Windows系统下本地MQTT服务器搭建&#xff08;保姆级教程&#xff09;_mqtt windows-CSDN博客 这里我下载的是emqx-5.3.0-windows-amd64.zip版本 下载好之后&#xff0c;放到服务器的路径&#xff0c;我这里放的地方是&#xff1a;C…

脑启发设计:人工智能的进化之路

编者按&#xff1a;你可以用左手&#xff08;不常用的那只手&#xff09;的小指与食指拿起一件物品么&#xff1f; 试完你是不是发现自己竟然可以毫不费力地用自己不常用的手中&#xff0c;两根使用频率相对较低的手指&#xff0c;做一个不常做的动作。这就是人类大脑不可思议…