剪切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.youkuaiyun.com/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.youkuaiyun.com/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.youkuaiyun.com/topics/391912129
https://blog.youkuaiyun.com/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