ffmpeg音频视频合并(ffmpeg 音视频合并)

FFMPEG 视频分割和合并一、分割ffmpeg -ss 00:00:00 -t 00:00:30

FFMPEG 视频分割和合并

一、分段

ffmpeg-ss 00:00:00-t 00:00:30-I test.mp4-vcodec副本-acodec副本output.mp4

-ss指定何时开始-t指定截取多长时间-i指定输入文件。该命令用于从00秒到00 30=30秒剪辑视频,总共30秒。这个命令执行得很快,因为它只是原始数据的副本,中间没有编码和解码的过程。执行该命令后,可以得到output.mp4的输出文件。可以用视频播放软件播放这个视频。有些视频剪辑后可能会有同样的效果,比如预期中的,从00秒开始,到30秒结束,一共30秒。但是剪辑一些视频后,你会发现开始和结束都不是很准确,可能是00秒开始,33秒结束。这是为什么呢?因为这些视频中的30秒钟并不是关键帧,ffmpeg会在你输入的时间附近找到最近的关键帧,然后做下一件事。如果你不知道什么是关键帧,没关系,也不影响你使用这个命令。

如果你的项目中要求非常严格,一定要在确定的时间到达。那你就要用另一种方式了。

以上原因是选定的时间不是关键帧。如果我们先把输入的视频转换成一个所有帧都是关键帧的视频,其实就是把所有帧的编码方式都改成帧内编码(你不懂帧内编码也没关系,直接忽略然后往下看),这个问题就解决了。Ffmpeg也可以帮助我们实现这一点。

ffmpeg -i输入-sameq-帧内输出

-i输入,后跟一个空格,后跟输入的视频文件;

输入文件;

-sameq表示保持相同的视频质量;

-帧内、帧内编码;

输出文件名。

比如:

ffmpeg-I ./my video . mpg-sameq-intra。/temp.mpg

该命令的结果文件是。/temp.mpg .这个文件的视频和。/MyVideo.mpg,但是你会发现这个文件会比。/myvideo.mpg .原因是转换前常用的帧间编码变成了转换后的帧内编码。我们这里说一般,是因为有些视频文件本身就采用了帧内编码。经过这样的处理,我们就可以准确地剪切视频了。

注意,的上述命令在新版本中已被放弃。请参考以下命令。

ffmpeg-1 output.mp4-严格-2-q scale 0-keyoutput.mp4内部

使用ffmpeg进行flv分段

ffmpeg-y-I d :/XXX . MP4-vcodec copy-an-f segment-segment _ time 120-BSF :v h264 _ MP4 toannexb-segment _ list d :/segment/out . CSV d :/segment/% d . flv

使用FFmpeg命令对hls进行切片。

ffmpeg-I video2.mp4-force _ key _ frames ‘ express : GTE(t,n _ forced * 1)’-strict-2-c : a AAC-c :v libx 264-HLS _ time 1-f HLS out . m3u 8

其中,参数-force _ key _ frames ‘ expr : GTE(t,n _ forced * 1)’表示每1秒强制一个关键帧。

参数-strict -2是使用aac音频编码。

执行上述命令后,我们可以在生成的m3u8文件中看到,生成的ts文件的时长变成了1秒,如下图所示:

FFMPEG  视频分割和合并

ffmpeg-y-ss start-t duration-accurate _ seek-I文件名编解码器copy -avoid_negative_ts 1

二。合并

//从开始截取30s

ffmpeg-ss 00:00:00-t 00:00:30-I keyoutput.mp4-vcodec副本-acodec副本split.mp4

//从30s截取30s

ffmpeg-ss 00:00:30-t 00:00:30-I keyoutput.mp4-vcodec副本-acodec副本split1.mp4

//合并视频。

复制concat.mp4

方法1: FFmpeg concat协议

对于MPEG视频,您可以直接连接到:

ffmpeg-I ‘ concat : input 1 . mpg | input 2 . mpg | input 3 . mpg ‘-c copy output . mpg

对于非MPEG格式的容器,但是MPEG编码器(H.264,DivX,XviD ID,MPEG4,MPEG2,AAC,MP2,MP3等。),可以把它们打包成TS格式的容器,然后合并。在新浪视频中,很多视频使用H.264编码器,可以采用这种方式。

ffmpeg -i输入1 . flv-c copy-BSF :v h264 _ MP4 toannexb-f mpeg ts输入1.ts

ffmpeg -i输入2 . flv-c copy-BSF :v h264 _ MP4 toannexb-f mpeg ts输入2.ts

ffmpeg -i输入3 . flv-c copy-BSF :v h264 _ MP4 toannexb-f mpeg ts输入3.ts

ffmpeg-I ‘ concat : input 1 . ts | input 2 . ts | input 3 . ts ‘-c copy-BSF : a AAC _ adtstoasc-mov flags快速启动output.mp4

保存QuickTime/MP4格式容器时,建议添加-movflags faststart。这样,您可以在阅读文件的同时与他人共享。

方法2: FFmpeg连接分隔符

这种方法成功率高,是最好的,但是需要1.1以上的FFMPEG版本。首先创建一个文本文件filelist.txt:

文件’ input1.mkv ‘

文件’ input2.mkv ‘

文件’ input3.mkv ‘

然后:

ffmpeg -f concat -i文件列表. txt -c复制输出. mkv

注意:

1.使用FFmpeg concat分隔符时,如果文件名中有奇怪的字符,应该在filelist.txt中进行转义

2.在测试过程中发现,文件的后缀(如果视频格式异常,可能会导致失败,非视频格式可以选择mp4)可能会影响文件格式。所以你需要注意使用正确的后缀。

3.filelist.txt中的文件’ input1.mkv ‘在windows下必须有分号才能合并成功,但在Linux下可以省略分号。最好带分号。

4.如果背景合并,ffmpeg后台操作无法判断合并何时完成。通过生成日志文件,您可以找到相关的日志信息。

4.1在后台运行nohup ffmpeg-f concat-I filelist . txt-c copy output . mkv 1 XXX . log 21

4.2从xxx.log日志文件中查找相关信息(搜索文件名和副标题)。

5.同步运行,不打印日志。使用以下参数,如-loglevel quiet或-v quiet。

6.ffmpeg视频剪切时间不正确。

在windows下使用以下命令ffmpeg剪切视频时,发现剪切时间会比设定时间长。

0.mp4-c副本2.mp4

上面的命令是把视频从10s切到30s,但实际时长大概是32s。

原因:-c copy就是没有重新编码,直接裁剪视频,这样会出现一个问题:如果不重编码的分割视频,就需要对准视频的关键帧分割,比如视频的关键帧在8s处,而你是从10s开始分割,分割就会调整在8s处,这样剪切出来的视频就会比想要的长了

解决方法:目前我的解决方法就是重新编码视频,去掉-c copy就行了,不过重新编码有点耗时间。

三。常见命令如下

//从视频中删除音频

input.mp4-vcodec副本-output.mp4

//-an3360去掉音频;-vcodec:视频选项,通常后跟copy以表示复制。

//从视频中提取音频

ffmpeg-I input.mp4-acodec复制-vn输出. mp3

//-vn:删除视频;-acodec:音频选项,通常后跟copy表示复制。

//音频和视频合成

ffmpeg-yI input.mp4I input . MP3vcodec copyacodec copy output.mp4

//-y覆盖输出文件

//切视频

ffmpeg-ss 0:1:30-t 0:0:20-I input.mp4-vcodec副本-acodec副本output.mp4

//-ss开始时间;-t持续时间

//视频截图

ffmpegI test.mp4f image2-t 0.001-s 320 x240 image-=。使用jpeg文件交换格式存储的编码图像文件扩展名

//-s设置分辨率;-f .强制采用fmt格式;

//视频被分解成图片

ffmpegI test.mp4R1f image2 image-=。使用jpeg文件交换格式存储的编码图像文件扩展名

//-r指定屏幕捕获频率

//将图片组合成视频

ffmpeg -f图像2 -i图像% d . jpg output.mp4

//视频拼接

output.mp4拷贝

//把视频变成gif

ffmpeg-I input.mp4-ss 0:0:30-t 10-s 320 x240-pix _ fmt RGB 24 output . gif

//-pix_fmt指定编码

//将视频的前30帧转换成gif

ffmpeg-I input.mp4-v frames 30-f gif输出. gif

//旋转视频

ffmpeg-I input.mp4-VF旋转=/2 output.mp4

//缩放视频

ffmpeg-I input.mp4-VF scale=iw/2:-1 output.mp4

//iw是输入的宽度,iw/2是一半;-1以保持纵横比

//视频变速

ffmpeg-I input.mp4滤波器:v设定值=0.5 * PTS output.mp4

//音频变速

ffmpeg -i输入. mp3 -filter:a atempo=2.0输出. mp3

//音频和视频速度同时变化,但是音频和视频是互逆的。

ffmpeg-I input.mp4滤波器_复合体'[0:v]setpts=0.5 * PTS[v];[0: a]a tempo=2.0[a]’-map ‘[v]’-map ‘[a]’ output.mp4

//给视频添加水印

ffmpeg-I input.mp4-I logo.jpg-filter _ complex[0:v][1:v]overlay=main _ w-overlay _ w-10: main _ h-overlay _ h-10[out]-map[out]-map 0: a-codec : a copy output.mp4

//main_w-overlay_w-10视频宽度-水印宽度-水印边距;

//截取视频部分

ffmpeg-I in.mp4滤波器:v ‘ crop=out _ w : out _ h : x :y ‘ out.mp4

//截取部分视频,从[80,60]的位置开始,截取宽度为200,高度为100的视频。

ffmpeg-I in.mp4滤波器:v ‘ crop=80:60:200:100 ‘-c : a复制out.mp4

//剪辑右下角的四分之一

ffmpeg-I in.mp4滤波器:v ‘ crop=in _ w/2: in _ h/2: in _ w/2: in _ h/2 ‘-c : a复制out.mp4

//截断底部40个像素的高度

ffmpeg-I in.mp4滤波器:v ‘ crop=in _ w : in _ h-40 ‘-c : a复制out.mp4

视频交换

视频转JPEG

ffmpeg-itest . flv-r 1-fimage 2 image-=。联合图象专家组

将视频转换为gif

ffmpeg-iout . MP4-ss 00:00:00-t 10 out . gif

图片到视频

ffmpeg-fimage 2-ii image-=. jpegimages . MP4

直播关联

推流

ffmpeg-re-iout . MP4-c copy-f flv rtmp ://server/live/stream name

拉式保存

ffmpeg-I rtmp ://server/live/stream name-c copy dump . flv

转六

ffmpeg-I rtmp ://服务器/直播/原始流-c:a复制-c:v复制-f flv rtmp ://服务器/直播/h264流

实时推送流

ffmpeg-frame rate 15-f av foundation-I ‘ 1 ‘-s 1280 x720-c :v libx 264-f flv rtmp ://localhost :1935/live/room

ffplay

播放YUV数据

ffplay-pix _ fmt NV 12-s 192 x144 1 . YUV

在YUV中玩Y平面

ffplay-pix _ fmt nv21-s 640 x480-vfextractplanes=’ y ‘ 1 . YUV

参数描述:

-vcodec xvid使用xvid压缩。

-s 320×240指定分辨率

-r fps默认将帧速率设置为25。

-b比特率指定压缩的位数。

-acodec aac设置声音编码。

-ac值设置声道数,1为单声道,2为立体声。

-ar采样率设置声音采样率,PSP只识别24000。

-ab比特率设置声音比特率

-vol percentage设置音量。

-y(覆盖输出文件

-t duration设置录制时间。hh:mm:ss中的记录时间。xxx]]格式也支持。

-ss位置搜索指定时间[-]格式为[-]hh:mm:ss[。也支持xxx]]。

-title string设置标题。

-author string设置作者

-版权字符串设置版权。

-总部激活高质量设置。

-纵横比将纵横比设置为4:3 1633609或1.33777。

-croptop size设置顶部裁剪带大小的像素单位。

-底部裁剪尺寸-裁剪尺寸-裁剪尺寸

-padtop size设置顶部填充的大小像素单位。

-填充底部尺寸-填充左侧尺寸-填充右侧尺寸-填充颜色颜色设置填充条的颜色(十六进制,六个十六进制数字,红色:绿色3360蓝色,例如00000代表黑色)

-bt tolerance设置视频比特率容差kbit/s

-maxrate bitrate设置最大视频速率容差。

-minrate bitreate设置最小视频速率容差。

-bufsize size设置速率控制缓冲区的大小。

-vcodec编解码器执行编解码器编码和解码方法。If copy表示必须复制原始编解码器数据。

-sameq使用与源相同的视频质量(VBR)

-通道n选择加工通道的数量(1或2)。两遍编码非常有用。第一遍生成统计信息,第二遍生成准确的请求码率。

-passlogfile file两次选择的记录文件名是file。

-mapfile3360stream设置输入流映射

-debug打印特定的调试信息。

四、ffmpeg 后台运行,输出重定向,记录log和把文件输出到终端

1.在后台运行nohup

nohup ffmpeg-report-fflags nobuffer-probesize 50-analyzed duration 100-I rtmp ://127 . 0 . 0 . 1/live/test-f HLS-c copy-HLS _ flags delete _ segments-HLS _ time 1-HLS _ list _ size 3-HLS _ segment _ filename output-d.ts表521.m3u8 1/dev/null 21

nohup的介绍参考了这篇文章,https://mp.weixin.qq.com/s/nyT-FPdIUdJUiUCYVGEnTg.

1代表标准输出。

2代表标准误差。

1/dev/null将标准输出导入到空设备,也就是说,它消失了。如果你想重定向到一个文件,你可以使用11.txt

21将标准误差导入到与标准输出相同的位置。

-report将ffmpeg命令行和终端的输出(标准和错误)记录到一个名为program-yyyymmdd-hhmmss.log的文件中,日志文件将在ffmpeg所在的目录下生成。您可以设置日志级别和长文件名,这有助于查找需要长时间运行的错误。

2.输出到终端

ffmpeg-I rtmp ://live . hkstv . hk . LX DNS . com/live/hks-an-c :v copy-BSF :v h264 _ MP4 toannexb-f h264-y-666 2777

66省略了1,原来是1666。

66文件中的Timeout 0,ret=1是我在libavformat数据库中打印的日志。

FFMPEG  视频分割和合并

FFMPEG  视频分割和合并说明库打印的日志属于标准输出,而ffmpeg.c打印的日志属于标准错误。您可以用21指定标准误差,并将其打印到标准输出中。

-两个字符之间有一个空格。-表示将输出视频文件(不属于标准输出)输出到终端。如果你想通过管道将输出到终端的视频流保存到文件中,你可以使用下面的指令

ffmpeg-I rtmp ://live . hkstv . hk . LX DNS . com/live/hks-an-c copy-BSF :v h264 _ MP4 toannexb-f h264-| cat-output . h264

剪辑教程

视频剪辑软件加字幕(哪个剪辑软件能加字幕)

2022-6-4 23:13:00

剪辑教程

视频剪辑太难?教一个初学者如何快速制作自己的视频。

2022-6-4 23:15:00

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索