目录
1. Ubuntu(wsl)安装 ffmpeg
2. ffmpeg查看指令
3. ffmpeg查看媒体文件信息
4. ffmpeg基础操作指令
5. ffmpeg视频抽帧
5.1 基于时间抽取帧
5.2 两种抽帧方式
5.3 视频流抽帧
5.4 视频批量抽帧
6. ffmpeg更改视频播放速度
7. ffmpeg视频格式转换
8. ffmpeg视频裁剪
9. ffmpeg图片转视频
10. ffmpeg更改视频分辨率
11. ffmpeg视频旋转
12. ffmpeg视频转码及压缩
13. ffmpeg合并多个视频
1. Ubuntu(wsl)安装 ffmpeg
更新源:sudo apt update
添加源:sudo add-apt-repository ppa:kirillshkrogalev/ffmpeg-next
安装ffmpeg:sudo apt-get install ffmpeg
查看版本:ffmpeg -version
2. ffmpeg查看指令
查看ffmpeg支持的编码器:ffmpeg configure -encoders
查看ffmpeg支持的解码器:ffmpeg configure -decoders
查看ffmpeg支持的通信协议:ffmpeg configure -protocols
查看ffmpeg所支持的音视频编码格式、文件封装格式与流媒体传输协议等:ffmpeg configure --help
查看ffmpeg的支持格式的列表:ffmpeg -formats
获取ffmpeg使用帮助:man ffmpeg
3. ffmpeg查看媒体文件信息
ffmpeg -i video_file.mp4 # 查看视频文件信息
ffmpeg -i audio_file.mp3 # 查看音频文件信息
# 使用 -hide_banner 隐藏掉与文件无关的信息(ffmpeg本身的信息)
ffmpeg -i video_file.mp4 -hide_banner
ffmpeg -i audio_file.mp3 -hide_banner
4. ffmpeg基础操作指令
- 查看视频总帧数
ffprobe -v error -count_frames -select_streams v:0 -show_entries stream=nb_frames -of default=nokey=1:noprint_wrappers=1 test.mp4
- 视频中抽取音频,直接加一个 -vn 参数就可以
ffmpeg -i video.mp4 -vn audio.mp3
- 使用 -an 来获得纯视频 , -an 标记会让所有的音频参数无效
ffmpeg -i video_input.mp4 -an -video_output.mp4
- jpg转换成png,其它格式转换同理
ffmpeg -i ./images/img%5d.jpg ./images_new/img%5d.png
-
设置视频的屏幕高宽比,使用 -aspect 标志设置一个视频文件的屏幕高宽比。通常使用高宽比:16:9,4:3,16:10,5:4,2:21:1,2:35:1,2:39:1
ffmpeg -i input.mp4 -aspect 16:9 output.mp4
5. ffmpeg视频抽帧
5.1 基于时间抽取帧
- 参数说明:-ss 设定起始抽帧时间,语法:hh:mm:ss;-t 表示抽帧持续时间,单位为秒;-vframes 指定抽取的帧数
ffmpeg -i test.mp4 -r 1 -ss 00:00:05 -f image2 img_%05d.jpeg
ffmpeg -i test.mp4 -r 1 -ss 00:00:05 -vframes 5 -f image2 img_%05d.jpeg
ffmpeg -i test.mp4 -r 1 -t 4 -f image2 img_%05d.jpeg
- input seeking。input seeking使用的是key frames,所以速度很快;参数说明:-frame:v 5,在video stream上截取5帧。
ffmpeg -ss 00:00:05 -i test.mp4 -frames:v 5 img_%05d.jpg
- output seeking。output seeking是逐帧decode,直到1分05秒,所以速度很慢
ffmpeg -i test.mp4 -ss 00:00:05 -frames:v 5 img_%05d.jpg
5.2 两种抽帧方式
- 方法一,该抽帧方式画质较好。参数说明:-i 输入文件,源文件;-f 指定保存图片使用的格式;image2 图像解析模式; img%05d.jpg 格式化输出图片;-vf:设置过滤器;fps=fps=1/5 表示5s抽一帧,fps=fps=5 表示1s抽5帧
ffmpeg -i /data/test.mp4 -f image2 -vf fps=fps=1/5 -qscale:v 2 /data/img%05d.jpg
- 方法二,该抽帧方式画质稍差。 参数说明:-r 指定抽取的帧率,即从视频中每秒钟抽取图片的数量;1代表每秒抽取一帧,5表示一秒抽5张,1/5表示5秒抽一张。
ffmpeg -i test.mp4 -r 1 -f image2 img%05d.jpeg
5.3 视频流抽帧
-
rtsp流抽帧。参数说明:-y :如果提示文件已经存在,自动执行y,对已存在文件进行覆盖;-f image2:以图片格式保存;-r 1:帧数,每秒截取一帧,-r 1/5 表示每5秒抽取一帧;img%03d.jpg 格式化命名,会生成img001.jpg,img002.jpg
ffmpeg -i "rtsp://dxcs:cs123456@200.36.43.131:554/Streaming/Channels/1001" -y -f image2 -r 1/1 img%03d.jpg
-
rtsp流抽帧,tcp协议推流需要加上: -rtsp_transport tcp
ffmpeg -rtsp_transport tcp -i "rtsp://dxcs:cs123456@200.36.43.131:554/Streaming/Channels/1001" -y -f image2 -r 1/5 img%03d.jpg
-
直接保存RTMP视频流到本地
ffmpeg -i rtmp://live.hkstv.hk.lxdns.com/live/hks -c copy ./test1.flv
-
直接保存RTSP视频流到本地。参数说明:-vcodec copy 表示不重新编码,在格式未改
ffmpeg -i rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov -vcodec copy -acodec copy ./rtsp1.flv
5.4 视频批量抽帧
-
视频文件目录
- videos
- 1.mp4
- 2.mp4
- ………
- videos_imgs
- 为空(脚本会以视频文件名自动创建文件夹,并保存抽帧图像)
- bash frame.bash
- videos
- 批量抽帧shell脚本 frame.bash
#!/usr/bin/env bash
videos_root=./videos
save_root=./videos_imgs/
for video in $videos_root/*;
do
echo $video
save_dir=$save_root$(basename $video)
if [ ! -d $save_dir ];then
mkdir $save_dir
fi
ffmpeg -i $video -f image2 -vf fps=fps=1/5 -qscale:v 2 $save_dir/img%05d.jpg
done
6. ffmpeg更改视频播放速度
-
双倍视频播放速度
ffmpeg -i test.mp4 -vf "setpts=0.5*PTS" result.mp4
-
四倍视频播放速度
ffmpeg -i test.mp4 -an -r 50 -filter:v "setpts=0.25*PTS" result.mp4
-
降低视频播放速度,使用一个大于 1 的倍数
ffmpeg -i test.mp4 -vf "setpts=4.0*PTS" output.mp4
7. ffmpeg视频格式转换
-
转换mp4文件到avi文件
ffmpeg -i test.mp4 output.avi
-
转换flv格式视频为mpeg格式
ffmpeg -i video.flv video.mpeg
-
同时指定多个输出后缀,输出多个文件
ffmpeg -i audio_input.wav audio_output_1.mp3 audio_output_2.ogg
-
维持源视频文件的质量,使用-qscale 0 参数
ffmpeg -i test.mp4 -qscale 0 output.flv
-
转换所给定视频input.mp4文件的开始 10 秒到视频 .avi 格式
ffmpeg -i input.mp4 -t 10 output.avi
8. ffmpeg视频裁剪
- 基于时间进行视频裁剪。参数说明:开始时间 (-ss HH:MM:SS), 持续秒数 (-t duration), 结束时间 (-to HH:MM:SS), 和开始秒数 (-s duration)
ffmpeg -i input_audio.mp3 -ss 00:01:14 output_audio.mp3
ffmpeg -i input_audio.wav -ss 00:00:30 -t 10 output_audio.wav
ffmpeg -i input_video.h264 -ss 00:01:30 -to 00:01:40 output_video.h264
ffmpeg -i input_audio.ogg -ss 5 output_audio.ogg
ffmpeg -i input.mp4 -ss 00:00:50 -codec copy -t 50 output.mp4
- 裁剪视频文件为多个部分。参数说明:-t 00:00:30 表示从视频的开始到视频的第 30 秒创建一部分视频;-ss 00:00:30 为视频的下一部分显示开始时间戳。表示第 2 部分将从第 30 秒开始,并将持续到原始视频文件的结尾
ffmpeg -i input.mp4 -t 00:00:30 -c copy part1.mp4 -ss 00:00:30 -codec copy part2.mp4
- 基于宽高进行裁剪。参数说明:input.mp4 – 源视频文件;-filter:v – 表示视频过滤器;crop – 表示裁剪过滤器(w – 源视频中裁剪的矩形的宽度,h – 矩形的高度;x – 源视频中裁剪的矩形的 x 坐标 ;y – 矩形的 y 坐标
ffmpeg -i input.mp4 -filter:v "crop=w:h:x:y" output.mp4
# 想要一个来自视频的位置 (200,150),且具有 640 像素宽度和 480 像素高度的视频;剪切视频将影响质量
ffmpeg -i input.mp4 -filter:v "crop=640:480:200:150" output.mp4
9. ffmpeg图片转视频
-
规则图片名称转视频。参数说明:-r 25 表示每秒播放25帧;-b 200k 指定码率为200k;将`img00001.jpg’, `img00002.jpg'这种顺序排列的图片文件转制作为视频
ffmpeg -f image2 -i ./images/img%05d.jpg ./result.mp4
ffmpeg -f image2 -i './images/img%05d.jpg' -vcodec libx264 -r 25 -b 200k result.mp4
-
不规则图片名称转视频。参数说明:-framerate 10:视频帧率;-pattern_type glob:Glob pattern 模糊匹配;-f image2pipe:图像管道,模糊匹配得到图片名称
ffmpeg -framerate 10 -pattern_type glob -i './images/*.jpg' out.mp4
cat ./images/*.jpg | ffmpeg -f image2pipe -i - output.mp4
10. ffmpeg更改视频分辨率
-
设置一个视频文件为指定的分辨率
# 使用 -c:a 来保证音频编码是正确的
ffmpeg -i input.mp4 -filter:v scale=1280:720 -c:a copy output.mp4
# 参数说明:-s 表示设置目标视频文件的分辨率,将设置所给定视频文件的分辨率到 1280×720
ffmpeg -i test.mp4 -s 1280:720 -c:a copy output.mp4
11. ffmpeg视频旋转
-
将视频顺时针旋转90°
ffmpeg -i test.mp4 -c copy -metadata:s:v:0 rotate=90 result.mp4
ffmpeg -i input.avi -vf "rotate=90*PI/180"
-
上下颠倒视频(翻转了180°)
ffmpeg -i input.mp4 -vf "rotate=PI"
12. ffmpeg视频转码及压缩
-
MPEG4编码转成H264编码
ffmpeg -i data.mp4 -strict -2 -vcodec h264 output.mp4
-
H264编码转成MPEG4编码
ffmpeg -i data.mp4 -strict -2 -vcodec mpeg4 output.mp4
-
视频裁剪转码及压缩。-crf 参数 (恒定质量因子). 较小的crf 意味着较大的码率,同时使用 libx264 编码器也有助于减小文件体积文章来源:https://www.toymoban.com/news/detail-432931.html
ffmpeg -i data.mp4 -ss 00:03 -to 10:08 -c:v libx264 -crf 30 result.mp4
ffmpeg -i video_input.mp4 -c:v libx264 -crf 28 video_output.mp4
# 压缩视频文件,减小视频文件的大小,将损失视频质量。如果 24 太有侵略性,可以降低 -crf 值到或更低值
ffmpeg -i test.mp4 -vf scale=1280:-1 -c:v libx264 -preset veryslow -crf 24 output.mp4
13. ffmpeg合并多个视频
# 创建包含想接合文件的准确的路径的 join.txt。所有的文件都应该是相同的格式(相同的编码格式)。
# 所有文件的路径应该逐个列出,例如:
file /home/myvideos/part1.mp4
file /home/myvideos/part2.mp4
file /home/myvideos/part3.mp4
file /home/myvideos/part4.mp4
ffmpeg -f concat -i join.txt -c copy output.mp4
#若出现错误join.txt: Operation not permitted,添加-safe 0
ffmpeg -f concat -safe 0 -i join.txt -c copy output.mp4
文章来源地址https://www.toymoban.com/news/detail-432931.html
到了这里,关于FFmpeg视频处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!