FFmpeg视频处理

这篇具有很好参考价值的文章主要介绍了FFmpeg视频处理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

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
  • 批量抽帧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 编码器也有助于减小文件体积

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模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 音视频 FFmpeg音视频处理流程

    推荐一个零声学院项目课,个人觉得老师讲得不错,分享给大家: 零声白金学习卡(含基础架构/高性能存储/golang云原生/音视频/Linux内核) https://xxetb.xet.tech/s/VsFMs

    2024年02月12日
    浏览(44)
  • QT ubuntu下开发视频播放 FFmpeg

    ubuntu 安装FFmpeg T113VideoDemo.pro mainwindow.h mainwindow.cpp

    2024年02月14日
    浏览(33)
  • Centos7安装编译ffmpeg到指定目录

    1、官网下载tar包 2、解压usr/local目录 3、编译准备 4、安装设置 5、编译安装 6、修改文件/etc/ld.so.conf 输入  ldconfig  使修改生效 7、查看ffmpeg版本 8、配置系统变量 打开配置文件 vi /etc/profile 在export PATH之后添加: 1、下载静态安装包  John Van Sickle - FFmpeg Static Builds 安装到:/u

    2024年02月12日
    浏览(50)
  • [音视频处理] FFmpeg使用指北1-视频解码

    本文将详细介绍如何使用ffmpeg 4.4在C++中解码多种格式的媒体文件,这些媒体文件可以是视频、视频流、图片,或是桌面截屏或USB摄像头的实时图片。解码文件后,还将每帧图片转换为OpenCV的Mat格式以供后续使用。 目录 1 基于ffmpeg的媒体文件解码 1.1 简介 1.2 详细代码 2 ffmpeg函

    2024年02月07日
    浏览(46)
  • FFmpeg音视频处理工具介绍及应用

    FFmpeg项目由 Fabrice Bellard在2000年创立。到目前为止,FFmpeg项目的开发者仍然与VLC、MPV、dav1d、x264等多媒体开源项目有着广泛的重叠。Ffmpeg(FastForward Mpeg)是一款遵循GPL的开源软件,在音视频处理方面表现十分优秀,几乎囊括了现存所有的视音频格式的编码,解码、转码、混合

    2024年02月08日
    浏览(53)
  • ffmpeg与opencv-python处理视频

    1.下载 FFmpeg 访问FFmpeg官方网站。 选择 “Windows builds from gyan.dev” 链接,这会带您到一个包含最新版本 FFmpeg Windows 构建的页面。 选择一个适合您系统的版本(例如,32位或64位),并下载 ZIP 文件。 2.解压文件 将下载的 ZIP 文件解压到选择的文件夹中。 3.添加 FFmpeg 到您的环境

    2024年01月22日
    浏览(33)
  • JavaCV与FFmpeg:音视频流处理技巧

    1. JavaCV简介 JavaCV是一个开源的Java接口,为OpenCV、FFmpeg和其他类似工具提供了封装。它允许Java开发者直接在他们的应用程序中使用这些强大的本地库,而无需深入了解复杂的本地代码。JavaCV特别适用于处理图像和视频数据,提供了一系列的功能,如图像捕获、处理和视频编解

    2024年02月04日
    浏览(39)
  • 音视频处理 ffmpeg中级开发 H264编码

    libavcodec/avcodec.h 常用的数据结构 AVCodec 编码器结构体 AVCodecContext 编码器上下文 AVFrame 解码后的帧 结构体内存的分配和释放 av_frame_alloc 申请 av_frame_free() 释放 avcodec_alloc_context3() 创建编码器上下文 avcodec_free_context() 释放编码器上下文 解码步骤 avcodec_find_decoder 查找解码器 avcod

    2024年02月01日
    浏览(59)
  • Opencv+ffmpeg摄像头视频处理(还在完成中)

    最近在搞qt监控软件的需求,经查资料发现可以通过opencv来实现图像的处理,先将opencv以及相关事件做一记录。 下图是本设计中关于C/S交互分布图,暂做记录 greenBambooMonitoring_20230202 opencv 读取视频帧cpu占用很高 Mat 图像的存储容器。 完成一个video设备录像的关键步骤 打开vid

    2023年04月23日
    浏览(38)
  • 开源的跨平台的音视频处理工具FFmpeg

    FFmpeg是一个开源的跨平台的音视频处理工具,可以对音频、视频进行转码、裁剪、调节音量、添加水印等操作。 广泛的格式支持。 FFmpeg能够解码、编码、转码、复用、分离、流式传输、过滤和播放几乎人类和机器所创造的任何内容。它支持最古老且晦涩难懂的格式,也支持

    2024年02月15日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包