ffmpeg-将多个视频切片成一个新的视频

使用 ffmpeg 工具可以轻松完成将多个视频切片合并为一个新的视频。以下是实现这一目标的具体步骤和命令。

步骤概览
1、将多个视频切片。
2、创建文本文件列出切片的视频片段。
3、使用 ffmpeg 合并这些切片为一个新的视频。

一:安装 ffmpeg
确保你的系统中已经安装 ffmpeg。如果未安装,可以通过以下方式安装:

Windows
下载 ffmpeg官网(https://ffmpeg.org/download.html) 提供的二进制文件。
将 ffmpeg.exe 添加到系统环境变量。
Linux
使用包管理器安装:

 sudo apt updatesudo apt install ffmpeg

Mac
使用 Homebrew 安装:

brew install ffmpeg

安装完成后,运行以下命令检查版本:

 ffmpeg -version

二:将多个视频切片
假设需要将不同视频文件切片为多个片段,可以针对每个视频执行以下截取命令:
命令示例:截取视频

ffmpeg -i input1.mp4 -ss 00:00:10 -t 00:00:05 -c copy slice1.mp4
ffmpeg -i input2.mp4 -ss 00:00:20 -t 00:00:10 -c copy slice2.mp4
ffmpeg -i input3.mp4 -ss 00:01:00 -t 00:00:08 -c copy slice3.mp4

解释:
-i inputX.mp4:指定源视频文件。
-ss 00:00:10:从视频的第 10 秒开始截取。
-t 00:00:05:截取时长为 5 秒。
-c copy:使用无损方法进行切割(避免重新编码)。
这段命令会从不同的视频源中分别获取特定片段并保存为 slice1.mp4、slice2.mp4 等切片文件。

三. 创建列举视频片段的列表文件
ffmpeg 需要一个文本文件来列举参与合并的所有视频切片。可以按如下格式创建一个文件,例如命名为 file_list.txt:

file 'slice1.mp4'
file 'slice2.mp4'
file 'slice3.mp4'

注意:
每一行使用 file 开头,后面是文件名并用单引号包裹。
文件路径支持绝对路径。如果使用相对路径,则 file_list.txt 需要与切片文件位于相同目录。

四、 使用 ffmpeg 合并切片视频
无重新编码合并
如果所有视频切片的编码格式一样(如同样为 H.264 编码)且分辨率一致,可直接合并:

ffmpeg -f concat -safe 0 -i file_list.txt -c copy output.mp4

解释:
-f concat:指定要进行“文件拼接”的操作。
-safe 0:允许对路径中带特殊字符的文件处理。
-i file_list.txt:输入文件列表。
-c copy:直接拼接而不重新编码(速度更快、无损)。
重新编码合并
若视频切片格式或分辨率不一致,可以选择重新编码合并:

ffmpeg -f concat -safe 0 -i file_list.txt -c:v libx264 -preset fast -crf 23 -c:a aac output.mp4

解释:
-c:v libx264:指定视频编码器为 H.264(使用较高兼容性)。
-crf 23:视频质量参数(可选,范围 0-51,数值越小质量越高)。
-c:a aac:设置音频编码为 AAC。
-preset fast:规定编码的速度等级(如 ultrafast, slow 等)。

五. 合并完成后测试输出视频
合并完成后,可以播放并检查生成的视频:

ffplay output.mp4

或使用系统自带的视频播放器打开 output.mp4。

六、高级功能:自动批量处理
如果需要从大量视频中截取多个片段并合并,可以使用脚本自动化这一流程。以下是一个简单的 Bash 脚本示例:

#!/bin/bash# 要处理的视频列表
videos=("input1.mp4" "input2.mp4" "input3.mp4")# 截取片段
for i in ${!videos[@]}; doffmpeg -i "${videos[$i]}" -ss 00:00:05 -t 00:00:10 -c copy "slice$((i+1)).mp4"
done# 创建拼接列表文件
echo > file_list.txt
for i in $(seq 1 ${#videos[@]}); doecho "file 'slice$i.mp4'" >> file_list.txt
done# 合并视频片段
ffmpeg -f concat -safe 0 -i file_list.txt -c copy output.mp4echo "合并完成,生成视频:output.mp4"

问题与注意事项
拼接失败报错:concat format is not supported
视频编码格式或分辨率不一致会导致此问题。
使用重新编码方式解决(见“重新编码合并”)。
切片视频不同步
使用 -c copy 时,只能合并具有相同时间戳格式的视频。
添加标志 -reset_timestamps 1 处理时间戳问题。
音频处理问题
如果音频部分需要统一,则建议重新编码并使用统一的音频采样率和音频编码器。

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

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

相关文章

【第2月_day10】Pandas数据查看与选择

以下是专为小白设计的 Pandas数据查看与选择 学习内容,从基础到应用逐步讲解,附带清晰示例和注意事项: 一、数据查看:快速了解你的数据 1. head() 和 tail() 作用:查看数据的前几行或后几行,默认显示5行。…

Jetpack LiveData 使用与原理解析

一、引言 在 Android 开发中,数据的变化需要及时反映到界面上是一个常见的需求。然而,传统的方式可能会导致代码复杂、难以维护,并且容易出现内存泄漏等问题。Jetpack 组件中的 LiveData 为我们提供了一种优雅的解决方案,它是一种…

Unity2D 五子棋 + Photon联网双人对战

开发环境配置 Unity版本2022.3 创建Photon账号以及申请Photon中国区服务 官网申请账号:Multiplayer Game Development Made Easy Photon Engine 中国区服务: 光子引擎photonengine中文站 成都动联无限科技有限公司(vibrantlink.com) 导入PUN2插件以及…

(UI自动化测试web端)第二篇:元素定位的方法_css定位之属性选择器

看代码里的【find_element_by_css_selector( )】( )里的表达式怎么写? 文章介绍了第四种写法属性选择器 ,你要根据网页中的实际情况来判断自己到底要用哪一种方法来进行元素定位。每种方法都要多练习,全都熟了之后你在工作当中使用起来元素定…

预编译能否 100%防 sql 注入?

🌟 什么是 SQL 注入? SQL 注入(SQL Injection)是指攻击者利用特殊输入,让数据库执行它本来不应该执行的代码,从而获取或篡改数据。 就像在考试的时候偷偷改题目,让老师改成你想要的内容&#…

第十五章 | Layer2、Rollup 与 ZK 技术实战解析

📚 第十五章 | Layer2、Rollup 与 ZK 技术实战解析 ——构建下一代高性能区块链应用,从 Solidity 到 zkSync! ✅ 本章导读 Layer2 和零知识证明(ZK)正成为区块链发展的核心方向。 随着主网 Gas 居高不下、TPS 无法满…

2025-03-26 学习记录--C/C++-PTA 6-3 求链式表的表长

合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。💪🏻 一、题目描述 ⭐️ 6-3 求链式表的表长 本题要求实现一个函数,求链式表的表长。 函数接口定义: &…

【Linux】Linux_Ubuntu与Windows之间的文件传输

一、Linux终端命令的复制粘贴 1.打开linux 终端,输入以下命令:(注意,需要联网) 2.命令行下载: sudo apt-get autoremove open-vm-tools 3.命令行安装: sudo apt-get install open-vm-tools-…

Python Sanic面试题及参考答案

目录 Sanic 的事件循环机制与 uvloop 的关系 Sanic 的 Request/Response 对象生命周期如何管理?如何访问请求上下文? 对比 Sanic 与 Flask/Django 的异步处理模型差异 Sanic 的 Blueprint 机制如何实现模块化路由?如何处理跨蓝图中间件? 如何在 Sanic 中实现 WebSocket…

算法每日一练 (18)

💢欢迎来到张翊尘的技术站 💥技术如江河,汇聚众志成。代码似星辰,照亮行征程。开源精神长,传承永不忘。携手共前行,未来更辉煌💥 文章目录 算法每日一练 (18)删除并获得点数题目描述解题思路解题…

VsCode启用右括号自动跳过(自动重写) - 自录制gif演示

VsCode启用右括号自动跳过(自动重写) - 自录制gif演示 前言 不知道大家在编程时候的按键习惯是怎样的。输入完左括号后编辑器一般会自动补全右括号&#xff0c;输入完左括号的内容后&#xff0c;是按→跳过右括号还是按)跳过右括号呢&#xff1f; for (int i 0; i < a.s…

用Python和Stable Diffusion生成AI动画:从图像到视频的全流程指南

引言 本文将演示如何通过Python代码实现基于文本提示的AI动画生成。我们将使用Stable Diffusion生成连贯图像帧,结合OpenCV合成视频,最终实现一个可自定义的动画生成 pipeline。 一、环境准备 1. 依赖安装 # 安装核心库 pip install diffusers transformers torch numpy …

【Git 常用指令速查表】

Git 常用指令速查表 Git 常用指令速查表目录1. 初始化仓库2. 提交代码流程3. 分支管理4. 远程仓库操作5. 撤销操作6. 查看状态与日志7. 其他实用指令完整操作示例常用场景速查表 Git 常用指令速查表 目录 初始化仓库提交代码流程分支管理远程仓库操作撤销操作查看状态与日志其…

分布式爬虫框架Scrapy-Redis实战指南

引言 在当今数字化的时代背景下&#xff0c;互联网技术的蓬勃兴起极大地改变了旅游酒店业的运营模式与市场格局。作为旅游产业链中的关键一环&#xff0c;酒店业的兴衰与互联网技术的应用程度紧密相连。分布式爬虫技术&#xff0c;尤其是基于 Scrapy 框架的 Scrapy-Redis 扩展…

爬虫:scrapy面试题大全(60个scrapy经典面试题和详解)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 1. 什么是Scrapy?2. Scrapy 框架的组件及其作用?3. Scrapy的工作流程是什么?(运行机制)4. 如何创建一个Scrapy项目?5. 如何定义一个Spider?6. 如何在Scrapy中提取数据?7. Scrapy中的Item是什么?8. Scrapy中的P…

Leetcode12-整数转罗马数字

题目链接&#xff1a;12. 整数转罗马数字 - 力扣&#xff08;LeetCode&#xff09; 看题目限制输入1 < num < 3999&#xff0c;就直接用暴力法写了&#xff0c;还比较简单 代码&#xff1a; char* intToRoman(int num) {char *res (char*)malloc(100);int index 0;i…

WebMvcConfigurer 的 addResourceLocations

在 Spring Boot 的 addResourceLocations 方法中&#xff0c;file: 是一个 URL 前缀&#xff0c;用于指示资源的位置是本地文件系统路径。以下是详细解释&#xff1a; 一、file: 的作用 file: 是 Java 中用于表示本地文件系统的 URL 前缀。它告诉 Spring Boot&#xff0c;资源…

Spring Boot响应压缩配置与优化

一、核心工作机制 1.1 自动协商触发条件 Spring Boot的响应压缩功能基于智能协商机制&#xff0c;需同时满足以下条件方可触发&#xff1a; 客户端支持&#xff1a;请求头包含Accept-Encoding: gzip/deflate数据量阈值&#xff1a;响应体大小超过预设值&#xff08;默认2KB&…

JavaScript 改变 HTML 样式

JavaScript 改变 HTML 样式 JavaScript 改变 HTML 样式的核心是通过操作 DOM 元素的 CSS 属性或 类名 实现动态视觉效果。以下是具体方法与场景解析: 一、直接修改元素的 style 属性 通过 DOM 元素的 style 属性直接设置内联样式,优先级最高: // 修改单个样式 document.…

【vue】vue + vant实现上传图片添加水印

目录 方法1&#xff1a;使用HTML2canvas 说明&#xff1a; 优点 缺点 依赖安装 方法2&#xff1a;使用canvas结合vant中组件 增加水印方法 在vue组件中使用 要点 方法1&#xff1a;使用HTML2canvas 使用html2canvas来处理水印的生成&#xff0c;需要就给水印元素转换为…