ffmpeg
命令用于录制、编辑、转码视频。
ffmpeg -devices
这个结果在不同的系统中会不一样。
在macOS中的结果通常如下:
2、查看某种设备有哪些具体的设备:
ffmpeg -list_devices true -f ${DeviceName} -i ""
${DeviceName}
是变化的,通常与操作系统有关:
操作系统 | DeviceName |
---|---|
macOS | avfoundation |
Windows | dshow |
GNU/Linux | x11grab |
示例1:
ffmpeg -f avfoundation -r 30 -i "0" -aspect 1:1 -s 480x480 output.mp4
命令解释:
-f avfoundation
表明是在macOS中的avfoundation
设备。
-i "0"
表示捕获摄像头的数据。
-r 30
表示视频的帧率,这里是30帧/秒。-i "0"
的位置不能与-r 30
互换。
-aspect 1:1
是设置生成的视频的宽度:高度
的比例。
-s 480x480
是设置生成的视频的具体分辨率。
output.mp4
就是保存的文件名称,也可以是路径。
示例2:
ffmpeg -f avfoundation -i "0" -target pal-vcd output.mp4
命令解释:
-f avfoundation
表明是在macOS中的avfoundation
设备。
-i "0"
表示捕获摄像头的数据。
-target pal-vcd
表示生成pal
标准的VCD
能够播放的视频文件。target
就是表示要生成某种标准的VCD
、DVD
等能够播放的视频。
ffmpeg -f avfoundation -i "1" -vcodec libx264 -preset ultrafast -acodec libfaac -f flv rtmp://localhost:1935/stream/fpliu
命令解释:
-f avfoundation
表明是在macOS中的avfoundation
设备。
-i "1"
表示捕获显示器的数据。
-vcodec libx264
表示视频使用x264进行编码,这是软编码。
-preset
是x264的参数, 其值可以是fast/faster/verfast/superfast/ultrafast
。-preset ultrafast
这样设置之后,延迟比较低,但是图像质量可能会比较差。
-acodec libfaac
表示音频使用libfaac进行编码,这是软编码。
-f flv
表示输出的视频的封装格式是FLV。
rtmp://localhost:1935/stream/fpliu
这是推流地址。
ffmpeg -f avfoundation -i "1:0" -vcodec libx264 -preset ultrafast -acodec libmp3lame -ar 44100 -ac 1 -f flv rtmp://localhost:1935/stream/fpliu
命令解释:
-f avfoundation
表明是在macOS中的avfoundation
设备。
-i "1:0"
表示捕获显示器和麦克风的数据。
-vcodec libx264
表示视频使用x264进行编码,这是软编码。
-preset
是x264的参数, 其值可以是fast/faster/verfast/superfast/ultrafast
。-preset ultrafast
这样设置之后,延迟比较低,但是图像质量可能会比较差。
-acodec libmp3lame
表示音频使用lame进行编码,这是软编码。
-ar 44100
表示音频采样率是44.1kHz
。
-ac 1
表示音频的通道数量是1
,也就是单声道。
rtmp://localhost:1935/stream/fpliu
这是推流地址。
ffmpeg -f avfoundation -framerate 30 -i "1:0" \
-f avfoundation -framerate 30 -video_size 640x480 -i "0" \
-c:v libx264 -preset ultrafast \
-filter_complex 'overlay=main_w-overlay_w-10:main_h-overlay_h-10' \
-acodec libmp3lame -ar 44100 -ac 1 -f flv \
rtmp://localhost:1935/stream/fpliu
命令解释:
-f avfoundation
表明是在macOS中的avfoundation
设备。
-i "1:0"
表示捕获显示器和麦克风的数据。
-vcodec libx264
表示视频使用x264进行编码,这是软编码。
-preset
是x264的参数, 其值可以是fast/faster/verfast/superfast/ultrafast
。-preset ultrafast
这样设置之后,延迟比较低,但是图像质量可能会比较差。
-acodec libmp3lame
表示音频使用lame进行编码,这是软编码。
-ar 44100
表示音频采样率是44.1kHz
。
-ac 1
表示音频的通道数量是1
,也就是单声道。
rtmp://localhost:1935/stream/fpliu
这是推流地址。
对游戏机的画面进行直播、对摄像机拍摄的数据进行现场直播,都需要借助视频采集卡,视频采集卡对于电脑来说,就是一种输入设备。
示例:
ffmpeg -re -i input.mp4 -vcodec copy -acodec copy -f flv -y rtmp://localhost:1935/stream/fpliu
命令解释:
-re
表示按照帧率发送,否则会一股脑地按最高的效率发送数据。
-i input.mp4
表示指定输入文件。
-vcodec copy
表示视频流的视频编码格式与-i input.mp4
指定的输入文件中的视频编码一样。
-acodec copy
表示视频流的音频编码格式与-i input.mp4
指定的输入文件中的音频编码一样。
-f flv
表示视频流使用FLV封包格式。
-y
表示覆盖流,如果已经存在的话。
rtmp://localhost:1935/stream/fpliu
是推流地址。
示例1 - 把RTMP流保存成文件:
ffmpeg -i rtmp://58.200.131.2:1935/livetv/hunantv -vcodec h264 -acodec aac -ac 2 -f mp4 output.mp4
命令解释:
-i rtmp://58.200.131.2:1935/livetv/hunantv
是指定流地址。
-vcodec h264
表示生成的视频文件中的视频采用H.264编码。
acodec aac
表示生成的视频文件中的音频采用AAC编码。
-f mp4
表示生成的视频文件使用MP4封包格式。
-ac 2
表示音频的通道数量是2
,也就是双声道。
output.mp4
是生成的视频文件的路径。
示例:
ffmpeg -i rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov -rtsp_transport tcp -vcodec h264 -acodec aac -f flv rtmp://localhost:1935/stream/fpliu
示例:
ffmpeg -i input.avi -b:v 640k output.ts
示例:
ffmpeg -i input.flv output.mp4
示例:
ffmpeg -i input.mp4 -an output.mp4
命令解释:
-i input.mp4
是指定输入文件。
-an
是no audio
的意思,就是不包含音频。
示例:
ffmpeg -i input.mp4 -vn output.mp4
命令解释:
-i input.mp4
是指定输入文件。
-vn
是no video
的意思,就是不包含视频。
一个视频文件中可以包含视频流
和音频流
,可以分别对他们设置比特率。
设置视频中视频流
的比特率使用-b:v VALUE
或者-b VALUE
设置视频中音频流
的比特率使用-b:a VALUE
或者-ab VALUE
VALUE
的单位是bit/s
。
示例:
ffmpeg -i input.mp4 -b:v 2000k output.mp4
ffmpeg -i input.mp3 -b:a 96 output.mp3
示例:
ffmpeg -i input.mp4 -f image2 -ss 5 -t 0.01 -s 480x320 test.jpg
命令解释:
-i input.mp4
是指定输入文件。
-f image2
是指定输入的图片文件的格式。
-ss 5
表示定位到指定的时间,单位是秒,本例子中表示是从第5秒处截图。-ss VALUE
后面也可以跟[-]hh:mm:ss[.xxx]
格式化的时间。
-t 0.01
表示采样时间。
-s 480x320
是指定输出的图片的分辨率(宽度x高度)。
示例:
ffmpeg -i input.mp4 -strict -2 -c:v libx264 -c:a aac -f hls output.m3u8
命令解释:
-i input.mp4
是指定输入文件。
-strict -2
是指定跟标准的严格性。
-c:v libx264
是指定输出视频中的视频流的编码格式为H.264。
-c:a aac
是指定输出视频中的音频流的编码格式为AAC。
-f hls
是指定输出格式。
示例:
ffmpeg -threads 2 -y -r 10 -i image%04d.jpg -i audio.mp3 -absf aac_adtstoasc output.mp4
命令解释:
-threads 2
是指以两个线程进行运行,加快处理的速度。
-y
是指对输出文件进行覆盖,如果存在的话。
-r 10
是设置帧率为10帧/秒。
-i image%04d.jpg
是指定输入的图片文件的名称以image
开头,随后是4位阿拉伯数字,后缀名是.jpg
。
-i audio.mp3
是指定音频流。
-absf aac_adtstoasc
将结果的音频格式转为AAC格式时需要这个选项。 将音频格式转为AAC是因为在iPhone上某些音频格式的视频无法播放,例如mp3,但AAC格式的音频的视频在iPhone上可以播放。-absf
的意思是设置一个Bitstream filter
进行某些转换。 可以用ffmpeg -bsfs
查看所有支持的Bitstream filter
。