6 例子
6.1 视频和音频抓取
如果您指定输入格式和设备,则ffmpeg可以直接抓取视频和音频。
- ffmpeg -f oss -i /dev/dsp -f video4linux2 -i /dev/video0 /tmp/out.mpg
或者使用ALSA音频源(单声道输入,卡ID为1)而不是OSS:
- ffmpeg -f alsa -ac 1 -i hw:1 -f video4linux2 -i /dev/video0 /tmp/out.mpg
请注意,您必须启动正确的视频源和频道才能与任何电视观众(例如Gerd Knorr的 xawtv )启动ffmpeg。 您还必须使用标准调音台正确设置音频记录级别。
6.2 X11 抓取
通过ffmpeg抓取X11显示屏
- ffmpeg -f x11grab -video_size cif -framerate 25 -i :0.0 /tmp/out.mpg
0.0是您的X11服务器的display.screen编号,与DISPLAY环境变量相同。
- ffmpeg -f x11grab -video_size cif -framerate 25 -i :0.0+10,20 /tmp/out.mpg
0.0是您的X11服务器的display.screen编号,与DISPLAY环境变量相同。 10是抓取的x偏移量和20的y偏移量。
6.3 视频和音频文件格式转换
任何支持的文件格式和协议都可以作为ffmpeg的输入:
例子:
您可以使用YUV文件作为输入:
- ffmpeg -i /tmp/test%d.Y /tmp/out.mpg
它将使用这些文件:
- /tmp/test0.Y, /tmp/test0.U, /tmp/test0.V,
- /tmp/test1.Y, /tmp/test1.U, /tmp/test1.V, etc...
Y文件使用两倍的U和V文件的分辨率。 它们是原始文件,没有标题。 它们可以由所有体面的视频解码器生成。 如果ffmpeg无法猜测它,则必须使用 -s 选项指定图像的大小。
您可以从原始YUV420P文件输入:
- ffmpeg -i /tmp/test.yuv /tmp/out.avi
test.yuv是一个包含原始YUV平面数据的文件。 每个帧由Y平面组成,后面是垂直和水平分辨率为半的U和V平面。
您可以输出到一个原始的YUV420P文件:
- ffmpeg -i mydivx.avi hugefile.yuv
您可以设置多个输入文件和输出文件:
- ffmpeg -i /tmp/a.wav -s 640x480 -i /tmp/a.yuv /tmp/a.mpg
将音频文件a.wav和原始YUV视频文件a.yuv转换为MPEG文件a.mpg。
您也可以同时进行音频和视频转换:
- ffmpeg -i /tmp/a.wav -ar 22050 /tmp/a.mp2
以22050 Hz采样率将a.wav转换为MPEG音频。
您可以同时编码为多种格式,并定义从输入流到输出流的映射:
- ffmpeg -i /tmp/a.wav -map 0:a -b:a 64k /tmp/a.mp2 -map 0:a -b:a 128k /tmp/b.mp2
将64位的a.wav转换为128位的b.mp2。 '-map file:index'按照输出流定义的顺序指定哪个输入流用于每个输出流。
您可以转码解密的VOB:
- ffmpeg -i snatch_1.vob -f avi -c:v mpeg4 -b:v 800k -g 300 -bf 2 -c:a libmp3lame -b:a 128k snatch.avi
这是一个典型的DVD翻录示例; 输入是一个VOB文件,输出一个带有MPEG-4视频和MP3音频的AVI文件。 请注意,在此命令中,我们使用B帧,因此MPEG-4流与DivX5兼容,并且GOP大小为300,这意味着对于29.97fps的输入视频,每10秒钟一帧内帧。 此外,音频流是MP3编码的,因此您需要通过传递
- enable-libmp3lame
来启用LAME支持。 该映射对于DVD转码来获得所需的音频语言特别有用。注:要查看支持的输入格式,请使用
ffmpeg -demuxers
。您可以从视频中提取图像,或从多个图像创建视频:
为了从视频中提取图片:
- ffmpeg -i foo.avi -r 1 -s WxH -f image2 foo-%03d.jpeg
这将从视频中每秒提取一个视频帧,并将它们输出到名为 foo-001.jpeg , foo-002.jpeg 等文件中。图像将被重新缩放 以适应新的WxH值。
如果只想提取有限数量的帧,可以将上述命令与
-frames:v
或-t
选项结合使用, ss从某个时间点开始提取。用于从许多图像创建视频:
- ffmpeg -f image2 -framerate 12 -i foo-%03d.jpeg -s WxH foo.avi
语法
foo-%03d.jpeg
指定使用十进制数字 由三个用零填充的数字组成以表示序列 数。 它与C printf函数支持的语法相同,但是 只有接受正常整数的格式才是合适的。导入图像序列时,-i也支持扩展 通过选择内部通配符模式(globbing) image2特定的
-pattern_type glob
选项。例如,用于根据匹配glob模式的文件名创建视频 <代码> FOO - * JPEG:
- ffmpeg -f image2 -pattern_type glob -framerate 12 -i 'foo-*.jpeg' -s WxH foo.avi
您可以在输出中放入许多相同类型的流:
- ffmpeg -i test1.avi -i test2.avi -map 1:1 -map 1:0 -map 0:1 -map 0:0 -c copy -y test12.nut
生成的输出文件 test12.nut 将包含前四个流 从输入文件以相反的顺序。
强制CBR视频输出:
- ffmpeg -i myfile.avi -b 4000k -minrate 4000k -maxrate 4000k -bufsize 1835k out.m2v
四个选项lmin,lmax,mblmin和mblmax使用'lambda'单位, 但是你可以使用QP2LAMBDA常量来轻松地从'q'单位转换:
- ffmpeg -i src.ext -lmax 21*QP2LAMBDA dst.ext