前言

FFmpeg一个强大的开源多媒体框架,被广泛应用于视频编辑、视频转码、流媒体处理、视频直播等领域。

FFmpeg 包含了一系列的库和工具用于处理操作视频文件。这些库包括音视频编解码器格式转换器滤镜封装器等,可以处理几乎所有常见的音视频格式.

ffmpeg 相关命令行语法如下

ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url} ... 

一、视频

1.1 修改格式转码

# 将mp4格式转化为avi格式
ffmpeg -i input.mp4 output.avi

# 转码不清晰,指定比特
ffmpeg -i input.mp4 -b:v 20000k output.mp4

1.2 截取片段

# 从时间2分钟往后截取30秒
ffmpeg -ss 00:02:00 -t 30 -i input.mp4 -c:v copy -c:a copy  output1.mp4

# 从时间2分钟往后截取到2分30秒
ffmpeg -ss 00:02:00 -to 00:02:30 -i input.mp4 -c:v copy -c:a copy  output2.mp4

上述命令实际测试发现多 1s,可通过减一秒实现

1.3 合并多个视频

# 第一种,先转化为ts,再合并
ffmpeg -i input1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts input1.ts
ffmpeg -i input2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts input2.ts
ffmpeg -i "concat:input1.ts|input2.ts" -c copy -bsf:a aac_adtstoasc output.mp4

# 第二种, 建一个文件file.txt内容如下包含所要合并视频文件名字,注意,每行要以file起始
# file input1.mp4
# file input2.mp4
ffmpeg -f concat -i file.txt -c copy output.mp4

# 上述两种是相同码率分辨率的视频
# 第三种分辨率如果不同,可用-filter_complex实现
# 下面就是将两个输入文件视频流分辨率都转为1024x576,然后合并
ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex "[0:v]scale=1024:576:force_original_aspect_ratio=1[v0]; [1:v]scale=1024:576:force_original_aspect_ratio=1[v1]; [v0][0:a][v1][1:a]concat=n=2:v=1:a=1[v][a]" -map [v] -map [a] output.mp4

# 可去掉音频
ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex "[0:v][1:v]concat=n=2:v=1:a=0[outv]" -map "[outv]" -strict -2 output.mp4
# [0:v] 和 [1:v] 是视频流输入标签表示连接第一个第二个视频文件
# concat=n=2:v=1:a=0[outv] 部分定义连接方式:n 表示输入文件数,v=1表示1个输出视频流,a=0表示0个输出音频流,[outv] 是输出标签
# -map "[outv]" 用于输出视频流映射输出文件
# -strict -2 用于确保兼容性。

1.4 裁剪区域

# 截图将第20s截取为1张352x240的jpg
ffmpeg -ss 20 -i input1.mp4 -y -f image2 -t 0.001  -s 352x240 output.jpg

# 截取第一帧
ffmpeg -i input1.mp4 -y -f image2 -frames 1 cover_1f.jpg

# 裁剪部分区域视频
ffmpeg -i input1.mp4 -filter:v "crop=w=500:h=500:x=12:y=34" output.mp4

# 抖动裁剪
ffmpeg -i input1.mp4 -filter:v "crop=in_w/2:in_h/2:(in_w-out_w)/2+((in_w-out_w)/2)*sin(n/10):(in_h-out_h)/2 +((in_h-out_h)/2)*sin(n/7)" output.mp4

1.5 修改分辨率

# 转化视频分辨率为960x540
ffmpeg -i input1.mp4 -vf scale=960:540 output.mp4

# 转化为缩略图大小分辨率
ffmpeg -i input1.mp4 -vf scale=qcif output.mp4

# 长宽都缩小一半
ffmpeg -i input1.mp4 -vf scale=w=iw/2:h=ih/2 output.mp4

1.6 翻转视频

# 水平翻转
ffmpeg -i input1.mp4 -vf "hflip" output.mp4

# 垂直翻转
ffmpeg -i input1.mp4 -vf "vflip" output.mp4

1.7 调整速度

# 视频加速,2倍速,音频也实现加速
ffmpeg -i input1.mp4 -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" output.mp4

# 减速
ffmpeg -i input1.mp4 -filter_complex "[0:v]setpts=2*PTS[v];[0:a]atempo=0.5[a]" -map "[v]" -map "[a]" output.mp4

1.8 多个视频拼接

# 将视频横向拼接
ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex hstack output.mp4
# 竖向拼接
ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex vstack output.mp4

# 四宫格
ffmpeg -i input1.mp4 -i input2.mp4 -i input3.mp4 -i input4.mp4 -filter_complex "[0:v]scale=960:540 [s1]; [1:v]scale=960:540 [s2]; [2:v]scale=960:540 [s3]; [3:v]scale=960:540 [s4]; [s1][s2]hstack[top]; [s3][s4]hstack[bottom]; [top][bottom]vstack" output.mp4

1.9 添加字幕

# 内嵌字幕
ffmpeg -i input1.mp4 -i subtitle.ass -c copy -c:s mov_text output.mp4
ffmpeg -i input1.mp4 -vf "ass=subtitle.ass" output.mp4

1.10 修改文件封面

# 给视频文件添加封面
ffmpeg -i input1.mp4 -i qizai.jpg -map 1 -map 0 -c copy -disposition:0 attached_pic output.mp4

1.11 添加文字水印

# 文字水印,中文需要指定字体文件
ffmpeg -i input1.mp4 -vf "drawtext=text='中文水印':x=10:y=10:fontsize=24:fontcolor=white:fontfile=msyh.ttc" output.mp4

1.12 制作画中画

# 实现视频添加视频
ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex "[1:v]scale=320:240 [pip]; [0:v][pip]overlay=W-w-20:y=H-h-10" output.mp4

# 左上角添加图片
ffmpeg -i input1.mp4 -i qizai.jpg -filter_complex "overlay=20:10" output.mp4

# 右下角加图片
ffmpeg -i input1.mp4 -i qizai.jpg -filter_complex "overlay=W-w-20:H-h-10" output.mp4

1.13 音视频混合/分离

# 混合音频和视频
ffmpeg -i input.mp4 -i input.mp3 -map 0:v:0 -map 1:a:0 -c:v copy -c:a copy output.mp4

# 分离音视频
ffmpeg -i input1.mp4 -vn output.mp3
ffmpeg -i input1.mp4 -an output.mp4

1.14 视频直播推流

# rtmp推流地址
ffmpeg -re -stream_loop -1 -i input.mp4 -c copy -f flv "${rtmp}"

1.15 m3u8切片

# mp4转m3u8
ffmpeg -i input.mp4 -profile:v baseline -level 3.0 -start_number 0 -hls_time 10 -hls_list_size 0 -f hls output.m3u8
# m3u8转mp4
ffmpeg -i output.m3u8 -vcodec copy -acodec copy -absf aac_adtstoasc output.mp4

二、音频

2.1 视频提取音频

# 提取音频
ffmpeg -i input1.mp4 -vn -map 0:a:0 -c:a libmp3lame -q:a 2 output.mp3

2.2 修改格式转码

# 将wav转为mp3
ffmpeg -i input.wav input.mp3

2.3 裁剪音频

# 和视频类似,裁剪
ffmpeg -ss 00:00:10 -i input.mp3 -t 10 output.mp3

2.4 合并音频

# 合并音频
ffmpeg -i "concat:input1.mp3|input2.mp3" -acodec copy output.mp3

2.5 调整音量

# 将音量变为2倍
ffmpeg -i input.mp3 -vn -af "volume=2.0" output.mp3

# 减少6分贝
ffmpeg -i input.mp3 -vn -af "volume=-6dB" output.mp3

2.6 调整速度

# 2倍速
ffmpeg -i input.mp3 -filter:a "atempo=2.0" -vn output.mp3

2.7 采样

# 修改音频采样
ffmpeg -i input.mp3 -ar 44100  output.mp3

2.8 音频降噪

# 过滤掉200hz及以下频率过滤掉3000hz及以上频率
ffmpeg -i 1.wav -af "highpass=f=200, lowpass=f=3000"  output.mp3
ffmpeg -i 1.wav -af "highpass=200,lowpass=3000,afftdn" output.mp3

参考

  1. http://ffmpeg.org/ffmpeg.html
  2. https://ffmpeg.org/ffmpeg-filters.html

原文地址:https://blog.csdn.net/qq_23091073/article/details/134756672

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_30238.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注