ffmpeg 的一些示例

golist 712 1

截图

ffmpeg -i "test.flv" -y -f image2 -ss 8 -t 0.001 -s 350x240 'test.jpg'

将字幕烧录到视频中

ffmpeg -i Inferna.Affairs.1.2002.Blu-Ray.720p.x264.ac3.Dualaudio.mkv -vf "ass=Inferna.Affairs.1.2002.Blu-Ray.720p.x264.ac3.Dualaudio.ass" -an -vcodec libx264 -b:v 1200k -ss 00:02:30 -t 00:00:30 -f mp4 out.mp4

需要注意的是ffmpeg目前不支持UTF16LE编码需要先将编码转换成UTF8

使用ts分割mp4

ffmpeg -i input.mp4 -c copy -bsf:v h264_mp4toannexb -ss 00:00:00 -t 00:10:00 -f mpegts output.ts

dump rtmp直播流

ffmpeg -i "rtmp://122.228.236.79/live/8 live=1" -c copy -f flv dump.flv

将多个ts合并到mp4

ffmpeg -i "concat:input1.ts|input2.ts" -c copy -bsf:a aac_adtstoasc -movflags +faststart -f mp4 output.mp4

-movflags +faststart
这两个参数好像是在线播放时能自由拖动用的。

合并到mkv

假设video.avi有一个视频轨、两个音频轨,取其中的视频轨和第二个音频轨加sub.ass做成video.mkv而不重新编码:

ffmpeg -i video.avi -i sub.ass -map 0:0 -map 0:2 -map 1 -c:a copy -c:v copy -c:s copy video.mkv

如果要重新编码(字幕合成到视频图像):

ffmpeg -i video.avi -map 0:0 -map 0:2 -c:a copy -c:v <视频编码库,比如libx264> -vf ass=sub.ass video.mkv

编码 he_v2 的aac

ffmpeg -i source.wav -c:audio libfdk_aac -profile:a aac_he_v2 -ab 48k output.m4a

编码成720P的PSV支持格式

ffmpeg -i 铁甲衣.Ironclad.2011.1080p.BluRay.DTS.x264-CnSCG.mkv -metadata title="test" -c:v libx264 -vf "scale=1280:720" -b:v 2000k -profile:v main -level:v 3.1 -c:a libfdk_aac -ac 2 -b:a 160k -t 00:00:30 -f mp4 test.mp4

图片合成视频

ffmpeg -r 2 -i %02d.JPG -c:v libx264 -vf "scale=1280:720" -b:v 20000k -an -f mp4 out.mp4
该主题到 2016-03-11 16:18:08 共 1 条回复
g
golist #

参数说明
-i
输入文件,可以多个
-vf
滤镜,可以用 -vf “ass=[ass字幕文件]” 来加载
使用FFmpeg给视频增加黑边需要用到 pad 这个滤镜,具体用法如下:
-vf pad=1280:720:0:93:black
按照从左到右的顺序依次为“宽”、“高”、“X坐标”和“Y坐标”,宽和高指的是输入视频尺寸(包含加黑边的尺寸),XY指的是视频所在位置。
比如一个输入视频尺寸是1280x534的源,想要加上黑边变成1280x720,那么用上边的语法可以实现,93是这样得来的,(720-534)/2。
如果视频原始1920x800的话,完整的语法应该是:
-vf ‘scale=1280:534,pad=1280:720:0:93:black’
先将视频缩小到1280x534,然后在加入黑边变成1280x720,将1280x534的视频放置在x=0,y=93的地方,FFmpeg会自动在上下增加93像素的黑边。
注:black可以不写,默认是黑色。
-vf ‘crop=1920:1080:0:0’
这个是用来裁剪视频大小的,比如录像1080i出来成1088像素,底下有8个黑的像素就可以用这命令去掉。
-vcodec or -c:v
视频编码器
-vcodec copy : 复制视频流
-vcodec libx264 : 使用 x264 编码
-vcodec mpeg2video : 使用 mpeg2 编码
-vn : 不复制视频
-b:v : 指定视频码率 (1200k)
-qp:v
-qp:v <数值>
视频质量参数,以<数值>质量为基础的VBR,取值0.01-255,约小质量越好,据说这个压出来的片子每帧的质量是相对恒定的,会浪费一些码率在不必要的地方。
-crf:v
-crf:v <数值>
跟 -qp 比较类似,区别在于某些动态场景之类的地方会适当的在一些不必要的场景里面减少一些码率。比较适合人类观看。
-acodec or -c:a
音频编辑器
-acodec copy : 复制音频流
-acodec aac : 使用aac编码
-an : 不复制音频
-b:a : 指定音频码率 (120k)
需要加上 -strict -2 参数,暂时不知道为什么
关于几种编码器
libmp3lame: mp3的编码器,在编码mp3格式的时候就使用它了。
libvo_aacenc: aac编码器
libfaac: 这个有abr模式,编码出来的aac-lc比较小,适合对空间要求比较高,音质也有一定要求的
aac: 这个是ffmpeg内置的,效果说不上来
libfdk_aac: 这个效果相当好,可以编码lc,he,he_v2, 支持cbr,vbr,abr。abr模式兼容性不太好。
For AAC-LC the likely answer is: libfdk_aac > libfaac > Native FFmpeg AAC encoder (aac) > libvo_aacenc.
-ac
这个是用来指定声道数的,比如在psv里面是不支持5.1声道的,需要用这个参数把音频改成2的。
-ss
设置启始时间 -ss 00:01:00
这个设置在-i前面跟后面是有区别的,在后面表示的是针对输出文件的时间设置,在前面是针对输入文件的,而且有几个输入文件就要写几个对应的-ss。-ss设置在前面,它的速度会非常快,不用等待很久才能开始,但有个缺点,就是字幕无法跟着时间轴。
如果想让字幕也跟前置-ss对上号,可以考虑用Aegisub这个软件把字幕的时间整体调整一下,向前平衡跟-ss一样的时间就可以了。
还有如果用了-ss的话,最好把音频部分分开来压缩,因为我发现有时候处理5.1的dts会有点问题,具体原因还不清楚。
-t
设置持续时间 -t 00:00:30 跟 -ss 配合使用
-s
更改分辨率 640x480
-f
mp4:
mkv:
image2: 这个是输出成图片的,比如jpg
mpegts: 输出成ts文件,可以用来合并
指定输出格式
-map
用于选择轨道,比如 -map 0:0 这样就是选择第一个输入文件的第一条轨道。
-profile
用来选择编码器的配置。
-profile:a 音频配置,如果是libfdk_aac 则可以是aac_he_v2,aac_he, aac_lc。
-profile:v 视频配置
-level
设置h.264的level等级,iphone的要3.1以下。
-bsf
视频流滤镜,目前只知道合并和处理ts流的时候会用到。
h264_mp4toannexb: 大概是用于将mp4转成ts时把h.264处理成ts流吧
aac_adtstoasc: 大概是合并ts文件时处理音频部分
-re
按照电影的播放速度来输出

登录发表评论