使用FFmpeg合并多个ts视频文件转为mp4格式

news/2024/11/29 13:40:01/

前言

爬取完视频发现都是ts文件,而且都是几百KB的视频片段,.ts 全名叫:MPEG Transport Stream,它是一个万能的多媒体容器,可以装下音频、视频、字幕。有时我们需要将.ts文件转换为其他更加广泛被支持的格式,比如mp4格式,这样就可以在各种设备上播放和分享。

实现

ts转换有多种方式,可以下载第三方软件(请自行下载安装)进行转换,也可以使用FFmpeg软件进行转换。下面将介绍使用FFmpeg将.ts转换为MP4。

一、单个.ts文件转为MP4格式。

1、首先,下载并安装FFmpeg。这是一个功能强大的多媒体工具,它可以把 .ts 变成 MP4。你可以在FFmpeg官网找到它。windows下下载zip文件解压配置环境就可以使用。

2、打开命令行,在Windows上,你可以按下Win + R,输入"cmd",然后按Enter。在macOS上,找到终端应用。

3、前往目标文件夹:使用 "cd" 命令导航到 .ts 文件所在的文件夹。比如你的 .ts 文件在"D:\Videos"文件夹中,那就输入:

cd D:\Videos

3.1、输入ffmpeg命令,就可以将 .ts 转为 MP4

ffmpeg -i yourfilename.ts output.mp4

将 yourfilename.ts 替换为你的 .ts文件名称,output.mp4为你想要的输出的文件名。

回车后,等待FFmpeg完成,就可以得到一个全新的MP4文件。

二、将多个.ts文件合并为一个MP4文件。

1、合并少量.ts文件

直接写文件名,文件之间使用 | 隔开。如下所示:

ffmpeg -i "concat:1.ts|2.ts|3.ts|4.ts|.5.ts|" -c copy output.mp4ffmpeg -i "concat:1.ts|2.ts|3.ts|4.ts|.5.ts" -acodec copy -vcodec copy -absf aac_adtstoasc output.mp4

2、合并多个.ts文件

需要将多个.ts文件名路径保存再一个txt文档中,而且格式必须一致,不能有中文,比如:file.txt文件,格式如下:file '文件路径'

2.1、新建file.txt文档:

file 'D:\Videos\1.ts'
file 'D:\Videos\2.ts'
file 'D:\Videos\3.ts'
file 'D:\Videos\4.ts'
file 'D:\Videos\5.ts'

注意:这里必须是单引号,双引号会报错。

2.2、执行FFmpeg命令

# -safe 0: 防止Operation not permitted
ffmpeg.exe -f concat -safe 0 -i file.txt -c copy out.mp4

有时使用上面的命令会出现如下错误: alformed AAC bitstream detected: use the audio bitstream filter 'aac_adtstoasc' to fix it ('-bsf:a aac_adtstoasc' option with ffmpeg)

原因:
音频数据是AAC流,在解码时需要ADTS(Audio Data Transport Stream)头部,不管是容器封装还是流媒体,没有这个,一般都是不能播放的。

改为输入下面的命令即可解决:

ffmpeg -f concat -safe 0  -i file.txt -c:v copy -c:a copy -bsf:a aac_adtstoasc output.mp4

至此文件就合并完成啦。

下面讲解FFmpeg下载与安装过程

 1、首先,打开FFmpeg官网下载。

点开后,下载如下文件 

2、下载后解压,配置环境变量

下载解压后,再bin文件夹下能看到三个可执行程序:ffmpeg、ffplay、ffprobe,将bin文件夹配置到环境变量,配置好后即可使用。

验证是否成功:cmd窗口,输入:ffmpeg -version。如下图所示即表示安装成功。

3、简单使用

3.1、使用ffmpeg获取视频的一些信息:

ffprobe -show_format D:\恼人的秋风.mp4

3.2、播放音频文件命令:

ffplay D:\恼人的秋风.mp4

这时候就会弹出来一个窗口,一边播放MP3文件,一边将播放音频的图画到该窗口上。针对该窗口的操作如下:

点击该窗口的任意一个位置,ffplay会按照点击的位置计算出时间的进度,然后seek到计算出来的时间点继续播放。
按下键盘的左键默认快退10s,右键默认快进10s,上键默认快进1min,下键默认快退1min。
按ESC就退出播放进程,按W会绘制音频的波形图。

4、介绍FFmpeg 组成

构成FFmpeg主要有三个部分

4.1、第一部分是三个作用不同的工具软件,分别是:
ffmpeg.exe、ffplay.exe、 ffprobe.exe。

ffmpeg.exe:音视频转码、转换器
ffplay.exe:简单的音视频播放器
ffprobe.exe:简单的多媒体码流分析器
4.2、第二部分是可以供开发者使用的 SDK,为各个不同平台编译完成的库。

如果说上面的四个工具软件都是完整成品形式的玩具,那么这些库就相当于乐高积木一样,我们可以根据自己的需求使用这些库开发自己的应用程序。这些库有:

libavcodec:包含音视频编码器和解码器
libavutil:包含多媒体应用常用的简化编程的工具,如随机数生成器、数据结构、数学函数等功能
libavformat:包含多种多媒体容器格式的封装、解封装工具
libavfilter:包含多媒体处理常用的滤镜功能
libavdevice:用于音视频数据采集和渲染等功能的设备相关
libswscale:用于图像缩放和色彩空间和像素格式转换功能
libswresample:用于音频重采样和格式转换等功能

4.3、第三部分是整个工程的源代码,无论是编译出来的可执行程序还是SDK,都是由这些源代码编译出来的。

FFmpeg 的源代码由C语言实现,主要在 Linux 平台上进行开发。FFmpeg 不是一个孤立的工程,它还存在多个依赖的第三方工程来增强它自身的功能。在当前这一系列的博文/视频中,我们暂时不会涉及太多源代码相关的内容,主要以 FFmpeg 的工具和SDK的调用为主。到下一系列我们将专门研究如何编译源代码并根据源代码来进行二次开发。

5、关于ffmpeg的命令行参数,查看ffmpeg官方文档


http://www.ppmy.cn/news/1229343.html

相关文章

「项目阅读系列」go-gin-example star 6.5k!(1)

文章目录 准备工作适宜人群项目信息 项目结构代码阅读主要模块代码主函数模块router 路由模块auth 授权模块数据库 修改文章请求分析其他依赖 总结 准备工作 适宜人群 初学 go 语法,希望了解 go 项目的构建过程和方式。 项目信息 go-gin-example 项目是使用 gin…

JAVA必应回答。

怎么知道IO流是否及时关闭? IO流是Java中用于处理输入和输出的一种抽象概念,它可以是文件、网络、内存等不同的数据源或目的地。IO流在使用完毕后,需要及时关闭,以释放系统资源,避免造成内存泄漏或文件占用等问题。12…

如理解WPF绑定中的UpdateSourceTrigger

在WPF中,UpdateSourceTrigger是一个枚举,用于确定绑定源(比如视图模型中的属性)的更新时机。这对于数据绑定特别重要,因为它控制着用户界面上的更改何时反映到绑定的数据源属性上。下面是UpdateSourceTrigger的几个值&…

云原生专栏丨基于服务网格的企业级灰度发布技术

灰度发布(又名金丝雀发布)是指在黑与白之间,能够平滑过渡的一种发布方式。在其上可以进行A/B testing,即让一部分用户继续用产品特性A,一部分用户开始用产品特性B,如果用户对B没有什么反对意见,…

美国网站服务器SSL证书介绍

美国网站服务器的SSL证书也是一种数字证书,由权威数字证书机构CA验证网站的身份后所颁发,可实现浏览器与网站主机之间的数据传输加密。美国网站服务器搭建的网站在安装SSL证书后会在浏览器显示安全锁标志,数据传输协议则从HTTP传统协议升级为…

Fine tuning 和 Pretrained

Fine tuning 和 Pretrained Fine tuning 模型微调Pretrained models代码示例 Fine tuning和Pretrained都是深度学习中常用的概念。 Pretrained指的是在一个大型数据集上预先训练好的模型,例如ImageNet数据集上的ResNet、VGG等模型都可以视为Pretrained模型。这些模…

oracle重新安装集群软件后挂盘启动数据库

现有情况是恢复灾备环境的oracle集群备库,灾备端一直和主端做的数据同步,但是之前主端的三块OCR磁盘出现过故障,更换过磁盘,但是灾备端虽然一直做数据同步,但是只同步了DATA和FRA两个磁盘组。 如今需要使用灾备端来做测…

理解复制构造和赋值操作符之间的区别

类能报告对象的创建、销毁、赋值以及每个对象一个识别号&#xff08;代码来源于C沉思录&#xff09; #include <iostream>class Test{ public:Test();Test(const Test&);Test& operator(const Test&);~Test(); private:static int count;int id; };int Test…