一、简述

ffmpeg是一个非常强大的工具,它可以转换任何格式的媒体文件,并且还可以用自己的AudioFilter以及VideoFilter进行处理和编辑。有了它,我们就可以对媒体文件做很多我们想做的事情了。

二、命令行参数

1. 通用参数

  • -f fmt : 指定格式
  • -i filename:指定输入文件名
  • -y:覆盖已有文件
  • -t duration:指定时长
  • -fs limit_size:设置文件大小的上限
  • -ss time_off: 从指定的时间开始
  • -re:代表按照时间戳读取或发送数据,尤其在作为推流工具的时候一定要加上该参数,否则ffpmeg会按照最高速率向流媒体不停的发送数据。
  • -map:指定输出文件的流映射关系。例如:“-map 1:0 -map 1:1”要求按照第二个输入的文件的第一个流和第二个流写入输出文件。如果没有设置此项,则ffpmeg采用默认的映射关系。

2. 视频参数

  • -b:指定比特率(bit/s),ffmpeg默认采用的是VBR的,若指定的该参数,则使用平均比特率。
  • -bitexact:使用标准比特率。
  • -vb:指定视频比特率(bit/s)
  • -r rate:帧速率(fps)
  • -s size:指定分辨率(320x240)
  • -aspect aspect:设置视频长宽比(4:3、16:9或1.33333、1.77777)
  • -croptop size:设置顶部切除尺寸(in pixels)
  • -cropleft size:设置左切除尺寸(in pixels)
  • -cropbottom size:设置地步切除尺寸(in pixels)
  • -cropright size:设置右切除尺寸(in pixels)
  • -padtop size:设置顶部补齐尺寸(in pixels)
  • -padleft size:设置左补齐尺寸(in pixels)
  • -padbottom size:设置地步补齐尺寸(in pixels)
  • -padright size:设置右补齐尺寸(in pixels)
  • -padcolor color:设置补齐颜色
  • -vn:取消视频的输出
  • -vcodec codec:强制使用codec编码方式

3. 音频参数

  • -ab:设置比特率(bit/s),对于MP3的格式,想要听到较高品质的声音,建议设置160Kbit/s(单声道80Kbit/s)以上。
  • -aq quality:设置音频质量
  • -ar ratre:设置音频采样率(Hz)
  • -ac channels:设置声道数,1就是单声道,2就是立体声
  • -an:取消音频输出
  • -acodec codec:强制使用codec编码方式
  • -vol volume:设置录制音量大小

以上就是在日常开发中经常用到的音视频参数及通用参数。下面会针对常见的开发场景进行实践和说明。

三、实践学习

1. 列出ffmpeg支持的所有格式

相关命令:

ffmpeg -formats

输出结果:

File formats:D. = Demuxing supported.E = Muxing supported--D  3dostr          3DO STRE 3g2             3GP2 (3GPP2 file format)E 3gp             3GP (3GPP file format)D  4xm             4X TechnologiesE a64             a64 - video for Commodore 64D  aa              Audible AA format filesD  aac             raw ADTS AAC (Advanced Audio Coding)DE ac3             raw AC-3  省略......D  xbin            eXtended BINary text (XBIN)D  xmv             Microsoft XMVD  xpm_pipe        piped xpm sequenceD  xvag            Sony PS3 XVAGD  xwma            Microsoft xWMAD  yop             Psygnosis YOPDE yuv4mpegpipe    YUV4MPEG pipe

2. 剪切一段媒体文件,可以是音频或者视频文件

相关命令:

ffmpeg -i pm.mp4 -ss 00:00:50.0 -codec copy -t 20 output.mp4

命令说明:

表示将文件pm.mp4从第50s开始剪切20s的时间,输出到output.mp4中,其中-ss指定偏移时间(time Offset),-t指定的时长(duration)。

但是直接这样执行命令,固然我们能截取出来音视频的文件,但是当我们播放的时候,我们会发现虽然ffmepg剪切视频,很方便,但是也有很大缺陷:

(1). 剪切时间点不精确 
(2). 有时剪切的视频开头有黑屏

造成这些问题的原因是ffmpeg无法seek到非关键帧上。

命令层面定位的话就是如果把-ss, -t参数放在-i参数之后,是对输出文件执行的seek操作 
输入文件会逐帧解码,直到-ss设置的时间点为止,这么操作会很慢,虽然时间点是准确的,但是很容易出现黑屏问题。

所以:我们优化了一下上面的那个命令,让视频的剪切更加精确:

ffmpeg -ss 10 -t 15 -accurate_seek -i pm.mp4 -codec copy output.mp4 

注意:accurate_seek必须放在-i参数之前。

但是,可能又会有人发现,还是存在剪切不准确的现象,那是因为,上述命令只是进行了数据的转封装,会受到关键帧的影响,所以如果需要特别准确的剪切,只能使用ffmpeg进行重新编解码的操作了,命令行如下:

ffmpeg -i input.mp4 -ss 00:00:03.123 -t 10 -c:v libx264 -c:a aac out.mp4

此命令行相对上面的转封装的剪切来说,速度明显变慢,是因为对视频数据重新编解码了,但是精度相对转封装来说是大大提高了。

3. 提取视频文件中的音频数据,并保存为文件

相关命令:

ffmpeg -i pm.mp4 -vn -acodec copy output.m4a

命令说明:

将文件pm.mp4的视频流禁用掉(参数为:-vn,如果禁用音频流参数为-an,禁用字母流参数为-sn )。

然后将pm.mp4中的音频流的数据封装到output.m4a文件中,音频流的编码格式不变。

4. 将视频中的音频静音,只保留视频

相关命令:

ffmpeg -i pm.mp4 -an -vcodec copy output.mp4 

命令说明:

将文件pm.mp4的音频流禁用掉(参数为:-an )。

然后将pm.mp4中的视频流的数据封装到output.mp4文件中,视频流的编码格式不变。

5. 从mp4文件中抽取视频流导出为裸H264数据:

相关命令:

ffmpeg -i pm.mp4 -an -vcodec copy -bsf:v h264_mp4toannexb output.h264

命令说明:

在指令中,我们舍弃了音频数据(-an),视频数据使用mp4toannexb这个bitstreasm filter来转换为原始的H264数据。(注:同一编码也会有不同的封装格式)。

验证播放:

可以使用ffplay命令进行尝试播放,如果能播放成功,则说明生效。

6. 将视频推送到流媒体服务器上:

ffmpeg -re -i pm.mp4 -acodec copy -vcodec copy -f flv rtmp://127.0.0.1/rh/mylive 

命令说明:

将mp4文件的音视频数据的编码格式不变,按照rtmp的方式,将视频推送到流媒体服务器上。

7. 将流媒体服务器上的流dump到本地:

ffmpeg -i rtmp://127.0.0.1/rh/mylive -acodec copy -vcodec copy -f flv test.flv

命令说明:

将流媒体服务器的数据,不进行转码,通过转封装的方式保存到本地。

8. 给视频添加水印

ffmpeg -i pm.mp4 -i xxx.png -filter_complex "overlay=5:5"  out.mp4

命令说明:

使用ffmpeg滤镜功能,将对mp4添加水印。

9. 倒放音视频

// 1.视频倒放,无音频
ffmpeg.exe -i inputfile.mp4 -filter_complex [0:v]reverse[v] -map [v] -preset superfast reversed.mp4
// 2.视频倒放,音频不变
ffmpeg.exe -i inputfile.mp4 -vf reverse reversed.mp4
// 3.音频倒放,视频不变
ffmpeg.exe -i inputfile.mp4 -map 0 -c:v copy -af "areverse" reversed_audio.mp4
// 4.音视频同时倒放
ffmpeg.exe -i inputfile.mp4 -vf reverse -af areverse -preset superfast reversed.mp4

转载于:https://www.cnblogs.com/renhui/p/9223969.html

FFmpeg命令行工具学习(三):媒体文件转换工具ffmpeg相关推荐

  1. Fmpeg命令行工具学习(三):媒体文件转换工具ffmpeg

    一.简述 ffmpeg是一个非常强大的工具,它可以转换任何格式的媒体文件,并且还可以用自己的AudioFilter以及VideoFilter进行处理和编辑.有了它,我们就可以对媒体文件做很多我们想做的 ...

  2. 媒体文件转换工具ffmpeg命令行汇总(包括精准裁剪音视频)

    转自:https://www.cnblogs.com/renhui/p/9223969.html 这个blog有一系列的ffmpeg的源码分析,建议系统读一下. 这里我重点关注的是精准裁剪视频,没想到 ...

  3. ffmpeg媒体文件转换工具

    一.简述 ffmpeg是一个非常强大的工具,它可以转换任何格式的媒体文件,并且还可以用自己的AudioFilter以及VideoFilter进行处理和编辑.有了它,我们就可以对媒体文件做很多我们想做的 ...

  4. FFmpeg命令行解析

    目录标题 一.引言(Introduction) 1.1 FFmpeg简介(Overview of FFmpeg) 1.2 FFmpeg命令行的应用场景(Application Scenarios of ...

  5. FFmpeg命令行工具学习(一):查看媒体文件头信息工具ffprobe

    一.简述 ffprobe是ffmpeg命令行工具中相对简单的,此命令是用来查看媒体文件格式的工具. 二.命令格式 在命令行中输入如下格式的命令: ffprobe [文件名] 三.使用ffprobe查看 ...

  6. FFmpeg命令行工具-实用命令

    目录 help命令使用 流选择选项 视频封装解封装 3.1 视频格式转换 3.2 分离/合并视频音频流 3.3 截取视频片段 3.4 视频转换为m3u8格式 3.5 把视频文件推送到rtmp服务器 3 ...

  7. [总结]FFMPEG命令行工具之ffplay详解

    目录 0 前言 1 语法 Synopsis 2 描述 Description 3 选项 Options 3.1 流指定器 Stream specifiers 3.2 通用选项 Generic opti ...

  8. [总结]FFMPEG命令行工具之ffprobe详解

    目录 0 前言 1 语法 Synopsis 2  描述 Description 3 选项 Options 3.1 流指定器 Stream specifiers 3.2 通用选项 Generic opt ...

  9. Android 下使用 FFmpeg 命令行工具与问题排查

    目录 FFmpeg 命令行工具 将相关文件加入到项目中 修改 ffmpeg 源码 问题排查 上一篇文章 中,我们已经成功编译了 FFmpeg 的主要库并集成到了我们的 Android 应用中.我们暂时 ...

最新文章

  1. 地平线黄畅:软件2.0时代,数据驱动进化,算力将成为智能化的基石丨MEET2021...
  2. Notepad++自用主题推荐
  3. 用vue制作饿了么首页(1)
  4. python画五角星代码_Python使用Turtle模块绘制五星红旗代码示例
  5. wget for windows 下载与安装
  6. SuperEdge正式成为CNCF沙箱项目,腾讯云携手六家厂商在边缘计算领域踏入新篇章
  7. Docker容器安全性分析
  8. 2021牛客暑期多校训练营5,签到题BDHJK
  9. Menu控件在IE8中子菜单不能正常显示的解决方案(转)
  10. android动态注册广播权限,记动态注册广播权限问题
  11. Sessions, Window Stations and Desktops(GetDesktopWindow函数得到的桌面句柄, 是Csrss.exe创建的一个窗口)
  12. mellanox驱动安装
  13. cuteftp8.3序列号
  14. 打字测试软件 tt,TT打字测试软件
  15. matlab画图窗口显示中文乱码,全是方框的解决方法
  16. 【allegro 17.4软件操作保姆级教程一】软件操作环境设置
  17. Android之Parcel和Parcelable
  18. 接入猫超、盒马的饿了么正在摆脱“外卖”标签
  19. 小改下把tio-websocket-showcase变成可集群方式
  20. 计算机xp系统恢复以前设置,最新版:如何在XP系统计算机上恢复出厂设置?

热门文章

  1. Spark 配置Kryo序列化机制注意细节
  2. Linkis生产部署服务器配置参考指南
  3. eclipse常用功能:代码重构(变量批量重命名)、自定义注释、代码模板、打开断言
  4. python3导入特定的成员
  5. 笔试题:写一个ArrayList 的动态代理类
  6. Spring Cloud构建微服务架构:消息驱动的微服务(入门)【Dalston版】
  7. python实现qq登录_在django中实现QQ登录
  8. python3.6安装包报错_win10安装python3.6的常见问题
  9. Date、DateFormat、Calendar日期类
  10. 搜索框内容自动提示bootstrap ajax