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.pswp.cn/diannao/40847.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/40847.shtml
英文地址,請注明出處:http://en.pswp.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…

【LC刷題】DAY22:491 46 47 332 51 37

【LC刷題】DAY22&#xff1a;491 46 47 332 51 37 文章目錄 【LC刷題】DAY22&#xff1a;491 46 47 332 51 37491. 非遞減子序列 [link](https://leetcode.cn/problems/non-decreasing-subsequences/description/)46. 全排列 [link](https://leetcode.cn/problems/permutations…

水利行業的智慧化轉型實踐:結合具體案例,探討智慧水利在提升水資源利用效率、改善水生態環境方面的實際效果

目錄 一、引言 二、智慧水利的定義與意義 三、智慧水利在提升水資源利用效率方面的實踐 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;可以從…

Vue3 Hooks 用法 scrollTop, mousemoveHandler,useCountDown

三個實例來自 learn_vue: 【教學工程】學習vue2/vue3 (gitee.com) 目錄 1. 何為Hooks 2. 使用場景 3. 常見的 Hooks 函數 4. 實例 4.1簡易hook 例子 4.2 自定義scrolltop例子 4.3 mousemoveHandler例子 4.4 useCountDown例子 1. 何為Hooks Hooks 是一種函數&#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…

QT元對象系統的用法技巧

文章目錄 聲明對象屬性獲取對象的屬性和方法通過對象名稱查找對象判斷對象的繼承關系給類添加額外的信息Qt的元對象系統是Qt框架的一個核心特性,它為對象提供了運行時類型信息、屬性系統、信號和槽機制以及動態屬性功能。這個系統是由Qt的元對象編譯器(MOC)支持的,MOC是一個預…

代碼隨想錄-DAY②-數組——leetcode 977 | 209

977 思路 使用兩個指針分別指向位置 0 和 n?1&#xff0c;每次比較兩個指針對應的數&#xff0c;選擇較大的那個逆序放入答案并移動指針。這種方法無需處理某一指針移動至邊界的情況。 時間復雜度&#xff1a;O(n) 空間復雜度&#xff1a;O(1) 代碼 class Solution { pub…

SpringCloud Feign 報錯 Request method ‘POST‘ not supported 的解決辦法

通過SpringCloud Feign 調用其他項目或微服務的接口方法時報Request method ‘POST‘ not supported 的錯誤&#xff1a; 問題出現原因&#xff1a; 可能的原因是 Feign 默認使用的請求方法為 POST&#xff0c;而不是 GET。另外也有可能是由于消費方法和接口方法使用的注解不…

拼多多店鋪電話采集軟件使用步驟解析

要快速訪問拼多多店鋪鏈接&#xff0c;可以使用一個提供快速訪問功能的拼多多店鋪鏈接程序。以下是使用步驟的簡要解析&#xff1a; 下載和安裝程序&#xff1a;首先&#xff0c;在可靠的下載平臺或官方網站上下載并安裝拼多多店鋪鏈接程序。確保選擇一個可信賴的程序&#xff…

Dialog設置背景透明和尺寸

class TestDialog(context: Context?,var clickListener: OnClickCallBack) : Dialog(context!!) {lateinit var binding:TestDialogBindingoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)binding TestDialogBinding.inflate(Lay…

軟件測試面試題:Redis的五種數據結構,以及使用的場景是什么?

字符串&#xff08;Strings&#xff09;&#xff1a;簡單直接&#xff0c;就像記事本一樣&#xff0c;用來存儲和快速訪問簡單的數據&#xff0c;比如緩存網頁或者保存用戶會話信息。 列表&#xff08;Lists&#xff09;&#xff1a;有序的數據集合&#xff0c;適合用來存儲按…