ffmpeg 将拆分的数据合成一帧_FFmpeg 转码 压缩 剪切 合并 分割 水印 moov前置 分帧图片...

本文介绍了如何使用 FFmpeg 进行视频转码,包括不同编码格式之间的转换,以及设置帧率、分辨率和比特率。此外,还讲解了视频剪切的方法,通过 -ss 和 -t 选项实现精确或快速剪切。FFmpeg 的合并功能允许将多个视频文件拼接成一个,通过 concat demuxer 或转为中间格式实现。还讨论了生成分帧图片、调整播放速度以及分割、合成MP4文件的操作。最后,提到了如何在视频中添加水印和提前移动 moov 元数据。
摘要由CSDN通过智能技术生成

转码

最简单命令如下:

ffmpeg -i out.ogv -vcodec h264 out.mp4

ffmpeg -i out.ogv -vcodec mpeg4 out.mp4

ffmpeg -i out.ogv -vcodec libxvid out.mp4

ffmpeg -i out.mp4 -vcodec wmv1 out.wmv

ffmpeg -i out.mp4 -vcodec wmv2 out.wmv

-i 后面是输入文件名。-vcodec 后面是编码格式,h264 最佳

附加选项:-r 指定帧率,-s 指定分辨率,-b 指定比特率;于此同时可以对声道进行转码,-acodec 指定音频编码,-ab 指定音频比特率,-ac 指定声道数,例如

ffmpeg -i out.ogv -s 640x480 -b 500k -vcodec h264 -r 29.97 -acodec libfaac -ab 48k -ac 2 out.mp4

剪切

用 -ss 和 -t 选项, 从第 30 秒开始,向后截取 10 秒的视频,并保存:

ffmpeg -i input.wmv -ss 00:00:30.0 -c copy -t 00:00:10.0 output.wmv

ffmpeg -i input.wmv -ss 30 -c copy -t 10 output.wmv

达成相同效果,也可以用 -ss 和 -to 选项, 从第 30 秒截取到第 40 秒:

ffmpeg -i input.wmv -ss 30 -c copy -to 40 output.wmv

值得注意的是,ffmpeg 为了加速,会使用关键帧技术, 所以有时剪切出来的结果在起止时间上未必准确。 通常来说,把 -ss 选项放在 -i 之前,会使用关键帧技术; 把 -ss 选项放在 -i 之后,则不使用关键帧技术。 如果要使用关键帧技术又要保留时间戳,可以加上 -copyts 选项:

ffmpeg -ss 00:01:00 -i video.mp4 -to 00:02:00 -c copy -copyts cut.mp4

参考:ffmpeg.org

合并

把两个视频文件合并成一个。

简单地使用 concat demuxer,示例:

$ cat mylist.txt

file '/path/to/file1'

file '/path/to/file2'

file '/path/to/file3'

$ ffmpeg -f concat -i mylist.txt -c copy output

更多时候,由于输入文件的多样性,需要转成中间格式再合成:

ffmpeg -i input1.avi -qscale:v 1 intermediate1.mpg

ffmpeg -i input2.avi -qscale:v 1 intermediate2.mpg

cat intermediate1.mpg intermediate2.mpg > intermediate_all.mpg

ffmpeg -i intermediate_all.mpg -qscale:v 2 output.avi

生成分帧图片

ffmpeg -i ./1.mp4 -y -f image2 -ss 0 -t 1 -r 1 img%02d.jpg

-r 5/1 每秒5帧 -r 1/5 五秒一帧

调整播放速度

加速四倍:

ffmpeg -i TheOrigin.mp4 -vf "setpts=0.25*PTS" UpTheOrigin.mp4

四倍慢速:

ffmpeg -i TheOrigin.mp4 -vf "setpts=4*PTS" DownTheOrigin.mp4

多个mp4合成一个mp4文件

1.concat(不适用于mp4)

ffmpeg -i "concat:input1|input2" -codec copy output

2.先将mp4文件转化为ts,再ts合成mp4文件(本次使用)

a.转为ts

ffmpeg -i input.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts input.ts

转为分片ts

ffmpeg -i input.mp4 -map 0 -codec:v libx264 -codec:a aac -b:v 1000k -strict -2 -f ssegment -segment_list out.list out%03d.ts

b.ts合成mp4

ffmpeg -i "concat:input1.ts|input2.ts|input3.ts" -c copy -bsf:a aac_adtstoasc -movflags +faststart output.mp4

一个mp4切割成多个mp4文件

ffmpeg -i input.mp4 -vf "crop=out_w:out_h:x:y" -y output.mp4

out_w 是输出矩形的宽度

out_h 是输出矩形的高度

x:y specify the top left corner of the output rectangle

按时间分割

ffmpeg -i 90.mp4 -y -vcodec h264 -preset medium -strict -2 -b:v 1000k -f segment -segment_time 15 -segment_format_options movflags=+faststart out%01d.mp4

mp4文件添加水印

ffmpeg -i input.mp4 -i overlay.png -filter_complex "[1:v]scale=800x800 [ovrl], [0:v][ovrl]overlay=0:0 " -c:v libx26 -profile:v baseline -level 3.1 -s 368x368 -y output.mp4

overlay.png为水印图片

moov提前

ffmpeg -i input.mp4 -y -c copy -f mp4 -movflags faststart output.mp4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值