如何在ffmpeg中连接具有不同属性的视频?

2024-01-08

我正在尝试合并一些视频,但出现时间戳错误。

我试图使它们具有相同的尺寸、帧速率、采样率,并且在没有音轨时添加音轨。

ffmpeg -i input1.mp4 -y -i audio1.mp3 -c:v copy -c:a aac -shortest output1.mp4
ffmpeg -i input2.mp4 -y -i audio2.mp3 -c:v copy -c:a aac -shortest output2.mp4
ffmpeg -y -safe 0 -f concat -i list.txt -c copy output.mp4

错误信息:

Non-monotonous DTS in output stream 0:0; previous: 8052684, current: 4127401; changing to 8052685. This may result in incorrect timestamps in the output file.

由于我假设您的输入是任意的,因此我建议使用串联过滤器 https://ffmpeg.org/ffmpeg-filters.html#concat而不是连接解复用器 https://ffmpeg.org/ffmpeg-formats.html#concat因为无论如何您都需要执行过滤以使所有内容符合一组通用参数,并且您可以在一个命令中完成所有操作。

将所有视频设为 1280x720、1:1 SAR、30 fps、yuv420p

Using scale https://ffmpeg.org/ffmpeg-filters.html#scale(宽度x高度/分辨率),setsar https://ffmpeg.org/ffmpeg-filters.html#setdar_002c-setsar(纵横比),fps https://ffmpeg.org/ffmpeg-filters.html#fps(帧率),format https://ffmpeg.org/ffmpeg-filters.html#format(色度子采样),以及concat https://ffmpeg.org/ffmpeg-filters.html#concat(串联/连接)过滤器。

ffmpeg -i 1.mp4 -i 2.mp4 -i 3.mp4 -filter_complex \
"[0:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:-1:-1,setsar=1,fps=30,format=yuv420p[v0];
 [1:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:-1:-1,setsar=1,fps=30,format=yuv420p[v1];
 [2:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:-1:-1,setsar=1,fps=30,format=yuv420p[v2];
 [v0][0:a][v1][1:a][v2][2:a]concat=n=3:v=1:a=1[v][a]" \
-map "[v]" -map "[a]" -c:v libx264 -c:a aac -movflags +faststart output.mp4

与上面相同,但也将音频处理为具有 48000 采样率的立体声

添加了aformat https://ffmpeg.org/ffmpeg-filters.html#aformat(采样率和通道布局)过滤器。

ffmpeg -i 1.mp4 -i 2.mp4 -i 3.mp4 -filter_complex \
"[0:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:-1:-1,setsar=1,fps=30,format=yuv420p[v0];
 [1:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:-1:-1,setsar=1,fps=30,format=yuv420p[v1];
 [2:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:-1:-1,setsar=1,fps=30,format=yuv420p[v2];
 [0:a]aformat=sample_rates=48000:channel_layouts=stereo[a0];
 [1:a]aformat=sample_rates=48000:channel_layouts=stereo[a1];
 [2:a]aformat=sample_rates=48000:channel_layouts=stereo[a2];
 [v0][a0][v1][a1][v2][a2]concat=n=3:v=1:a=1[v][a]" \
-map "[v]" -map "[a]" -c:v libx264 -c:a aac -movflags +faststart output.mp4

有水印

ffmpeg -i 1.mp4 -i 2.mp4 -i 3.mp4 -i logo.png -filter_complex \
"[0:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:-1:-1,setsar=1,fps=30,format=yuv420p[v0];
 [1:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:-1:-1,setsar=1,fps=30,format=yuv420p[v1];
 [2:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:-1:-1,setsar=1,fps=30,format=yuv420p[v2];
 [0:a]aformat=sample_rates=48000:channel_layouts=stereo[a0];
 [1:a]aformat=sample_rates=48000:channel_layouts=stereo[a1];
 [2:a]aformat=sample_rates=48000:channel_layouts=stereo[a2];
 [v0][a0][v1][a1][v2][a2]concat=n=3:v=1:a=1[vid][a];[vid][3]overlay=W-w-5:H-h-5[v]" \
-map "[v]" -map "[a]" -c:v libx264 -c:a aac -movflags +faststart output.mp4

欲了解更多信息,请参阅覆盖过滤器文档 https://ffmpeg.org/ffmpeg-filters.html#overlay and 如何使用ffmpeg添加和定位水印? https://stackoverflow.com/a/10920872/

为没有音频的输入添加静音虚拟音频

The anullsrc https://ffmpeg.org/ffmpeg-filters.html#anullsrc如果您的输入之一不包含音频,则过滤器用于提供无声的虚拟音频。这可能是必需的,因为要连接的所有段必须具有相同数量和类型的流。换句话说,您无法将没有音频的视频连接到有音频的视频。因此可以添加静音音频,如下例所示:

ffmpeg -i 1.mp4 -i 2.mp4 -i 3.mp4 -t 0.1 -f lavfi -i anullsrc=channel_layout=stereo:sample_rate=48000 -filter_complex \
"[0:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:-1:-1,setsar=1,fps=30,format=yuv420p[v0];
 [1:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:-1:-1,setsar=1,fps=30,format=yuv420p[v1];
 [2:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720::-1:-1,setsar=1,fps=30,format=yuv420p[v2];
 [0:a]aformat=sample_rates=48000:channel_layouts=stereo[a0];
 [2:a]aformat=sample_rates=48000:channel_layouts=stereo[a2];
 [v0][a0][v1][3:a][v2][a2]concat=n=3:v=1:a=1[v][a]" \
-map "[v]" -map "[a]" -c:v libx264 -c:a aac -movflags +faststart output.mp4

Note: Leave -t 0.1原样:anullsrc 的持续时间只需比关联视频输入的持续时间短。连接过滤器将自动扩展无声音频以匹配相关视频输入的长度。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在ffmpeg中连接具有不同属性的视频? 的相关文章

  • 具有相同引用的字符串连接? [复制]

    这个问题在这里已经有答案了 这是我的代码 我现在对字符串池和 通过此输出进行堆存储 public class String1 public static void main String args TODO Auto generated m
  • Android 中的 FFMpeg jni?

    我已经构建了 Bambuser http bambuser com opensource 提供的 FFMPEG 可执行文件和库 所以我设法构建了 Android 可执行文件和库 如何在 Eclipse 项目中链接这些库并从 Java 调用
  • 在 Java 中处理视频(DVD、.avi .mkv)

    在寻找了一个像样的 Java 视频播放库之后 我发现了问题 周围的每个人都在尖叫不要使用 JMF 因为它已经过时 过时并且需要用户安装它 其他替代方案 例如 VLCJ 如果可以工作的话似乎不错 但仍然相对不稳定并且依赖大量本机代码 并且至于
  • id3 图像编辑后播放 mp3 时遇到问题

    由于硬件限制 我们生产的软件试图确保导入到其库中的任何音频文件 准备复制到硬件上 都是可接受的比特率 最近 我们开始使用 FFmpeg 将许多不同的音频类型转换为 mp3 以便在我们的硬件上导入和使用它们 虽然转换工作正常并且 mp3 文件
  • 如何将AVFrame转换为glTexImage2D使用的纹理?

    如您所知 AVFrame 有 2 个属性 pFrame gt data pFrame gt linesize 当我从视频 sdcard test mp4 android平台 读取帧后 并将其转换为RGB AVFrame副 img conve
  • 如何在 vc++ 中使用samplegrabber?样本采集器未定义

    在视觉社区 2015 我有一个 C 项目 在 cpp 文件顶部我有 include stdafx h include VideoCaptureFilterSample h include VideoCaptureFilterSampleDl
  • FFMPEG 帧到 DirectX 表面

    给定一个指向 FFMPEG 的 AVFrame 的指针avcodec decode video 函数如何将图像复制到 DirectX 表面 假设我有一个指向适当大小的 DX X8R8G8B8 表面的指针 Thanks John 您可以使用
  • 运行时高压缩的 AS3 视频编码(H.264?)

    我需要在运行时将 AS3 中的视频图像数据 比如说显示对象 压缩为高压缩的字节数组 帧速率只需在 5 左右 但 1024x768 视频需要达到 使用 JPG 或 PNG 编码器可提供更高的 KB s 有没有开源方法可以在运行时对 as3 中
  • 当我的应用程序最小化时,在 Android 中使用 Youtube API 播放音乐视频中的音频

    我正在开发一个使用 Youtube API 的应用程序 因为我主要集中于MUSIC VIDEOS 来自 Youtube 当我离开应用程序时 我需要在后台播放视频的音频 但每次我导航到另一个应用程序时 视频都会暂停 我该怎么做才能解决这个问题
  • Vaadin框架播放视频

    我可以使用 Vaadin Framewotk 播放视频吗 主要思想是从本地驱动器加载 flv 或 avi 格式的视频文件 并使用 vaadin 框架在网络上播放 谢谢 Sampler中有一个示例 http demo vaadin com s
  • 在浏览器上录制视频并上传到LAMP服务器

    我已经尝试了很多东西 red5 jquery 网络摄像头 html5 但这些解决方案都没有录制视频并准备好上传到服务器 无论如何 html5 flash 等等 更好的跨浏览器解决方案 最好的 上传视频 音频 并将结果上传到服务器 我猜是通过
  • 在一个屏幕上合并 2 个图像输出(HDMI、DVI、VGA 或其他)

    我正在寻找一些不常见的东西 一种设备 可将来自 2 个输出 HDMI DVI VGA 或任何其他类型的图像输出 的图像合并为屏幕上显示的最终图像 输出可以是相同类型 例如 2 个 HDMI 或不同类型 任何有效的都可以 如果不清楚 这里有一
  • 使用 ffmpeg 将 mp4 转换为 gif 时帧率较低

    我正在使用 ffmpeg 将高质量视频转换为 gif 大多数视频都是 60fps 及以上720p 但是当我使用下面的代码将视频转换为 gif 时 我得到的 gif 输出的 fps 非常低 usr bin env palette tmp pa
  • XHR加载视频

    在不详细了解我为什么使用 XHR 的情况下 谁能告诉我如何让以下内容发挥作用 我的目标是首先加载视频数据 然后将其放入视频标签的源中 http jsfiddle net u2vhG http jsfiddle net u2vhG
  • ffmpeg 将 m4s 转换为 mp4

    我正在研究 DASH 试图为最终用户优化 QoE 我有一个视频 并使用 ffmpeg 将其编码为不同的比特率 一切都很好 并且可以使用 dash 播放该视频 我想要的是将用户收到的片段合并为一个 m4 并将该 m4 转换为 mp4 我在 f
  • 如何使用 TFlearn 中的 ImageAugmentation 训练 CNN 中的图像和数据混合

    我想使用图像 像素信息 和数据的混合在 Tflearn Tensorflow 中训练卷积神经网络 由于我的图像数量较少 因此我需要使用图像增强来增加传递到网络的图像样本数量 但这意味着我只能传递图像数据作为输入数据 必须在稍后阶段 大概在全
  • 我可以使用文本叠加执行类似 imsave() 的操作吗?

    我在用imsave 依次制作许多 PNG 我将它们合并为 AVI 并且我想添加移动文本注释 我用ImageJ http imagej nih gov ij features html制作 AVI 或 GIF 我不需要轴 数字 边框或任何东西
  • 如何在列表视图中选择时启用视频序列自动播放?

    大家好 有人可以与我分享一下我如何编写我的 viewvideo java 类 以便它允许自动播放视频功能 自动排序在列表视图中播放所选视频的任务 从当前位置到最新录制的视频 按顺序直到最新的视频播放完毕 这类似于 YouTube 自动播放功
  • HTMLMediaElement 持续时间不一致

    我的视频播放器出现问题 视频时长从HTMLMediaElement duration https developer mozilla org en US docs Web API HTMLMediaElement duration不一致 我
  • 录制视频和音频并上传到服务器

    我想为网站添加视频录制功能 我一直在搜索并尝试所有可能的可用解决方案 但还没有任何工作正常 我已经尝试过以下解决方案 WebRTC 我知道使用 WebRTC 我们可以从网络摄像头和麦克风获取流 我发现了很多关于相同内容的文章 但没有一篇解释

随机推荐

  • 当所有表达式都缺失时,C# for 循环会做什么。例如 for(;;) {}

    我只能假设这是一个无限循环 我可以省略 for 循环中的三个表达式中的任何一个吗 省略时每个都有默认值吗 是的 这是一个无限循环 例子 for 又名 螃蟹 while true do while true
  • Pandas 自定义函数来查找是否是第一、第二等星期一、星期二等 - 欢迎所有建议

    所以我有以下代码 它读取 5 列 日期 ohlc 然后 它创建一个列 dow 来保存星期几 到目前为止 一切都很好 import numpy as np import pandas as pd df pd read csv content
  • 错误(10028):无法解析网络的多个常量驱动程序... VHDL 错误

    我正在尝试编写一个代码来检测 din 信号的上升沿 并在发生后将 doout 提高 5 个时钟周期 我在编译时不断收到不同的错误 但我不确定它们的含义 我认为我对 VHDL 中的一些概念缺乏基本的了解 但遗憾的是在网上查找并没有给我带来太大
  • 找到章节的最大深度

    每个人 在这种情况下 我想计算章节的最大深度 例如 一本没有章节的书的高度为 0 一本书只有章节没有章节 高度应该为1 以下是xml
  • 无法使用mysql中的数据库(未知数据库)

    我正在尝试开始使用以下 github 包 py gameday https github com wellsoliver py gameday 我安装了 mysqlbrew mysql并创建了 root 密码 gt mysqladmin u
  • 使用opencv,如何去除透明图像中的非对象?

    我是图像处理方面的新手 我正在尝试调整透明图像中绑定对象的矩形 框架的大小 但我不知道怎么做 请帮我 非常感谢 P s 它不会与作物重复 在裁剪中 您修复了一个元组 从 x y w h 裁剪 但在我的照片中 我不知道在哪里裁剪 我们需要首先
  • 跳过foreach淘汰赛js数组中的项目?

    我有一个关于淘汰赛 js 中的 foreach 和第一项的问题 我想跳过第一个并迭代下一个项目 主要问题是我想做这样的事情 div div div div div div 我不认为 knockoutJS 提供了跳过数组中特定元素的功能 但您
  • 在PYTHON中将列表打印到不带[括号]的txt文件

    我正在尝试获取姓名列表 按字母顺序排列并将它们打印到新列表中 这是我的代码 names newnames with open C names txt r as infile for row in infile readlines name
  • 为什么C中的const指针可以修改?

    今天我尝试使用const标识符 但我发现const变量仍然可以修改 这让我很困惑 以下是代码 在compare const void a const void b 函数中 我尝试修改该值a指向 include
  • TSQL 四舍五入到小数点后半位

    我想四舍五入到最接近的半个小数 地理坐标 以进行一些数据可视化 在 t sql 中 是否有一个内置函数可以四舍五入到小数点后一半 如果是这个术语 期望结果的示例 1 1 gt 1 0 1 4 gt 1 5 1 6 gt 1 5 1 9 gt
  • 第二次打开时进度条没有重置为“0”

    在 Android 应用程序中 我在单独的线程中运行任务 当线程运行时 它会更新主窗口中的进度条 让用户知道发生了什么 问题是 如果用户第二次启动线程 进度条将不会重置 它只会保持 100 状态而不执行任何操作 整个源码是可以在 githu
  • Hoxton.SR6 与 Spring Boot 2.3.0 导致奇怪的内容类型问题

    当我将 Spring Boot 2 3 0 RELEASE 应用程序从 Hoxton SR4 更新到 Hoxton SR6 唯一的更改 时 我开始面临来自各个端点的内容类型的奇怪问题 例如 对于 Hoxton SR4 任何未经授权的端点都会
  • 在两个视图之间传递数据

    我想在 watchOS 6 上创建一个安静的简单应用程序 但是在 Apple 更改了 Xcode 11 beta 5 中的 ObjectBindig 后 我的应用程序不再运行 我只是想在两个视图之间同步数据 所以我用新的 Published
  • 使用 Google Translate API 翻译时排除 HTML 标签

    目前我知道 span class e notranslate span 用于省略要在跨度之间翻译的文本 我正在寻找将带有 HTML 标签的内容发送到 Translate API 并让它返回而不翻译标签 无论如何 在翻译之前是否可以省略标签
  • Spring Social - Facebook 登录出现 404 错误

    我的应用程序中有 spring 3 1 和 spring security 登录 我正在尝试使用 Spring Social 添加 facebook 登录 它会转到 facebook 登录页面 但登录后会抛出 404 错误 我在网址中有这个
  • 如何禁用 DataTables/TableTools 按钮

    我正在使用 DataTable 1 10 和 TableTools 2 2 1 鉴于以下内容 我想禁用 启用编辑按钮 var myTable myTable DataTable tableTools aButtons sExtends te
  • “$container.imagesLoaded 不是函数”错误

    所以 我得到 container imagesLoaded is not a function error 这是位于标题中的代码 function root undefined function use strict var contain
  • 使用WELL512获取一定范围内的随机实数

    我正在使用中描述的 WELL512 伪随机数生成器函数这张纸 http www lomont org Math Papers 2008 Lomont PRNG 2008 pdf 该函数返回一个随机数unsigned long value 如
  • Rails 迁移:消除约束

    我在 Rails 应用程序中有一个表 在 schema rb 中 如下所示 create table users force gt true do t t string name null gt false t string address
  • 如何在ffmpeg中连接具有不同属性的视频?

    我正在尝试合并一些视频 但出现时间戳错误 我试图使它们具有相同的尺寸 帧速率 采样率 并且在没有音轨时添加音轨 ffmpeg i input1 mp4 y i audio1 mp3 c v copy c a aac shortest out