6 例子

6.1 视频和音频抓取

如果您指定输入格式和设备,则ffmpeg可以直接抓取视频和音频。

  1. ffmpeg -f oss -i /dev/dsp -f video4linux2 -i /dev/video0 /tmp/out.mpg

或者使用ALSA音频源(单声道输入,卡ID为1)而不是OSS:

  1. 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显示屏

  1. ffmpeg -f x11grab -video_size cif -framerate 25 -i :0.0 /tmp/out.mpg

0.0是您的X11服务器的display.screen编号,与DISPLAY环境变量相同。

  1. 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文件作为输入:

    1. ffmpeg -i /tmp/test%d.Y /tmp/out.mpg

    它将使用这些文件:

    1. /tmp/test0.Y, /tmp/test0.U, /tmp/test0.V,
    2. /tmp/test1.Y, /tmp/test1.U, /tmp/test1.V, etc...

    Y文件使用两倍的U和V文件的分辨率。 它们是原始文件,没有标题。 它们可以由所有体面的视频解码器生成。 如果ffmpeg无法猜测它,则必须使用 -s 选项指定图像的大小。

  • 您可以从原始YUV420P文件输入:

    1. ffmpeg -i /tmp/test.yuv /tmp/out.avi

    test.yuv是一个包含原始YUV平面数据的文件。 每个帧由Y平面组成,后面是垂直和水平分辨率为半的U和V平面。

  • 您可以输出到一个原始的YUV420P文件:

    1. ffmpeg -i mydivx.avi hugefile.yuv
  • 您可以设置多个输入文件和输出文件:

    1. ffmpeg -i /tmp/a.wav -s 640x480 -i /tmp/a.yuv /tmp/a.mpg

    将音频文件a.wav和原始YUV视频文件a.yuv转换为MPEG文件a.mpg。

  • 您也可以同时进行音频和视频转换:

    1. ffmpeg -i /tmp/a.wav -ar 22050 /tmp/a.mp2

    以22050 Hz采样率将a.wav转换为MPEG音频。

  • 您可以同时编码为多种格式,并定义从输入流到输出流的映射:

    1. 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:

    1. 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

  • 您可以从视频中提取图像,或从多个图像创建视频:

    为了从视频中提取图片:

    1. ffmpeg -i foo.avi -r 1 -s WxH -f image2 foo-%03d.jpeg

    这将从视频中每秒提取一个视频帧,并将它们输出到名为 foo-001.jpeg foo-002.jpeg 等文件中。图像将被重新缩放 以适应新的WxH值。

    如果只想提取有限数量的帧,可以将上述命令与 -frames:v -t 选项结合使用, ss从某个时间点开始提取。

    用于从许多图像创建视频:

    1. 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:

    1. ffmpeg -f image2 -pattern_type glob -framerate 12 -i 'foo-*.jpeg' -s WxH foo.avi
  • 您可以在输出中放入许多相同类型的流:

    1. 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视频输出:

    1. ffmpeg -i myfile.avi -b 4000k -minrate 4000k -maxrate 4000k -bufsize 1835k out.m2v
  • 四个选项lmin,lmax,mblmin和mblmax使用'lambda'单位, 但是你可以使用QP2LAMBDA常量来轻松地从'q'单位转换:

    1. ffmpeg -i src.ext -lmax 21*QP2LAMBDA dst.ext