打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
FFmpeg:视频转码、剪切、合并、播放速调整

安装

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

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

sudo apt install ffmpeg

转码

最简单命令如下:

ffmpeg -i out.ogv -vcodec h264 out.mp4ffmpeg -i out.ogv -vcodec mpeg4 out.mp4ffmpeg -i out.ogv -vcodec libxvid out.mp4ffmpeg -i out.mp4 -vcodec wmv1 out.wmvffmpeg -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.wmvffmpeg -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.txtfile '/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.mpgffmpeg -i input2.avi -qscale:v 1 intermediate2.mpgcat intermediate1.mpg intermediate2.mpg > intermediate_all.mpgffmpeg -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.更多参数:
参考百度百科
参考官网

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
FLV视频转换的利器 - ffmpeg.exe - luluping - 博客园
FFmpeg下载
FFmpeg常用命令行
ffmpeg 常用命令示例及解释
【FFmpeg】FFmpeg常用基本命令
使用ffmpeg对视频封装和分离
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服