ffmpeg 分割和合并

本文介绍了如何使用FFmpeg工具进行视频剪切、按帧数截取、合并多个视频、音频和不同格式的视频文件。内容涵盖了从指定时间段剪切视频、按时间间隔分段、合并MP4和YUV切片,以及改变封装格式等操作。同时,还涉及了音频文件的合并以及视频的左右上下合并。提供了详细的FFmpeg命令行示例,适用于多媒体处理和视频编辑场景。
摘要由CSDN通过智能技术生成

剪切yuv片段

剪切yuv  从201帧到700帧 闭区间  (常用!!!)
ffmpeg -threads 16 -s 1920x1080 -pix_fmt yuv420p -i input.yuv -vf select='between(n\,201\,700)' xxx.yuv

=========================================================================

# 将码流分段解出yuv,每段持续2秒,总共最多解500帧,指定输出分辨率为f_p444_b10
# ( 注意直接使用命令行时用一个""%"",在脚本中要转义用""%%"")"

剪切mp4,每10秒一个yuv切片
ffmpeg_4.2.1 -threads 16 -i xxx.mp4 -s 1920x1080 -pix_fmt yuv420p -f segment -segment_time 10 output_%04d.yuv
https://astraywu.github.io/2019/04/27/ffmpeg/ffmpeg%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4/

剪切yuv,每10秒一个yuv切片
ffmpeg_4.2.1 -threads 16 -s 1920x1080 -pix_fmt yuv420p -i xxx.yuv -pix_fmt yuv420p -f segment -segment_time 10 output_%04d.yuv

剪切yuv前30帧,输出yuv
ffmpeg -threads 16 -s 1920x1080 -pix_fmt yuv420p -i input.yuv -vf select="gt(n\, -1)" -vframes 30 out30.yuv
https://blog.csdn.net/SoaringLee_fighting/article/details/80503240  (付费博客)

剪切mp4片段

从0秒分割长度30秒的视频
ffmpeg -threads 16 -ss 00:00:00 -t 00:00:30 -i test.mp4 -c:v copy -c:a copy output.mp4

ffmpeg -threads 16 -ss 00:00:00 -t 00:00:30 -i test.mp4 -c:v libx264 -c:a copy -preset fast -crf 18 output.mp4

剪切HDR mp4视频:
ffmpeg -threads 16 -ss 00:00:00 -t 00:00:30 -i test.mp4 -c:v libx265 -x265-params "pass=1:open-gop=0:b-adapt=0:keyint=125:sao=1:amp=1:log2-max-poc-lsb=6:hrd=1:master-display=G(13250,34500)B(7500,3000)R(34000,16000)WP(15635,16450)L(10000000,20):max-cll='898,315':sar=1:videoformat=5:colorprim=9:transfer=16:colormatrix=9:chromaloc=2" -c:a copy -preset fast -crf 18 output.mp4
https://www.jianshu.com/p/cf1e61eb6fc8

剪切出来的片段,改变封装格式
ffmpeg -threads 16 -ss 00:10:00 -t 00:10:00 -i xxx.mov -pix_fmt yuv420p10le -c:v libx265 -preset fast -crf 18 xxx.mp4


# 按帧数截取视频(没有音频)
ffmpeg -threads 16 -i aaa.mp4 -an -vf "select=between(n\,101\,300),setpts=PTS-STARTPTS" -c:v libx264 -preset fast -crf 18 output.mp4
https://lingyunfx.com/2020/11/21/ffmpeg-used01/

合并多个mp4

方法一:FFmpeg concat 协议  (不太好用)
对于 MPEG 格式的视频,可以直接连接:
ffmpeg -i "concat:input1.mpg|input2.mpg|input3.mpg" -c copy output.mpg
对于非 MPEG 格式容器,但是是 MPEG 编码器(H.264、DivX、XviD、MPEG4、MPEG2、AAC、MP2、MP3 等),可以包装进 TS 格式的容器再合并。在新浪视频,有很多视频使用 H.264 编码器,可以采用这个方法
ffmpeg -i input1.flv -c copy -bsf:v h264_mp4toannexb -f mpegts input1.ts
ffmpeg -i input2.flv -c copy -bsf:v h264_mp4toannexb -f mpegts input2.ts
ffmpeg -i input3.flv -c copy -bsf:v h264_mp4toannexb -f mpegts input3.ts
ffmpeg -i "concat:input1.ts|input2.ts|input3.ts" -c copy -bsf:a aac_adtstoasc -movflags +faststart output.mp4

保存 QuickTime/MP4 格式容器的时候,建议加上  -movflags faststart。这样分享文件给别人的时候可以边下边看。

方法二:FFmpeg concat 分离器  (mp4格式不太成功)
这种方法成功率很高,也是最好的,但是需要 FFmpeg 1.1 以上版本。先创建一个文本文件filelist.txt:
file 'input1.mkv'
file 'input2.mkv'
file 'input3.mkv'
然后:
ffmpeg -threads 16 -i xxx.mp4 -c:v copy -c:a copy xxx.mkv
ffmpeg -threads 16 -f concat -i filelist.txt -vcodec copy -acodec copy output.mp4

提示
以上三种方法,在可能的情况下,最好使用第二种。第一种次之,第三种更次。第四种是后备方案,尽量避免。
规格不同的视频合并后可能会有无法预测的结果。
有些媒体需要先分离视频和音频,合并完成后再封装回去。
对于 Packed B-Frames 的视频,如果封装成 MKV 格式的时候提示 Can't write packet with unknown timestamp,尝试在 FFmpeg 命令的 ffmpeg 后面加上 -fflags +genpts
https://blog.csdn.net/doublefi123/article/details/47276739

MPEG格式
MPEG-1:
这种视频格式的文件扩展名包括.mpg、.mlv、.mpe、.mpeg及VCD光盘中的.dat文件等。
MPEG-2:
这种视频格式的文件扩展名包括.mpg、.mpe、.mpeg、.m2v及DVD光盘上的.vob文件等。
http://www.fengyesoft.com/skills/skill-mpg-004.html

合并两个音频 (???)
ffmpeg -i input1.mp3 -i input2.mp3 -filter_complex amerge -ac 2 -c:a libmp3lame -q:a 4 output.mp3
https://www.jianshu.com/p/2a824f13b2af

mp4左右上下合并

ffmpeg -i input1.mp4 -i input2.mp4 -lavfi hstack -c:v libx264 -c:a copy -preset fast -crf 12 output.mp4

参数hstack代表是横向合并,也就是左右合并,横向合并的形象类比为“川”;如果是竖向合并,也就是上下合并,用参数vstack
https://www.twblogs.net/a/5c852e8abd9eee35fc1407c2/zh-cn

https://xueli.li/2019/05/21/ffmpeg-commands/
https://codeday.me/bug/20190824/1706337.html
https://bbs.csdn.net/topics/391912129
https://blog.csdn.net/a386115360/article/details/89465633
https://trac.ffmpeg.org/wiki/Create%20a%20mosaic%20out%20of%20several%20input%20videos


ffmpeg -threads 16 -s 1920x1080 -pix_fmt yuv420p -i input1.yuv -s 1920x1080 -pix_fmt yuv420p -i input2.yuv -lavfi hstack output.yuv
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WX Chen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值