安装

去官网按提示安装即可,支持三大操作系统。唯一要吐槽的是,Ubuntu 14.04 等较新的版本,从默认软件列表里移除了 ffmpeg,转而支持 libav,可是 libav 又没弄好,很难用——开源社区瞎折腾起来真是无力吐槽。

2017 更新: Ubuntu 16.04FFmpeg 又回到了官方仓库:

sudo apt install ffmpeg

转码

最简单命令如下:

ffmpeg -i out.ogv -vcodec h264 out.mp4
ffmpeg -i out.ogv -vcodec mpeg4 out.mp4
ffmpeg -i out.ogv -vcodec libxvid out.mp4
ffmpeg -i out.mp4 -vcodec wmv1 out.wmv
ffmpeg -i out.mp4 -vcodec wmv2 out.wmv

-i 后面是输入文件名。-vcodec 后面是编码格式,h264 最佳,但 Windows 系统默认不安装。如果是要插入 ppt 的视频,选择 wmv1wmv2 基本上万无一失。

附加选项:-r 指定帧率,-s 指定分辨率,-b 指定比特率;于此同时可以对声道进行转码,-acodec 指定音频编码,-ab 指定音频比特率,-ac 指定声道数,例如

ffmpeg -i out.ogv -s 640x480 -b 500k -vcodec h264 -r 29.97 -acodec libfaac -ab 48k -ac 2 out.mp4

剪切

-ss-t 选项, 从第 30 秒开始,向后截取 10 秒的视频,并保存:

ffmpeg -i input.wmv -ss 00:00:30.0 -c copy -t 00:00:10.0 output.wmv
ffmpeg -i input.wmv -ss 30 -c copy -t 10 output.wmv

达成相同效果,也可以用 -ss-to 选项, 从第 30 秒截取到第 40 秒:

ffmpeg -i input.wmv -ss 30 -c copy -to 40 output.wmv

值得注意的是,ffmpeg 为了加速,会使用关键帧技术, 所以有时剪切出来的结果在起止时间上未必准确。 通常来说,把 -ss 选项放在 -i 之前,会使用关键帧技术; 把 -ss 选项放在 -i 之后,则不使用关键帧技术。 如果要使用关键帧技术又要保留时间戳,可以加上 -copyts 选项:

ffmpeg -ss 00:01:00 -i video.mp4 -to 00:02:00 -c copy -copyts cut.mp4

参考:ffmpeg.org

合并

把两个视频文件合并成一个。

简单地使用 concat demuxer,示例:

$ cat mylist.txt
file '/path/to/file1'
file '/path/to/file2'
file '/path/to/file3'$ ffmpeg -f concat -i mylist.txt -c copy output

更多时候,由于输入文件的多样性,需要转成中间格式再合成:

ffmpeg -i input1.avi -qscale:v 1 intermediate1.mpg
ffmpeg -i input2.avi -qscale:v 1 intermediate2.mpg
cat intermediate1.mpg intermediate2.mpg > intermediate_all.mpg
ffmpeg -i intermediate_all.mpg -qscale:v 2 output.avi

参考:stackoverflow; ffmpeg.org。

调整播放速度

加速四倍:

ffmpeg -i TheOrigin.mp4 -vf  "setpts=0.25*PTS" UpTheOrigin.mp4

四倍慢速:

ffmpeg -i TheOrigin.mp4 -vf "setpts=4*PTS" DownTheOrigin.mp4

FFmpeg精确时间截取视频

简介:
之前用到过FFmpeg截取过音频和视频发现,截取的视频文件时间不是很准确,今天便系统的学习了一下FFmpeg截取视频的知识

1.首先明确为什么FFmpeg截取的视频时间点不精确?
造成这些问题的原因是ffmpeg无法seek到非关键帧上。

2.剪切方法:(非重新编码)

ffmpeg -ss [start] -t [duration] -accurate_seek -i [in].mp4 -codec copy [out].mp4参数分析:--[start]起始时间--[duration]需要截取的时长--[in]输入文件名--[out]输出文件名亲测:时间并不精确(我是在Linux下使用ffmpeg),另外这种方式会导致:如果视频结尾不是关键帧,那么视频最后就会出现一段空白。解决方法是:  加入[-avoid_negative_ts 1]ffmpeg -ss [start] -t [duration] -accurate_seek -i [in].mp4 -codec copy -avoid_negative_ts 1 [out].mp4

3.重新编码进行剪切

ffmpeg -ss [start] -t [duration] -i [in].mp4  -c:v libx264 -c:a aac -strict experimental -b:a 98k [out].mp4

相对来说比较精确,可是还是不是特别精确,,什么原因呢?望有人解答


FFmpeg的使用及常用参数

一.下载:

官网:http://ffmpeg.org/

二.demo:

class Program{static void Main(string[] args){string srcFileName = @"F:\资料\Demo\FFmpeg_Demo\videoold\PROMO.wmv";string destFileName = @"F:\资料\Demo\FFmpeg_Demo\videonew\PROMO.mp4";Process p = new Process();p.StartInfo.FileName = @"F:\资料\Demo\FFmpeg_Demo\mencoder\ffmpeg.exe";p.StartInfo.UseShellExecute = false;p.StartInfo.Arguments = "-i " + srcFileName + GenerateDefaultSetting() + destFileName;p.StartInfo.RedirectStandardInput = true;p.StartInfo.RedirectStandardOutput = true;p.StartInfo.RedirectStandardError = true;//把外部程序错误输出写到StandardError流中p.ErrorDataReceived += new DataReceivedEventHandler(p_ErrorDataReceived);p.OutputDataReceived += new DataReceivedEventHandler(p_OutputDataReceived);p.Start();p.BeginErrorReadLine();//开始异步读取p.WaitForExit();//阻塞等待进程结束p.Close();//关闭进程p.Dispose();//释放资源Console.WriteLine("ok");Console.ReadKey();}private static void p_ErrorDataReceived(object sender, DataReceivedEventArgs e){Console.WriteLine(e.Data);}private static void p_OutputDataReceived(object sender, DataReceivedEventArgs e){Console.WriteLine(e.Data);}private static string GenerateDefaultSetting(){string setting = string.Empty;setting += " -y ";//setting += " -b 800 ";//-b大于0就模糊【?】setting += " -ab 56 ";setting += " -ar 22050 ";setting += " -qscale 4 ";setting += " -r " + 29.970;setting += " -ac 2 ";setting += " -s " + 640 + "x" + 480 + " ";return setting;}}

三.ffmpeg各种视频处理:(注意参数顺序)

1.视频转换:

avi-------------------------->flv

ffmpeg -i  file.avi   output.flv

MPEG-1--------------->MPEG-4

ffmpeg -i inputfile.mpg -f mp4 -acodec libfaac -vcodec mpeg4 -b 256k -ab 64k outputfile.mp4

MP3------------------->MPEG-4

ffmpeg -i inputfile.mp3 -f mp4 -acodec libaac -vn -ab 64k outputfile.mp4

DVD的VOB---------->VideoCD格式的MPEG-1

ffmpeg -i inputfile.vob -f mpeg -acodec mp2 -vcodec mpeg1video -s 352x240 -b 1152k -ab 128k outputfile.mpg

AVI------------------->H.264格式的M4V

ffmpeg -i inputfile.avi -f mp4 -acodec libfaac -vcodec libx264 -b 512k -ab 320k outputfile.m4v

任何------------------->东芝REGZA可辨识的MPEG2

ffmpeg -i inputfile -target ntsc-svcd -ab 128k -aspect 4:3 -s 720x480 outputfile.mpg

2.音频视频合并:ok

   ffmpeg -i input1.avi -i input2.mp3 -vcodec copy -acodec copy out.avi

3.拆分音频视频:ok

提取音频:

ffmpeg -i input.flv -vn -acodec copy out.mp3

提取视频:

ffmpeg -i input.flv  -an -vcodec copy  out.flv okffmpeg -i input.flv out.flv  -an -vcodec copy  error------->注意参数顺序

音视频都提取:

ffmpeg -i input.flv -an out1.flv -vn out2.mp3

4.提取图片:ok

ffmpeg -i input.avi -y -f image2 -ss 8 -t 0.001 -s 350x240 out.jpg

5.压缩文件:ok

ffmpeg -i input.mp3 -ab 128 out.mp3

6.截取指定的时间间隔的视频:ok

 ffmpeg -ss 00:00:10 -t 00:01:22 -i 五月天-突然好想你.mp3  out.mp3

7.屏幕录像:

ffmpeg -f x11grab -s xga -r 10 -i :0.0+0+0 wheer.avi ffmpeg -f x11grab  -s 320x240  -r 10 -i :0.0+100+200 wheer.aviffmpeg -f x11grab -s xga    -qscale 5    -r 10 -i :0.0+0+0 wheer.avi

8.屏幕录像,同时录音:

ffmpeg -f oss -i /dev/dsp        -f x11grab -r 30 -s 1024x768 -i :0.0  output.mkvffmpeg   -ac 2 -f oss  -i  /dev/dsp   -f x11grab -r 30 -s 1024x768 -i :0.0 -acodec pcm_s16le -vcodec libx264 -vpre lossless_ultrafast -threads 0 output.mkv

9.屏幕录像,指定窗口:

10.视频连接:

 ffmpeg -i input1.avi -i input2.avi output.avi  -vcodec copy -acodec copy

11.分割视频:ok

ffmpeg -ss 01:00:00 -i input.mp4 -vcodec copy -acodec copy -t 00:06:00 out.mp4

四.参数:

1.常用参数:

-ab      bitrate      设置音频码率-acodec  codec        使用codec编解码-ac      channels     设置通道,缺省为1-ar      freq         设置音频采样率-r       fps          设置帧频,缺省25-b       bitrate      设置比特率,缺省200kb/s  -qscale  6或4         使用动态码率来设置-vcodec libx264  这个应该是个编码设置,网上查到 libx264.dll

2.更多参数:
参考百度百科
参考官网

FFmpeg:视频转码、剪切、合并、播放速调整相关推荐

  1. java用ffmpeg转码_java运用FFMPEG视频转码技术.doc

    java运用FFMPEG视频转码技术 基于windows系统安装FFMPEG转码技术 软件特点: 被转视频基本不失真(支持超清.高清.标清): 转码速度比较现成转码软件快非常多(不管文件有多大,此软件 ...

  2. Android FFmpeg视频转码并保存到本地

    本文讲述在Android中, 如何将FFmpeg视频转码为YUV格式并保存到本地. 首先,我们基于上一篇文章 基于Android Studio3.2实现ffmpeg最简单的例子 来进行配置. 配置好之 ...

  3. nodejs+ffmpeg视频转码

    nodejs+ffmpeg视频转码 const context = require("../core/node_core_ctx"); const {spawn,exec} =re ...

  4. FFMPEG音频视频开发: 视频转码、合并、修改分辨率、比特率

    一.环境介绍 操作系统介绍:win10 64位 FFMPEG版本: 4.4.2 QT版本: 5.12.6 二.FFMPEG下载 ubuntu系统下编译安装ffmpeg:  https://blog.c ...

  5. javaweb中ffmpeg视频转码h264出现卡住不执行的解决办法(看到最后面就是答案了)

    郑文亮 专心地钻研编程,每天进步一点点 博客园 首页 新随笔 联系 管理 随笔-1610  文章-3  评论-570  Java+Windows+ffmpeg实现视频转换 最近由于项目需要,研究了一下 ...

  6. 使用GPU硬件加速FFmpeg视频转码

    最近看了些视频处理相关的文章,这里有一篇是讲如何使用Nvidia显卡为视频的编解码进行加速的, 为了方便查阅就转载了: 本文内容包括: 在Linux环境下安装FFmpeg 通过命令行实现视频格式识别和 ...

  7. Linux使用shell定时任务实现ffmpeg视频转码和截图

    最近将.net core系统从windows 环境下迁移到linux中,使用docker容器部署.但是系统中使用了ffmpeg做视频转码和截图.在windows中只需要知道ffmpeg.exe的文件位 ...

  8. C#调用Process执行ffmpeg视频转码七分钟后就假死了

    问题描述 ffmpeg -i /wzfgs_img_storage/tuku.img_linux/upload/20210421_164313_803_a2a2.mov -vcodec h264 /v ...

  9. 解决ffmpeg视频转码后视频清晰度下降的问题

    清晰度 Chrome不支持非h264编码的mp4视频播放,可通过ffmpeg将视频转码成h264编码: ffmpeg -i input.mp4 -vcodec h264 -b:v 0 output.m ...

最新文章

  1. mysql5.7数据库快照_lvm快照备份数据库(Mysql5.7)
  2. c hello world_C和C++使用对方编译的动态链接库
  3. 命令模式应用_命令设计模式的应用
  4. Linux学习总结(57)——生产环境用户权限管理规范
  5. centos 7 更换yum源
  6. GetModuleFileNameA函数与GetCurrentDirectoryA函数
  7. (转)测试端口通不通(四种方法)
  8. 自定义 DameK UltraBlue 的 Command Line
  9. iPhone开发 No IB UITextField 设置圆角
  10. element表格点击行即选中该行复选框
  11. 小米note位置服务器,小米Note
  12. 肿瘤异质性:精准医学需要解决的难题
  13. 中央空调和普通空调区别
  14. Adobe Premiere Rush最新升级 终于支持M1芯片了
  15. 电气专业c语言要学得非常好吗,电气自动化专业需要学C语言吗?
  16. 2020-03-18HTML
  17. uoj#386. 【UNR #3】鸽子固定器(乱搞)
  18. C语言阿拉伯数字转大写汉字,人民币阿拉伯数字转换为汉字大写 code
  19. 图注意力网络——Graph attention networks (GAT)
  20. ADNI以及study design简介

热门文章

  1. 求 1到 100 的阶乘之和
  2. Android ASM 插桩实践
  3. ct图像中的金属伪影
  4. java ajax清除缓存_JS 清除浏览器缓存(转)
  5. Java基础-1 基础数据类型及常用引用数据类型
  6. java 逻辑运算_Java逻辑运算
  7. 深度学习的典型应用和挑战及未来
  8. IE 8 浏览器 F12 调试功能无法使用
  9. 苹果电脑拷贝文件到u盘很慢_U盘防拷贝哪家比较好?哪个做得好?
  10. 直接转矩控制matlab仿真,基于matlab的异步(感应)电机直接转矩控制系统毕业论文+仿真源码+仿真模型...