Linux和Windows下ffmpeg的使用教程

2017年04月27日

原创内容,转载请注明出处: https://www.myzhenai.com.cn/post/2587.html https://www.myzhenai.com/thread-17995-1-1.html
关键词: ffmpeg合并音频 ffmpeg合并视频 ffmpeg剪辑视频 ffmpeg压缩视频 ffmpeg转码 ffmpeg录制桌面 ffmpeg视频加水印
视频演示地址: 链接: https://pan.baidu.com/s/1mibTLDe 密码: e753
什么是ffmpeg?
FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。
FFmpeg在Linux平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括Windows、Mac OS X等。这个项目最早由Fabrice Bellard发起,2004年至2015年间由Michael Niedermayer主要负责维护。许多FFmpeg的开发人员都来自MPlayer项目,而且当前FFmpeg也是放在MPlayer项目组的服务器上。项目的名称来自MPEG视频编码标准,前面的”FF”代表”Fast Forward”。多媒体视频处理工具FFmpeg有非常强大的功能包括视频采集功能、视频格式转换、视频抓图、给视频加水印等。
ffmpeg是强大的媒体处理软件,是开源的, 很多流行的播放器, 格式转换工具, 压缩处理和编码转换工具都是使用ffmpeg进行的, 很多主流的视频网站, 比如youtube 优酷 搜狐…..都在后台对用户上传的视频进行ffmpeg转换编码处理才进行播放的, 或者进行文件切割.
Linux下ffmpeg使用方法

查询ffmpeg参数  ffmpeg -h
查询本机编解码器  ffmpeg -codecs
查询ffmpeg编译模块  ./configure --help
查询本机设备(windows)  ffmpeg.exe -list_devices true -f dshow -i dummy

 
ffmpeg一键编译脚本: https://www.myzhenai.com.cn/post/2378.html
ffmpeg使用方法: https://www.myzhenai.com.cn/post/1189.html

ffmpeg -i file.avi -i zhangshan.mp3 -vcodec copy -acodec copy filemp3.avi---合并视频和音乐
ffmpeg -y -i test.mp4 -acodec copy -vf "movie=uwsgi.jpg [logo]; [in][logo] overlay=10:10:1 [out]" test2.mp4---视频加水印 overlay=10:10:1,后三个数据表示是距离左边的距离,距离上边的距离,是否透明,1表示透明
#ffmpeg -i long.pfv -f mp2 -vn long.mp3---从视频里提取mp3音乐文件
#ffmpeg -s 1280x1024 -r 25 -f x11grab -i :0.0 -f alsa -ac 2 -ar 44100 -i pulse -qscale 0.01 output.flv
#ffmpeg -f alsa -i pulse -f x11grab -r 25 -s 1280x1024 -i :0.0 -acodec pcm_s16le -vcodec libx264 -preset ultrafast -crf 0 output.mkv
#ffmpeg -f alsa -i pulse -f x11grab -r 30 -s 1280x1024 -i :0.0 -acodec aac -b:a 1.5M -vcodec libx264 -b:v 75000k -preset ultrafast -crf 0 output.mkv
#ffmpeg -video_size 1280x1024 -framerate 30 -f x11grab -i :0.0 -c:v libx264 -qp 0 -preset ultrafast capture.mkv---录制高清视频
#ffmpeg -s 1280x1024 -r 25 -f x11grab -i :0.0 -f alsa -ac 1 -ar 44100 -i pulse -qscale 0.01 output.mp4---录制视频和音频
#ffmpeg -i 01.mp4 -vf scale=640:352 001.mp4---视频压缩
#ffmpeg -i ko.mp3 -vn -y ko.mp2
#ffmpeg -i ko.mp3 ko.mp2---音频转换
#ffmpeg -i daddy.mp4 -metadata title="PSY 2015 song Daddy" -metadata author="PSY" -metadata copyright="https://www.myzhenai.com.cn https://www.myzhenai.com https://www.haikou-china.com https://jiayu.mybabya.com" -metadata comment="https://www.myzhenai.com.cn https://www.myzhenai.com https://www.haikou-china.com https://jiayu.mybabya.com" -y daddy2.mp4 ---添加视频音频的元数据信息,即作者,版权,注释等信息
ffmpeg -i ko.mp3 -f mp2 -acodec mp2 -vn ko.mp2---转换成mp2

 

ffmpeg -i output.mp4 -vcodec libx264 -acodec aac -b:a 192k -ar 44100 -ac 2 ffmpeg.mp4---视频压缩转换降燥音
#-i output.mp4 要压缩的文件
#-vcodec libx264 要转换的视频编码
#-acodec aac 要转换的音频编码
#-b:a 192k 设置音频比特率
#-b:v 192k 设置视频比特率
#-ar 44100 设置音频采样率
#-ac 2 设置双声道

 

ffmpeg -i shitaoji.mp3 -i file.mp4 -vcodec h264 -acodec libmp3lame fileout.mp4---合并视频和音乐
#-i file.mp4 这是输入视频
#-i shitaoji.mp3 这是输入mp3
#-vcodec h264 这是指定视频编解码格式 
#-acodec libmp3lame 这是指定音频编解码格式
#fileout.mp4 合并后的文件
#如果视频大音频小,那么小的文件要放在前面,不然会不成功.

 

ffmpeg -i glb.flv -acodec libmp3lame -vn glb.mp3---从视频里提取音频文件
#-i lglb.flv 这是输入文件
#-acodec libmp3lame 这是强制mp3格式
#-vn glb.mp3 -vn参数是禁用视频并生成mp3文件.

 

ffmpeg -i glb.flv -vcodec libx264 -acodec aac glb.mp4---视频转换械式(转码)
#-i glb.flv 输入文件
#-vcodec libx264 指定视频编解码器H264
#-acodec aac 指定音频编解码器

 

ffmpeg -f alsa -i pulse -f x11grab -r 30 -s 1280x1024 -i :0.0 -acodec aac -b:a 1.5M -vcodec libx264 -b:v 75000k -preset ultrafast -crf 0 output.mp4---桌面录制

ffmpeg -f alsa -f x11grab -r 30 -s 1280x1024 -i :0.0 -acodec aac -b:a 192k -vcodec libx264 -b:v 192k -preset ultrafast -crf 0 output.mp4
#-f alsa 这是指定声卡驱动模式,还有有pcm和oss,但主流的是alsa
#-i pulse 这是输入脉冲
#-f x11grab 这是强制桌面,x11是Linux下的一个窗口组件
#-r 30这是设置帧率
#-s 1280x1024这是指定录制窗口大小
#-i :0.0 这好像是指定视频和音频设备的
#-acodec aac 这是指定音频格式
#-b:a 1.5M 这好像是指定音频速率的
#-vcodec libx264 这是指定视频编解码器为H264
#-b:v 75000k 这好像是指定视频速率的
#-presset ultrafast -crf 0 这个好像是某个模式,好像数值越小越清晰.

 

ffmpeg -i shitaoji.m4a -acodec libmp3lame shitaoji.mp3---音频转换
#-i shitaoji.m4a 输入文件
#-acodec libmp3lame 指定音频编解码器, ffmpeg默认是支持mp3解码,不支持mp3编码的,因为版权的原因,所以需要额外安装libmp3lame依赖库

 

ffmpeg -i fileout.mp4 -vf scale=640:352 ffile.mp4---视频压缩
ffmpeg -i kjc.mkv -vcodec libx264 -acodec libmp3lame -vf scale=640:352 kjc.mp4
#-i xxx.mp4 输入文件
#-vf 设置视频过滤器
#scale=640:352需要压缩的视步大小
#-vcodec libx264 可以添加这个参数让视频转码为H264,即真正的mp4 也可以做为压缩转码
#-acodec aac 可以添加这个参数让视频的音频编码转换为aac
#-acodec libmp3lame 指定音频使用mp3编码

 

ffplay /home/RucLinux/ffmpeg/shitaoji.m4a
ffplay /home/RucLinux/ffmpeg/glb.flv  ---播放文件

 




Windows下的ffmpeg用法
https://ffmpeg.zeranoe.com/builds/
https://ffmpeg.zeranoe.com/builds/win64/external_libs/rtmpdump-20140302-git-79459a2-win64.7z
https://ffmpeg.zeranoe.com/builds/win64/external_libs/x265-20140410-hg-83ccf2f1-win64.7z
https://ffmpeg.zeranoe.com/builds/win64/dev/ffmpeg-20170422-207e6de-win64-dev.zip
https://ffmpeg.zeranoe.com/builds/win32/static/ffmpeg-20170422-207e6de-win32-static.zip 重要的是这个
https://ffmpeg.zeranoe.com/builds/win64/static/ffmpeg-20170422-207e6de-win64-static.zip 重要的是这个
https://ffmpeg.zeranoe.com/builds/win64/external_libs/frei0r-20130321-git-245bb38-filters-win64.7z

https://ffmpeg.zeranoe.com/builds/win32/static/ffmpeg-20170422-207e6de-win32-static.zip 重要的是这个
https://ffmpeg.zeranoe.com/builds/win64/static/ffmpeg-20170422-207e6de-win64-static.zip 重要的是这个
根据自己的系统下载上边的文件,然后解压缩,将文件夹重命令为ffmpeg 将文件夹复制到D盘下

D:\ffmpeg\bin\ffplay.exe E:\我们的更路薄[超清版].flv ---播放文件
#D:\ffmpeg\bin\ffplay.exe 是程序路径,这是ffmpeg已经编译过的ffmpeg播放器程序
#E:\我们的更路薄[超清版].flv 这是要播放的文件

 

D:\ffmpeg\bin\ffmpeg.exe -i E:\我们的更路薄[超清版].flv -vcodec h264 -s 1280x1024 -acodec aac E:\wmdglb.mp4---视频转换(转码)
#D:\ffmpeg\bin\ffmpeg.exe 程序路径
#-i E:\我们的更路薄[超清版].flv 输入文件
#-vcodec h264 指定编解码器为H264
#-s 1280x1024 指定转换后的视频窗口大小 不添加这行即原文件大小,或者参考上边那个转换代码也可以
#-acodec aac 指定音频编解码器

 

D:\ffmpeg\bin\ffmpeg.exe -f gdigrab -i desktop -f dshow -i audio="@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{39AC5D73-D334-4571-91AC-5D163009C0C7}" -vcodec libx264 -qp 20 -acodec mp3 E:\out.mp4---录制桌面,有声音

D:\ffmpeg\bin\ffmpeg.exe -f dshow -i video="screen-capture-recorder" -s 1280x1024 -r 25 -vcodec h264 -f dshow -i audio="virtual-audio-capturer" -acodec aac -qp 20 -ar 44100 -ac 2 -preset ultrafast out.mp4---录制桌面,有声音

D:\ffmpeg\bin\ffmpeg.exe -f gdigrab -i desktop -vcodec h264 -s 1280x1024 E:\out.mp4---录制桌面,没有声音

以上三行都是Windows下录制桌面的命令, 但录制质量比不上Linux下的, 在win10下也不好找到系统设备了,录制声音需要找到系统音频设备
#D:\ffmpeg\bin\ffmpeg.exe 程序路径
#-f gdigrab 好像是windows下的窗口 跟Linux下的x11grab一样.
#-i desktop 输入桌面
#-vcodec h264 指定编视频编解码器为H264
#-s 1280x1024 指定录制的窗口大小
#-f dshow 输出设备
#-i audio 这是从指定音频设备输入音频.
#@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{39AC5D73-D334-4571-91AC-5D163009C0C7} 这是音频设备 可以用下边的那行命令获取本机设备
#screen-capture-recorder ---视频设备,这个要安装一个软件才能使用这个设备
#virtual-audio-capturer 音频设备,同样需要安装一个软件才能使用这个设备. 安装什么可以搜索这两个关键词.

 
D:\ffmpeg\bin\ffmpeg.exe -list_devices true -f dshow -i dummy---获取本机视频和音频设备
[dshow @ 03737940] DirectShow video devices (some may be both video and audio devices)
[dshow @ 03737940] Could not enumerate video devices (or none found).
[dshow @ 03737940] DirectShow audio devices
[dshow @ 03737940] "楹﹀厠椋?(High Definition Audio 璁惧)"---麦克风设备 "麦克风 (High Definition Audio 设备)"
[dshow @ 03737940] Alternative name "@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{39AC5D73-D334-4571-91AC-5D163009C0C7}"---音频设备
dummy: Immediate exit requested

windows下的ffmpeg是官方已经编译成exe文件了,所以我不知道它兼容多少, 加上在windows下录制桌面和声音比较麻烦, 这里我就不演示windows下的了
有兴趣的朋友们可以关注我的头条号(龙华仙岛)或微博, 有问题可以询问我一起讨论.



sicnature ---------------------------------------------------------------------
I P 地 址: 18.97.14.83
区 域 位 置: 美国马萨诸塞
系 统 信 息: 美国
Original content, please indicate the source:
同福客栈论坛 | 蟒蛇科普海南乡情论坛 | JiaYu Blog
sicnature ---------------------------------------------------------------------
Welcome to reprint. Please indicate the source https://www.myzhenai.com.cn/post/2587.html

3条评论

  • 海南胡说 2017年05月18日在11:17 下午

    FFMpeg无损合并视频的多种方法
    方法一:FFmpeg concat 协议
    对于 MPEG 格式的视频,可以直接连接:

    ffmpeg -i “concat:input1.mpg|input2.mpg|input3.mpg” -c copy output.mpg

    对于非 MPEG 格式容器,但是是 MPEG 编码器(H.264、DivX、XviD、MPEG4、MPEG2、AAC、MP2、MP3 等),可以包装进 TS 格式的容器再合并。在新浪视频,有很多视频使用 H.264 编码器,可以采用这个方法

    ffmpeg -i input1.flv -c copy -bsf:v h264_mp4toannexb -f mpegts input1.ts
    ffmpeg -i input2.flv -c copy -bsf:v h264_mp4toannexb -f mpegts input2.ts
    ffmpeg -i input3.flv -c copy -bsf:v h264_mp4toannexb -f mpegts input3.ts
    ffmpeg -i “concat:input1.ts|input2.ts|input3.ts” -c copy -bsf:a aac_adtstoasc -movflags +faststart output.mp4

    保存 QuickTime/MP4 格式容器的时候,建议加上 -movflags +faststart。这样分享文件给别人的时候可以边下边看。
    方法二:FFmpeg concat 分离器
    这种方法成功率很高,也是最好的,但是需要 FFmpeg 1.1 以上版本。先创建一个文本文件filelist.txt:

    file ‘input1.mkv’
    file ‘input2.mkv’
    file ‘input3.mkv’

    然后:

    ffmpeg -f concat -i filelist.txt -c copy output.mkv

    注意:使用 FFmpeg concat 分离器时,如果文件名有奇怪的字符,要在 filelist.txt 中转义。

  • 海南胡说 2017年06月4日在1:41 上午

    ffmpeg合并视频的命令, 在合并之前,请将需要合并的视频分别转码成一致的编码.
    ffmpeg -i concat:”01.mp4|02.mp4″ -c copy updtp.mp4

  • 海南胡说 2021年02月7日在6:38 下午

    D:\ffmpeg\bin\ffmpeg.exe -i d.mp4 -vf “transpose=2,transpose=2” dmangshe.mp4 视频180度旋转

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注