FFmpeg( Fast Forward Mpeg)是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。很多软件都是基于这个做的,在linux下面直接在命令行中就可以使用,平时处理视频图片很方便,网上很多博客里面的命令报错,所以整理一下一些常用的命令。
FFmpeg不是Ubuntu自带的工具,需要apt安装:
1 2 |
sudo apt install ffmpeg |
命令格式:
1 2 |
ffmpeg [全局选项] {[输入文件选项] -i 输入_url_地址} ... {[输出文件选项] 输出_url_地址} ... |
下面总结一些常用的ffmpeg音视频及图像处理命令
查看视频信息
1 2 3 4 5 |
# 显示该媒体文件信息,以及FFmpeg细节,例如版本、配置细节、版权标记、构建参数和库选项等等 ffmpeg -i input.mp4 # 只显示媒体文件信息 ffmpeg -i input.mp4 -hide_banner |
另外下面命令可以预览播放视频音频,附带在命令行中显示信息
1 2 3 4 5 |
# 预览视频 ffplay input.mp4 # 预览音频 ffplay input.mp3 |
从视频中提取图像
1 2 |
ffmpeg -i ./test/input.mp4 -r 10 -f image2 ./destination/%05d.jpg |
-r
– 设置帧速度。即,每秒提取帧到图像的数字。默认值是 25。
-f
– 表示输出格式,即,在我们的实例中是图像。
%05d.jpg
– 表明我们如何想命名提取的图像,图像可以其他的格式,比如.png。
将多张图片合成视频
带音频合成:
1 2 |
ffmpeg -threads2 -y -r 10 -i /image_path/image%04d.jpg -i audio.mp3 -absf aac_adtstoasc output.mp4 |
-threads 2
:以两个线程进行运行, 加快处理的速度。
-y
:对输出文件进行覆盖
-r 10
:fps设置为10帧/秒
-absf aac_adtstoasc
编码音频格式,使之能在一些设备上能播放
不带音频合成:
1 2 |
ffmpeg -loop 1 -f image2 -i /image_path/image%04d.jpg -vcodec libx264 -r 10 -t 10 output.mp4 |
-loop
:1循环读输入, 0读完就不读了
-vcode
:编码格式为libx264
从视频中截取一段视频
1 2 |
ffmpeg -i input.mp4 -ss 00:00:50 -codec copy -t 50 output.mp4 |
–ss
– 表示视频剪辑的开始时间。在我们的示例中,开始时间是第 50 秒。
-t
– 表示总的持续时间。
将视频切成几个片段
1 2 |
ffmpeg -i input.mp4 -t 00:00:30 -c copy part1.mp4 -ss 00:00:30 -codec copy part2.mp4 |
-t 00:00:30
表示从视频的开始到视频的第 30 秒创建一部分视频。
-ss 00:00:30
为视频的下一部分显示开始时间戳。这里表示第 2 部分将从第 30 秒开始,并将持续到原始视频文件的结尾。
拼合多个视频
先创建一个文件的描述文件join.txt
1 2 3 4 5 |
file /home/sk/myvideos/part1.mp4 file /home/sk/myvideos/part2.mp4 file /home/sk/myvideos/part3.mp4 file /home/sk/myvideos/part4.mp4 |
然后执行拼接命令:
1 2 3 |
# 执行下面命令将上面四个视频片段合成一个视频 ffmpeg -f concat -safe 0 -i join.txt -c copy output.mp4 |
上面这个命令也可以用来将图片拼接成视频,只不过将join.txt稍微修改
1 2 3 4 5 6 7 8 9 10 |
file /home/sk/myvideos/part1.jpg duration 5 file /home/sk/myvideos/part2.jpg duration 1 file /home/sk/myvideos/part3.jpg duration 5 file /home/sk/myvideos/part4.jpg duration 2 file /home/sk/myvideos/part4.jpg |
duration
表示这张图播放时长,最后一个图要重复写一遍,但不用加duration。
设置视频宽高比
1 2 |
ffmpeg -i input.mp4 -aspect 16:9 output.mp4 |
-aspect
设置一个视频文件的屏幕高宽比
裁剪视频区域
1 2 |
ffmpeg -i input.mp4 -filter:v "crop=w:h:x:y" output.mp4 |
input.mp4
:源视频文件
-filter:v
:表示视频过滤器
crop
:表示裁剪过滤器
w
:想在源视频中裁剪的矩形的宽度
h
:想在源视频中裁剪的矩形的高度
x
:想在源视频中裁剪的矩形的 x 坐标
y
:想在源视频中裁剪的矩形的 y 坐标
转换视频格式
1 2 3 4 5 6 7 |
# 这个命令不仅可以格式转换,对于用相机拍摄的视频还可以压缩视频文件大小 ffmpeg-i input.ogv -vcodec h264 output.mp4 # 简单方式 ffmpeg -i input.flv output.mpeg # 如果想维持原视频的质量,使用-qscale 0 参数 ffmpeg -i input.webm -qscale 0 output.mp4 |
更改视频分辨率
1 2 3 4 5 |
# 将视频改成640×360 ffmpeg -i input.mp4 -vf scale=640:360 output.mp4 -hide_banner # 将视频改成1280*720 ffmpeg -i input.mp4 -filter:v scale=1280:720 -c:a copy output.mp4 |
更改视频帧率
下面两种改变FPS的方式只是-r的位置不同,效果就不同。
改变FPS,视频质量不变,视频时长改变:
1 2 3 4 5 6 |
# 如果原始视频是40fps # 将视频帧率变成80fps ffmpeg -r 80 -i input.mp4 output.mp4 # 将视频帧率变成20fps ffmpeg -r 20 -i input.mp4 output.mp4 |
降低FPS,视频时长不变,视频质量变差:
1 2 3 4 |
# 如果原始视频是40fps # 将视频帧率变成20fps,并且时长不变 ffmpeg -i input -r 20 output |
更改视频播放速度
1 2 3 4 5 |
# 生成视频双倍速播放的视频 ffmpeg -i input.mp4 -vf "setpts=0.5*PTS" output.mp4 # 生成视频0.5倍速播放的视频 ffmpeg -i input.mp4 -vf "setpts=2.0*PTS" output.mp4 |
给视频添加字幕
1 2 |
fmpeg -i input.mp4 -i subtitle.srt -map 0 -map 1 -c copy -c:v libx264 -crf 23 -preset veryfast output.mp4 |
音频文件相关
压缩音频:
1 2 3 |
# 将音频压缩到128kbps ffmpeg -i input.mp3 -ab 128 output.mp3 |
常见音频比特率:96kbps、112kbps、128kbps、160kbps、192kbps、256kbps、320kbps;比特率越高音质越好。
添加海报图像到音频文件:
1 2 |
ffmpeg -loop 1 -i inputimage.jpg -i inputaudio.mp3 -c:v libx264 -c:a aac -strict experimental -b:a 192k -shortest output.mp4 |
移除视频中的音频:
1 2 |
ffmpeg -i input.mp4 -an output.mp4 |
-an
:表示没有音频录制
移除视频中的视频流(视频转音频):
1 2 3 4 |
ffmpeg -i input.mp4 -vn output.mp4 # 指定音频比特率320 ffmpeg -i input.mp4 -vn -ab 320 output.mp4 |
-vn
:表示没有视频录制
Reference:
最新评论
感谢博主,让我PyTorch入了门!
博主你好,今晚我们下馆子不?
博主,你的博客用的哪家的服务器。
您好,请问您对QNN-MO-PYNQ这个项目有研究吗?想请问如何去训练自己的数据集从而实现新的目标检测呢?
where is the source code ? bomb1 188 2 8 0 0 hello world 0 0 0 0 0 0 1 1 9?5
在安装qemu的过程中,一定在make install 前加入 sudo赋予权限。
所以作者你是训练的tiny-yolov3还是yolov3...
很有用