ffmpeg 常用命令汇总

part 1:

经常用到ffmpeg 做一些视频数据的处理转换等,用来做测试,今天总结了一下,参考了网上部分朋友的经验,一起在这里汇总了一下,有需要的朋友可以收藏测试一下,有问题欢迎在下面回帖交流,谢谢;by ternence.hsu)

1、ffmpeg使用语法

命令格式:
    ffmpeg -i [输入文件名] [参数选项] -f [格式] [输出文件]
    ffmpeg [[options][`-i' input_file]]... {[options] output_file}...
    1、参数选项:
    (1) -an: 去掉音频
    (2) -acodec: 音频选项, 一般后面加copy表示拷贝
    (3) -vcodec:视频选项,一般后面加copy表示拷贝
    2、格式:
    (1) h264: 表示输出的是h264的视频裸流
    (2) mp4: 表示输出的是mp4的视频
    (3)mpegts: 表示ts视频流
    如果没有输入文件,那么视音频捕捉(只在Linux下有效,因为Linux下把音视频设备当作文件句柄来处理)就会起作用。作为通用的规则,选项一般用于下一个特定的文件。如果你给 –b 64选项,改选会设置下一个视频速率。对于原始输入文件,格式选项可能是需要的。缺省情况下,ffmpeg试图尽可能的无损转换,采用与输入同样的音频视频参数来输出。(by ternence.hsu)



2、视频转换

H264视频转ts视频流

ffmpeg -i test.h264 -vcodec copy -f mpegts test.ts



H264视频转mp4

ffmpeg -i test.h264 -vcodec copy -f mp4 test.mp4



ts视频转mp4

ffmpeg -i test.ts -acodec copy -vcodec copy -f mp4 test.mp4
mp4视频转flv
ffmpeg -i test.mp4 -acodec copy -vcodec copy -f flv test.flv 


转换文件为3GP格式 

ffmpeg -y -i test.mpeg -bitexact -vcodec h263 -b 128 -r 15 -s 176x144 -acodec aac -ac 2 -ar 22500 -ab 24 -f 3gp test.3gp



转换文件为3GP格式 v2

ffmpeg -y -i test.wmv -ac 1 -acodec libamr_nb -ar 8000 -ab 12200 -s 176x144 -b 128 -r 15 test.3gp



使用 ffmpeg 编码得到高质量的视频

ffmpeg.exe -i "D:\Video\Fearless\Fearless.avi" -target film-dvd -s 720x352 -padtop 64 -padbottom 64 -maxrate 7350000 -b 3700000 -sc_threshold 1000000000 -trellis -cgop -g 12 -bf 2 -qblur 0.3 -qcomp 0.7 -me full -dc 10 -mbd 2 -aspect 16:9 -pass 2 -passlogfile "D:\Video\ffmpegencode" -an -f mpeg2video "D:\Fearless.m2v"



转换指定格式文件到FLV格式

ffmpeg.exe -i test.mp3 -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:\test.flv 
ffmpeg.exe -i test.wmv -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:\test.flv



转码解密的VOB

ffmpeg -i snatch_1.vob -f avi -vcodec mpeg4 -b 800 -g 300 -bf 2 -acodec mp3 -ab 128 snatch.avi

(上面的命令行将vob的文件转化成avi文件,mpeg4的视频和mp3的音频。注意命令中使用了B帧,所以mpeg4流是divx5兼容的。GOP大小是300意味着29.97帧频下每10秒就有INTRA帧。该映射在音频语言的DVD转码时候尤其有用,同时编码到几种格式并且在输入流和输出流之间建立映射)


转换文件为3GP格式

ffmpeg -i test.avi -y -b 20 -s sqcif -r 10 -acodec amr_wb -ab 23.85 -ac 1 -ar 16000 test.3gp

(如果要转换为3GP格式,则ffmpeg在编译时必须加上–enable-amr_nb –enable-amr_wb,详细内容可参考:转换视频为3GPP格式)


转换文件为MP4格式(支持iPhone/iTouch)

ffmpeg  -y  -i input.wmv  -f mp4 -async 1-s 480x320  -acodec libfaac -vcodec libxvid  -qscale 7 -dts_delta_threshold 1 output.mp4
ffmpeg  -y  -i source_video.avi input -acodec libfaac -ab 128000 -vcodec mpeg4 -b 1200000 -mbd 2 -flags +4mv+trell -aic 2 -cmp 2 -subcmp 2 -s 320x180 -title X final_video.mp4



将一段音频与一段视频混合

ffmpeg -i son.wav -i video_origine.avi video_finale.mpg



将一段视频转换为DVD格式

ffmpeg -i source_video.avi -target pal-dvd -ps 2000000000 -aspect 16:9 finale_video.mpeg

(target pal-dvd : Output format ps 2000000000 maximum size for the output file, in bits (here, 2 Gb) aspect 16:9 : Widescreen)


转换一段视频为DivX格式

ffmpeg -i video_origine.avi -s 320x240 -vcodec msmpeg4v2 video_finale.avi



Turn X images to a video sequence

ffmpeg -f image2 -i image%d.jpg video.mpg

(This command will transform all the images from the current directory (named image1.jpg, image2.jpg, etc...) to a video file named video.mpg.)


Turn a video to X images

ffmpeg -i video.mpg image%d.jpg

(This command will generate the files named image1.jpg, image2.jpg, ... ;The following image formats are also availables : PGM, PPM, PAM, PGMYUV, JPEG, GIF, PNG, TIFF, SGI.)


使用ffmpeg录像屏幕(仅限Linux平台)

ffmpeg -vcodec mpeg4 -b 1000 -r 10 -g 300 -vd x11:0,0 -s 1024x768 ~/test.avi

(-vd x11:0,0 指录制所使用的偏移为 x=0 和 y=0,-s 1024×768 指录制视频的大小为 1024×768。录制的视频文件为 test.avi,将保存到用户主目录中;如果你只想录制一个应用程序窗口或者桌面上的一个固定区域,那么可以指定偏移位置和区域大小。使用xwininfo -frame命令可以完成查找上述参数。)


重新调整视频尺寸大小(仅限Linux平台)

ffmpeg -vcodec mpeg4 -b 1000 -r 10 -g 300 -i ~/test.avi -s 800×600 ~/test-800-600.avi



把摄像头的实时视频录制下来,存储为文件(仅限Linux平台)

ffmpeg  -f video4linux -s 320*240 -r 10 -i /dev/video0 test.asf



使用ffmpeg压制H.264视频

ffmpeg -threads 4 -i INPUT -r 29.97 -vcodec libx264 -s 480x272 -flags +loop -cmp chroma -deblockalpha 0 -deblockbeta 0 -crf 24 -bt 256k -refs 1 -coder 0 -me umh -me_range 16 -subq 5 -partitions parti4x4+parti8x8+partp8x8 -g 250 -keyint_min 25 -level 30 -qmin 10 -qmax 51 -trellis 2 -sc_threshold 40 -i_qfactor 0.71 -acodec libfaac -ab 128k -ar 48000 -ac 2 OUTPUT

(使用该指令可以压缩出比较清晰,而且文件转小的H.264视频文件)


3、网络推送

udp视频流的推送
ffmpeg -re  -i 1.ts  -c copy -f mpegts   udp://192.168.0.106:1234
 


4、视频拼接

裸码流的拼接,先拼接裸码流,再做容器的封装
ffmpeg -i "concat:test1.h264|test2.h264" -vcodec copy -f h264 out12.h264
 


5、图像相关

截取一张352x240尺寸大小的,格式为jpg的图片 

ffmpeg -i test.asf -y -f image2 -t 0.001 -s 352x240 a.jpg



把视频的前30帧转换成一个Animated Gif 

ffmpeg -i test.asf -vframes 30 -y -f gif a.gif



截取指定时间的缩微图,-ss后跟的时间单位为秒 

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


6、音频处理
 

 

转换wav到mp2格式

ffmpeg -i /tmp/a.wav -ab 64 /tmp/a.mp2 -ab 128 /tmp/b.mp2 -map 0:0 -map 0:0

(上面的命令行转换一个64Kbits 的a.wav到128kbits的a.mp2 ‘-map file:index’在输出流的顺序上定义了哪一路输入流是用于每一个输出流的。)

 

 

 

7、切割ts分片

ffmpeg -i input.mp4 -c:v libx264 -c:a aac -strict -2 -f hls -hls_list_size 6 -hls_time 5 output1.m3u8

 

============================================================================

part 2:

 

 

一、ffmpeg命令详解

ffmpeg非常强大,轻松几条命令就可以完成你的工作。

把darkdoor.[001-100].jpg序列帧和001.mp3音频文件利用mpeg4编码方式合成视频文件darkdoor.avi:
$ ffmpeg -i 001.mp3 -i darkdoor.%3d.jpg -s 1024x768 -author skypp -vcodec mpeg4 darkdoor.avi

ffmpeg还支持mov格式:
$ ffmpeg -i darkdoor.%3d.jpg darkdoor.mov

要查看你的ffmpeg支持哪些格式,可以用如下命令:
$ ffmpeg -formats | less

还可以把视频文件导出成jpg序列帧:
$ ffmpeg -i bc-cinematic-en.avi example.%d.jpg

debian下安装ffmpeg很简单:
#apt-get install ffmpeg

######################################

下面是转来的使用说明,慢慢研究吧,嘿嘿

######################################
 

ffmpeg使用语法

ffmpeg使用语法:

ffmpeg [[options][`-i' input_file]]... {[options] output_file}...

如果没有输入文件,那么视音频捕捉就会起作用。

作为通用的规则,选项一般用于下一个特定的文件。如果你给 –b 64选项,改选会设置下一个视频速率。对于原始输入文件,格式选项可能是需要的。

缺省情况下,ffmpeg试图尽可能的无损转换,采用与输入同样的音频视频参数来输出。

3.选项

a) 通用选项

-L license

-h 帮助

-fromats 显示可用的格式,编解码的,协议的。。。

-f fmt 强迫采用格式fmt

-I filename 输入文件

-y 覆盖输出文件

-t duration 设置纪录时间 hh:mm:ss[.xxx]格式的记录时间也支持

-ss position 搜索到指定的时间 [-]hh:mm:ss[.xxx]的格式也支持

-title string 设置标题

-author string 设置作者

-copyright string 设置版权

-comment string 设置评论

-target type 设置目标文件类型(vcd,svcd,dvd) 所有的格式选项(比特率,编解码以及缓冲区大小)自动设置,只需要输入如下的就可以了:
ffmpeg -i myfile.avi -target vcd /tmp/vcd.mpg

-hq 激活高质量设置

-itsoffset offset 设置以秒为基准的时间偏移,该选项影响所有后面的输入文件。该偏移被加到输入文件的时戳,定义一个正偏移意味着相应的流被延迟了 offset秒。 [-]hh:mm:ss[.xxx]的格式也支持

b) 视频选项

-b bitrate 设置比特率,缺省200kb/s

-r fps 设置帧频 缺省25

-s size 设置帧大小 格式为WXH 缺省160X128.下面的简写也可以直接使用:
Sqcif 128X96 qcif 176X144 cif 252X288 4cif 704X576

-aspect aspect 设置横纵比 4:3 16:9 或 1.3333 1.7777

-croptop size 设置顶部切除带大小 像素单位

-cropbottom size –cropleft size –cropright size

-padtop size 设置顶部补齐的大小 像素单位

-padbottom size –padleft size –padright size –padcolor color 设置补齐条颜色(hex,6个16进制的数,红:绿:兰排列,比如 000000代表黑色)

-vn 不做视频记录

-bt tolerance 设置视频码率容忍度kbit/s

-maxrate bitrate设置最大视频码率容忍度

-minrate bitreate 设置最小视频码率容忍度

-bufsize size 设置码率控制缓冲区大小

-vcodec codec 强制使用codec编解码方式。如果用copy表示原始编解码数据必须被拷贝。

-sameq 使用同样视频质量作为源(VBR)

-pass n 选择处理遍数(1或者2)。两遍编码非常有用。第一遍生成统计信息,第二遍生成精确的请求的码率

-passlogfile file 选择两遍的纪录文件名为file


c)高级视频选项

-g gop_size 设置图像组大小

-intra 仅适用帧内编码

-qscale q 使用固定的视频量化标度(VBR)

-qmin q 最小视频量化标度(VBR)

-qmax q 最大视频量化标度(VBR)

-qdiff q 量化标度间最大偏差 (VBR)

-qblur blur 视频量化标度柔化(VBR)

-qcomp compression 视频量化标度压缩(VBR)

-rc_init_cplx complexity 一遍编码的初始复杂度

-b_qfactor factor 在p和b帧间的qp因子

-i_qfactor factor 在p和i帧间的qp因子

-b_qoffset offset 在p和b帧间的qp偏差

-i_qoffset offset 在p和i帧间的qp偏差

-rc_eq equation 设置码率控制方程 默认tex^qComp

-rc_override override 特定间隔下的速率控制重载

-me method 设置运动估计的方法 可用方法有 zero phods log x1 epzs(缺省) full

-dct_algo algo 设置dct的算法 可用的有 0 FF_DCT_AUTO 缺省的DCT 1 FF_DCT_FASTINT 2 FF_DCT_INT 3 FF_DCT_MMX 4 FF_DCT_MLIB 5 FF_DCT_ALTIVEC

-idct_algo algo 设置idct算法。可用的有 0 FF_IDCT_AUTO 缺省的IDCT 1 FF_IDCT_INT 2 FF_IDCT_SIMPLE 3 FF_IDCT_SIMPLEMMX 4 FF_IDCT_LIBMPEG2MMX 5 FF_IDCT_PS2 6 FF_IDCT_MLIB 7 FF_IDCT_ARM 8 FF_IDCT_ALTIVEC 9 FF_IDCT_SH4 10 FF_IDCT_SIMPLEARM

-er n 设置错误残留为n 1 FF_ER_CAREFULL 缺省 2 FF_ER_COMPLIANT 3 FF_ER_AGGRESSIVE 4 FF_ER_VERY_AGGRESSIVE

-ec bit_mask 设置错误掩蔽为bit_mask,该值为如下值的位掩码 1 FF_EC_GUESS_MVS (default=enabled) 2 FF_EC_DEBLOCK (default=enabled)

-bf frames 使用frames B 帧,支持mpeg1,mpeg2,mpeg4

-mbd mode 宏块决策 0 FF_MB_DECISION_SIMPLE 使用mb_cmp 1 FF_MB_DECISION_BITS 2 FF_MB_DECISION_RD

-4mv 使用4个运动矢量 仅用于mpeg4

-part 使用数据划分 仅用于mpeg4

-bug param 绕过没有被自动监测到编码器的问题

-strict strictness 跟标准的严格性

-aic 使能高级帧内编码 h263+

-umv 使能无限运动矢量 h263+

-deinterlace 不采用交织方法

-interlace 强迫交织法编码仅对mpeg2和mpeg4有效。当你的输入是交织的并且你想要保持交织以最小图像损失的时候采用该选项。可选的方法是不交织,但是损失更大

-psnr 计算压缩帧的psnr

-vstats 输出视频编码统计到vstats_hhmmss.log

-vhook module 插入视频处理模块 module 包括了模块名和参数,用空格分开

D)音频选项

-ab bitrate 设置音频码率

-ar freq 设置音频采样率

-ac channels 设置通道 缺省为1

-an 不使能音频纪录

-acodec codec 使用codec编解码

E)音频/视频捕获选项

-vd device 设置视频捕获设备。比如/dev/video0

-vc channel 设置视频捕获通道 DV1394专用

-tvstd standard 设置电视标准 NTSC PAL(SECAM)

-dv1394 设置DV1394捕获

-av device 设置音频设备 比如/dev/dsp


F)高级选项

-map file:stream 设置输入流映射

-debug 打印特定调试信息

-benchmark 为基准测试加入时间

-hex 倾倒每一个输入包

-bitexact 仅使用位精确算法 用于编解码测试

-ps size 设置包大小,以bits为单位

-re 以本地帧频读数据,主要用于模拟捕获设备

-loop 循环输入流。只工作于图像流,用于ffserver测试

二、Ffmpeg使用语法

Ffmpeg使用语法

ffmpeg [[options][`-i' input_file]]... {[options] output_file}...

如果没有输入文件,那么视音频捕捉(只在Linux下有效,因为Linux下把音视频设备当作文件句柄来处理)就会起作用。作为通用的规则,选项一 般用于下一个特定的文件。如果你给 –b 64选项,改选会设置下一个视频速率。对于原始输入文件,格式选项可能是需要的。缺省情况下,ffmpeg试图尽可能的无损转换,采用与输入同样的音频视 频参数来输出。


ffmpeg转换所涉及到的选项较多,可参考ffmpeg选项详解


ffmpeg支持多种文件格式和多种音频、视频编码器,可参考ffmepg格式详解,(附:常见视频文件格式详解

 

视频文件截图

  • 截取一张352x240尺寸大小的,格式为jpg的图片
ffmpeg -i test.asf -y -f image2 -t 0.001 -s 352x240 a.jpg
  • 把视频的前30帧转换成一个Animated Gif
ffmpeg -i test.asf -vframes 30 -y -f gif a.gif
  • 截取指定时间的缩微图
ffmpeg -i test.avi -y -f image2 -ss 8 -t 0.001 -s 350x240 test.jpg

-ss后跟的时间单位为秒

  • 转换文件为3GP格式
ffmpeg -y -i test.mpeg -bitexact -vcodec h263 -b 128 -r 15 -s 176x144 
 -acodec aac -ac 2 -ar 22500 -ab 24 -f 3gp test.3gp

ffmpeg -y -i test.wmv -ac 1 -acodec libamr_nb -ar 8000 -ab 12200 -s 176x144 -b 128 -r 15 test.3gp

 

视频格式转换

  • 如何使用 ffmpeg 编码得到高质量的视频
ffmpeg.exe -i "D:\Video\Fearless\Fearless.avi" -target film-dvd -s 720x352
 -padtop 64 -padbottom 64 -maxrate 7350000 -b 3700000 -sc_threshold 1000000000 
 -trellis -cgop -g 12 -bf 2 -qblur 0.3 -qcomp 0.7 -me full -dc 10 -mbd 2
 -aspect 16:9 -pass 2 -passlogfile "D:\Video\ffmpegencode" -an -f mpeg2video "D:\Fearless.m2v"
  • 转换指定格式文件到FLV格式
ffmpeg.exe -i test.mp3 -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:\test.flv 
ffmpeg.exe -i test.wmv -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:\test.flv
  • 转码解密的VOB
ffmpeg -i snatch_1.vob -f avi -vcodec mpeg4 -b 800 -g 300 -bf 2 -acodec mp3 -ab 128 snatch.avi

上面的命令行将vob的文件转化成avi文件,mpeg4的视频和mp3的音频。注意命令中使用了B帧,所以mpeg4流是divx5兼容的。GOP大小是300意味着29.97帧频下每10秒就有INTRA帧。该映射在音频语言的DVD转码时候尤其有用。

  • 同时编码到几种格式并且在输入流和输出流之间建立映射
ffmpeg -i /tmp/a.wav -ab 64 /tmp/a.mp2 -ab 128 /tmp/b.mp2 -map 0:0 -map 0:0

上面的命令行转换一个64Kbits 的a.wav到128kbits的a.mp2 ‘-map file:index’在输出流的顺序上定义了哪一路输入流是用于每一个输出流的。

  • 转换文件为3GP格式
ffmpeg -i test.avi -y -b 20 -s sqcif -r 10 -acodec amr_wb -ab 23.85 -ac 1 -ar 16000 test.3gp

注:如果要转换为3GP格式,则ffmpeg在编译时必须加上–enable-amr_nb –enable-amr_wb,详细内容可参考:转换视频为3GPP格式

 

屏幕录制

  • 使用ffmpeg录像屏幕
ffmpeg -vcodec mpeg4 -b 1000 -r 10 -g 300 -vd x11:0,0 -s 1024x768 ~/test.avi

:其中,-vd x11:0,0 指录制所使用的偏移为 x=0 和 y=0,-s 1024×768 指录制视频的大小为 1024×768。录制的视频文件为 test.avi,将保存到用户主目录中

如果你只想录制一个应用程序窗口或者桌面上的一个固定区域,那么可以指定偏移位置和区域大小。使用xwininfo -frame命令可以完成查找上述参数。

  • 重新调整视频尺寸大小
ffmpeg -vcodec mpeg4 -b 1000 -r 10 -g 300 -i ~/test.avi -s 800×600 ~/test-800-600.avi

注:ffmpeg的屏幕录制功能只能在Linux环境下有效。

 

视频采集

  • 把摄像头的实时视频录制下来,存储为文件
ffmpeg  -f video4linux -s 320*240 -r 10 -i /dev/video0  test.asf
三、ffmepg使用

各种转换例子见:
FFmpeg Howto
程序下载:
Unofficial FFmpeg Win32 Builds(需要使用代理访问)
或:
FFMPEG FULL SDK V3.0

The generic syntax is:

ffmpeg [[infile options][`-i' infile]]… {[outfile options] outfile}…

As a general rule, options are applied to the next specified file. Therefore, order is important, and you can have the same option on the command line multiple times. Each occurrence is then applied to the next input or output file.

* To set the video bitrate of the output file to 64kbit/s:

ffmpeg -i input.avi -b 64k output.avi

* To force the frame rate of the input and output file to 24 fps:

ffmpeg -r 24 -i input.avi output.avi

* To force the frame rate of the output file to 24 fps:

ffmpeg -i input.avi -r 24 output.avi

* To force the frame rate of input file to 1 fps and the output file to 24 fps:

ffmpeg -r 1 -i input.avi -r 24 output.avi

The format option may be needed for raw input files.

By default, FFmpeg tries to convert as losslessly as possible: It uses the same audio and video parameters for the outputs as the one specified for the inputs.

转换文件为3GP格式
ffmpeg -y -i test.mpeg -bitexact -vcodec h263 -b 128 -r 15 -s 176x144 -acodec aac -ac 2 -ar 22500 -ab 24 -f 3gp test.3gp

ffmpeg -y -i test.mpeg -ac 1 -acodec amr_nb -ar 8000 -s 176x144 -b 128 -r 15 test.3gp

转换指定格式文件到FLV格式

ffmpeg.exe -i test.mp3 -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:\test.flv 
ffmpeg.exe -i test.wmv -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:\test.flv
***************************************************************************
ffmpeg -i F:\tools\ffmpeg.rev10464\test.avi -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 F:\tools\ffmpeg.rev10464\test.flv
ffmpeg -i "F:\tools\ffmpeg.rev10464\test.flv" -y -f image2 -ss 8 -t 0.001 -s 350x240 "test.jpg" 


 

 

ffmpeg.exe -i F:\闪客之家\闪客之歌.mp3 -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:\11.flv 
ffmpeg -i F:\01.wmv -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:\test.flv 
使用-ss参数 作用(time_off set the start time offset),可以从指定时间点开始转换任务。如: 
转换文件格式的同时抓缩微图: 
ffmpeg -i "test.avi" -y -f image2 -ss 8 -t 0.001 -s 350x240 'test.jpg' 
对已有flv抓图: 
ffmpeg -i "test.flv" -y -f image2 -ss 8 -t 0.001 -s 350x240 'test.jpg' 
-ss后跟的时间单位为秒 
Ffmpeg转换命令 
ffmpeg -y -i test.mpeg -bitexact -vcodec h263 -b 128 -r 15 -s 176x144 -acodec aac -ac 2 -ar 22500 
-ab 24 -f 3gp test.3gp 
或者 
ffmpeg -y -i test.mpeg -ac 1 -acodec amr_nb -ar 8000 -s 176x144 -b 128 -r 15 test.3gp 


ffmpeg参数设定解说 
-bitexact 使用标准比特率 
-vcodec xvid 使用xvid压缩 
-s 320x240 指定分辨率 
-r 29.97 桢速率(可以改,确认非标准桢率会导致音画不同步,所以只能设定为15或者29.97) 
画面部分,选其一 
-b <比特率> 指定压缩比特率,似乎ffmpeg是自动VBR的,指定了就大概是平均比特率,比如768,1500这样的 
就是原来默认项目中有的 
-qscale <数值> 以<数值>质量为基础的VBR,取值0.01-255,约小质量越好 
-qmin <数值> 设定最小质量,与-qmax(设定最大质量)共用,比如-qmin 10 -qmax 31 
-sameq 使用和源同样的质量 
声音部分 
-acodec aac 设定声音编码 
-ac <数值> 设定声道数,1就是单声道,2就是立体声,转换单声道的TVrip可以用1(节省一半容量),高品质 
的DVDrip就可以用2 
-ar <采样率> 设定声音采样率,PSP只认24000 
-ab <比特率> 设定声音比特率,前面-ac设为立体声时要以一半比特率来设置,比如192kbps的就设成96,转换 
君默认比特率都较小,要听到较高品质声音的话建议设到160kbps(80)以上 
-vol <百分比> 设定音量,某些DVDrip的AC3轨音量极小,转换时可以用这个提高音量,比如200就是原来的2倍 
这样,要得到一个高画质音质低容量的MP4的话,首先画面最好不要用固定比特率,而用VBR参数让程序自己去 
判断,而音质参数可以在原来的基础上提升一点,听起来要舒服很多,也不会太大(看情况调整 


例子:ffmpeg -y -i "1.avi" -title "Test" -vcodec xvid -s 368x208 -r 29.97 -b 1500 -acodec aac -ac 2 -ar 24000 -ab 128 -vol 200 -f psp -muxvb 768 "1.***" 

解释:以上命令可以在Dos命令行中输入,也可以创建到批处理文件中运行。不过,前提是:要在ffmpeg所在的目录中执行(转换君所在目录下面的cores子目录)。 
参数: 
-y(覆盖输出文件,即如果1.***文件已经存在的话,不经提示就覆盖掉了) 
-i "1.avi"(输入文件是和ffmpeg在同一目录下的1.avi文件,可以自己加路径,改名字) 
-title "Test"(在PSP中显示的影片的标题) 
-vcodec xvid(使用XVID编码压缩视频,不能改的) 
-s 368x208(输出的分辨率为368x208,注意片源一定要是16:9的不然会变形) 
-r 29.97(帧数,一般就用这个吧) 
-b 1500(视频数据流量,用-b xxxx的指令则使用固定码率,数字随便改,1500以上没效果;还可以用动态码率如:-qscale 4和-qscale 6,4的质量比6高) 
-acodec aac(音频编码用AAC) 
-ac 2(声道数1或2) 
-ar 24000(声音的采样频率,好像PSP只能支持24000Hz) 
-ab 128(音频数据流量,一般选择32、64、96、128) 
-vol 200(200%的音量,自己改) 
-f psp(输出psp专用格式) 
-muxvb 768(好像是给PSP机器识别的码率,一般选择384、512和768,我改成1500,PSP就说文件损坏了) 
"1.***"(输出文件名,也可以加路径改文件名) 

机器强劲的话,可以多开几个批处理文件,让它们并行处理。 
E:\ffmpeg.exe -i I:\1.wmv -b 360 -r 25 -s 320x240 -hq -deinterlace -ab 56 -ar 22050 -ac 1 D:\2.flv 
===========================================
ffmpeg.exe -i F:\闪客之家\闪客之歌.mp3 -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:\11.flv ffmpeg -i F:\01.wmv -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:\test.flv 使用-ss参数 作用(time_off set the start time offset),可以从指定时间点开始转换任务。如:
转换文件格式的同时抓缩微图:
ffmpeg -i "test.avi" -y -f image2 -ss 8 -t 0.001 -s 350x240 'test.jpg'
对已有flv抓图:
ffmpeg -i "test.flv" -y -f image2 -ss 8 -t 0.001 -s 350x240 'test.jpg'
-ss后跟的时间单位为秒 Ffmpeg转换命令
ffmpeg -y -i test.mpeg -bitexact -vcodec h263 -b 128 -r 15 -s 176x144 -acodec aac -ac 2 -ar 22500 -ab 24 -f 3gp test.3gp
或者
ffmpeg -y -i test.mpeg -ac 1 -acodec amr_nb -ar 8000 -s 176x144 -b 128 -r 15 test.3gp ffmpeg参数设定解说 
-bitexact 使用标准比特率 
-vcodec xvid 使用xvid压缩 
-s 320x240 指定分辨率 
-r 29.97 桢速率(可以改,确认非标准桢率会导致音画不同步,所以只能设定为15或者29.97) 


画面部分,选其一 
-b <比特率> 指定压缩比特率,似乎ffmpeg是自动VBR的,指定了就大概是平均比特率,比如768,1500这样的就是原来默认项目中有的 
-qscale <数值> 以<数值>质量为基础的VBR,取值0.01-255,约小质量越好 
-qmin <数值> 设定最小质量,与-qmax(设定最大质量)共用,比如-qmin 10 -qmax 31 
-sameq 使用和源同样的质量 声音部分 
-acodec aac 设定声音编码 
-ac <数值> 设定声道数,1就是单声道,2就是立体声,转换单声道的TVrip可以用1(节省一半容量),高品质的DVDrip就可以用2 
-ar <采样率> 设定声音采样率,PSP只认24000 
-ab <比特率> 设定声音比特率,前面-ac设为立体声时要以一半比特率来设置,比如192kbps的就设成96,转换君默认比特率都较小,要听到较高品质声音的话建议设到160kbps(80)以上 
-vol <百分比> 设定音量,某些DVDrip的AC3轨音量极小,转换时可以用这个提高音量,比如200就是原来的2倍 这样,要得到一个高画质音质低容量的MP4的话,首先画面最好不要用固定比特率,而用VBR参数让程序自己去判断,而音质参数可以在原来的基础上提升一点,听起来要舒服很多,也不会太大(看情况调整 例子:ffmpeg -y -i "1.avi" -title "Test" -vcodec xvid -s 368x208 -r 29.97 -b 1500 -acodec aac -ac 2 -ar 24000 -ab 128 -vol 200 -f psp -muxvb 768 "1.***"

解释:以上命令可以在Dos命令行中输入,也可以创建到批处理文件中运行。不过,前提是:要在ffmpeg所在的目录中执行(转换君所在目录下面的cores子目录)。
参数:
-y(覆盖输出文件,即如果1.***文件已经存在的话,不经提示就覆盖掉了)
-i "1.avi"(输入文件是和ffmpeg在同一目录下的1.avi文件,可以自己加路径,改名字)
-title "Test"(在PSP中显示的影片的标题)
-vcodec xvid(使用XVID编码压缩视频,不能改的)
-s 368x208(输出的分辨率为368x208,注意片源一定要是16:9的不然会变形)
-r 29.97(帧数,一般就用这个吧)
-b 1500(视频数据流量,用-b xxxx的指令则使用固定码率,数字随便改,1500以上没效果;还可以用动态码率如:-qscale 4和-qscale 6,4的质量比6高)
-acodec aac(音频编码用AAC)
-ac 2(声道数1或2)
-ar 24000(声音的采样频率,好像PSP只能支持24000Hz)
-ab 128(音频数据流量,一般选择32、64、96、128)
-vol 200(200%的音量,自己改)
-f psp(输出psp专用格式)
-muxvb 768(好像是给PSP机器识别的码率,一般选择384、512和768,我改成1500,PSP就说文件损坏了)
"1.***"(输出文件名,也可以加路径改文件名)

P.S. 版主机器强劲的话,可以多开几个批处理文件,让它们并行处理。 E:\ffmpeg.exe -i I:\1.wmv -b 360 -r 25 -s 320x240 -hq -deinterlace -ab 56 -ar 22050 -ac

============================================================================

part 3:

 

 

 

在cmd中先将目录切换到ffmpeg.exe对应的文件目录: cd D:\study\ffmpeg\ffmpeg-20160910-09317e3-win64-static\bin

注意:-命令名;前面要加ffmpeg。eg: 查看版本信息:ffmpeg -version

1. ffmpeg 是什么?

ffmpeg(命令行工具) 是一个快速的音视频转换工具。

2. ffmpeg 的使用方式

命令行: ffmpeg [全局选项] {[输入文件选项] -i ‘输入文件’} ... {[输出文件选项] ‘输出文件’} ...

3. ffmpeg 可使用的选项

3.1 通用选项

ff* 工具的通用选项是共享的。(FFplayFFprobe)

‘-L’	显示 license
‘-h, -?, -help, --help [arg]’ 打印帮助信息;可以指定一个参数 arg ,如果不指定,只打印基本选项
  可选的 arg 选项:
  ‘long’	除基本选项外,还将打印高级选项
  ‘full’	打印一个完整的选项列表,包含 encoders, decoders, demuxers, muxers, filters 等的共享以及私有选项
  ‘decoder=decoder_name’	打印名称为 “decoder_name” 的解码器的详细信息
  ‘encoder=encoder_name’	打印名称为 “encoder_name” 的编码器的详细信息
  ‘demuxer=demuxer_name’	打印名称为 “demuxer_name” 的 demuxer 的详细信息
  ‘muxer=muxer_name’		打印名称为 “muxer_name” 的 muxer 的详细信息
  ‘filter=filter_name’	  打印名称为 “filter_name” 的过滤器的详细信息
      
‘-version’	 显示版本信息
‘-formats’	 显示有效的格式
‘-codecs’	  显示 libavcodec 已知的所有编解码器
‘-decoders’	显示有效的解码器
‘-encoders’	显示有效的编码器
‘-bsfs’		显示有效的比特流过滤器
‘-protocols’   显示有效的协议
‘-filters’	 显示 libavfilter 有效的过滤器
‘-pix_fmts’	显示有效的像素格式 
‘-sample_fmts’ 显示有效的采样格式
‘-layouts’	 显示通道名称以及标准通道布局
‘-colors’	  显示认可的颜色名称
‘-hide_banner’ 禁止打印欢迎语;也就是禁止默认会显示的版权信息、编译选项以及库版本信息等

3.2 一些主要选项

 
  1. ‘-f fmt (input/output)’

  2. 强制输入或输出文件格式。通常,输入文件的格式是自动检测的,

  3. 输出文件的格式是通过文件扩展名来进行猜测的,所有该选项大

  4. 多数时候不需要。

  5. ‘-i filename (input)’

  6. 输入文件名

  7. ‘-y (global)’

  8. 覆盖输出文件而不询问

  9. ‘-n (global)’

  10. 不覆盖输出文件,如果一个给定的输出文件已经存在,则立即

  11. 退出

  12. ‘-c[:stream_specifier] codec (input/output,per-stream)’

  13. ‘-codec[:stream_specifier] codec (input/output,per-stream)’

  14. 为一个或多个流选择一个编码器(当使用在一个输出文件之前时)

  15. 或者一个解码器(当使用在一个输入文件之前时)。codec 是一个

  16. 编码器/解码器名称或者一个特定值“copy”(只适用输出)。

  17. ‘-t duration (output)’

  18. 当到达 duration 时,停止写输出。

  19. duration 可以是一个数字(秒),或者使用hh:mm:ss[.xxx]形式。

  20. -to 和 -t 是互斥的,-t 优先级更高。

  21. ‘-to position (output)’

  22. 在 position 处停止写输出。

  23. duration 可以是一个数字(秒),或者使用hh:mm:ss[.xxx]形式。

  24. -to 和 -t 是互斥的,-t 优先级更高。

  25. ‘-fs limit_size (output)’

  26. 设置文件大小限制,以字节表示

  27. ‘-ss position (input/output)’

  28. 当作为输入选项时(在 -i 之前),在输入文件中跳转到 position。

  29. 需要注意的是,在大多数格式中,不太可能精确的跳转,因此,

  30. ffmpeg 将跳转到 position 之前最接近的位置。当进行转码

  31. 并且 ‘-accurate_seek’ 打开时(默认),位于跳转点和 position

  32. 之间的额外部分将被解码并且丢弃。当做流拷贝或者当使用

  33. ‘-noaccurate_seek’时,它将被保留下来。

  34. 当作为输出选项时(在输出文件名前),解码但是丢弃输入,直到

  35. 时间戳到达 position。

  36. position 可以是秒或者 hh:mm:ss[.xxx] 形式

  37. ‘-itsoffset offset (input)’

  38. 设置输入时间偏移。 offset 将被添加到输入文件的时间戳。指定

  39. 一个正偏移,意味着相应的流将被延时指定时间。

  40. ‘-timestamp date (output)’

  41. 在容器中设置录音时间戳

  42. ‘-metadata[:metadata_specifier] key=value (output,per-metadata)’

  43. 设置metadata key/value对

  44. ‘-target type (output)’

  45. 指定目标文件类型(vcd, svcd, dvd, dv, dv50)。

  46. type 可以带有 pal-, ntsc- 或 film- 前缀,以使用相应的标准。

  47. 所有的格式选项(bitrate, codecs, buffer sizes)将自动设定。

  48. ‘-dframes number (output)’

  49. 设置要录制数据帧的个数。这是 -frames:d 的别名

  50. ‘-frames[:stream_specifier] framecount (output,per-stream)’

  51. framecount 帧以后,停止写流。

  52. ‘-q[:stream_specifier] q (output,per-stream)’

  53. ‘-qscale[:stream_specifier] q (output,per-stream)’

  54. 使用固定质量范围(VBR)。

  55. ‘-filter[:stream_specifier] filtergraph (output,per-stream)’

  56. 创建filtergraph 指定的过滤图,并使用它来过滤流。

  57. ‘-filter_script[:stream_specifier] filename (output,per-stream)’

  58. 该选项与‘-filter’相似,唯一的不同是,它的参数是一个存放

  59. 过滤图的文件的名称。

  60. ‘-pre[:stream_specifier] preset_name (output,per-stream)’

  61. 指定匹配流的预设

  62. ‘-stats (global)’

  63. 打印编码进程/统计信息。默认打开,可以使用 -nostats 禁用。

  64. ‘-stdin’

  65. 开启标准输入交互。默认打开,除非标准输入作为一个输入。

  66. 可以使用 -nostdin 禁止。

  67. ‘-debug_ts (global)’

  68. 打印时间戳信息。默认关闭。

  69. ‘-attach filename (output)’

  70. 添加一个附件到输出文件中

  71. ‘-dump_attachment[:stream_specifier] filename (input,per-stream)’

  72. 提取匹配的附件流到filename指定的文件中。

3.3 视频选项

 
  1. ‘-vframes number (output)’

  2. 设置录制视频帧的个数。这是 -frames:v 的别名

  3. ‘-r[:stream_specifier] fps (input/output,per-stream)’

  4. 设置帧率(Hz 值, 分数或缩写)

  5. ‘-s[:stream_specifier] size (input/output,per-stream)’

  6. 设置帧大小。格式为 ‘wxh’ (默认与源相同)

  7. ‘-aspect[:stream_specifier] aspect (output,per-stream)’

  8. 设置视频显示长宽比

  9. ‘-vn (output)’

  10. 禁止视频录制

  11. ‘-vcodec codec (output)’

  12. 设置视频 codec。这是 -codec:v 的别名

  13. ‘-pass[:stream_specifier] n (output,per-stream)’

  14. 选择pass number (1 or 2)。用来进行双行程视频编码。

  15. ‘-passlogfile[:stream_specifier] prefix (output,per-stream)’

  16. 设置 two-pass 日志文件名前缀,默认为“ffmpeg2pass”。

  17. ‘-vf filtergraph (output)’

  18. 创建 filtergraph 指定的过滤图,并使用它来过滤流。

3.4 高级视频选项

 
  1. ‘-pix_fmt[:stream_specifier] format (input/output,per-stream)’

  2. 设置像素格式。

  3. ‘-sws_flags flags (input/output)’

  4. 设置软缩放标志

  5. ‘-vdt n’

  6. 丢弃阈值

  7. ‘-psnr’

  8. 计算压缩帧的 PSNR

  9. ‘-vstats’

  10. 复制视频编码统计信息到‘vstats_HHMMSS.log’

  11. ‘-vstats_file file’

  12. 复制视频编码统计信息到 file

  13. ‘-force_key_frames[:stream_specifier] time[,time...] (output,per-stream)’

  14. ‘-force_key_frames[:stream_specifier] expr:expr (output,per-stream)’

  15. 在指定的时间戳强制关键帧

  16. ‘-copyinkf[:stream_specifier] (output,per-stream)’

  17. 当进行流拷贝时,同时拷贝开头的非关键帧

  18. ‘-hwaccel[:stream_specifier] hwaccel (input,per-stream)’

  19. 使用硬件加速来解码匹配的流

  20. ‘-hwaccel_device[:stream_specifier] hwaccel_device (input,per-stream)’

  21. 选择硬件加速所使用的设备。该选项只有‘-hwaccel’同时指定时才有意义。

3.5 音频选项

‘-aframes number (output)’
  设置录制音频帧的个数。这是 -frames:a 的别名
‘-ar[:stream_specifier] freq (input/output,per-stream)’
  设置音频采样率。
‘-aq q (output)’
  设置音频质量。这是 -q:a 的别名
‘-ac[:stream_specifier] channels (input/output,per-stream)’
  设置音频通道数。
‘-an (output)’
  禁止音频录制
‘-acodec codec (input/output)’
  设置音频codec。这是-codec:a的别名
‘-sample_fmt[:stream_specifier] sample_fmt (output,per-stream)’
  设置音频采样格式
‘-af filtergraph (output)’
  创建filtergraph 所指定的过滤图,并使用它来过滤流

3.6 字幕选项

‘-scodec codec (input/output)’
    设置字幕codec。这是 -codec:s 的别名
‘-sn (output)’
     禁止字幕录制

3.7 高级选项

 
  1. ‘-map [-]input_file_id[:stream_specifier][,sync_file_id[:stream_specifier]] | [linklabel] (output)’

  2. 指定一个或多个流作为输出文件的源。

  3. 命令行中的第一个 -map 选项,指定输出流0的源,

  4. 第二个 -map 选项,指定输出流1的源,等等。

  5. ‘-map_channel [input_file_id.stream_specifier.channel_id|-1][:output_file_id.stream_specifier]’

  6. 将一个给定输入的音频通道映射到一个输出。

  7. ‘-map_metadata[:metadata_spec_out] infile[:metadata_spec_in] (output,per-metadata)’

  8. 设置下一个输出文件的 metadata 信息。

  9. ‘-map_chapters input_file_index (output)’

  10. 从索引号为 input_file_index 的输入文件中拷贝章节到下一个输出文件中。

  11. ‘-timelimit duration (global)’

  12. ffmpeg 运行 duration 秒后推出

  13. ‘-dump (global)’

  14. 将每一个输入包复制到标准输出

  15. ‘-hex (global)’

  16. 复制包时,同时复制负载

  17. ‘-re (input)’

  18. 以本地帧率读取数据。主要用来模拟一个采集设备,

  19. 或者实时输入流(例如:当从一个文件读取时).

  20. ‘-vsync parameter’

  21. 视频同步方法

  22. ‘-async samples_per_second’

  23. 音频同步方法

  24. ‘-shortest (output)’

  25. 当最短的输入流结束时,终止编码

  26. ‘-muxdelay seconds (input)’

  27. 设置最大解封装-解码延时

  28. ‘-muxpreload seconds (input)’

  29. 设置初始解封装-解码延时

  30. ‘-streamid output-stream-index:new-value (output)’

  31. 为一个输出流分配一个新的stream-id。

  32. ‘-bsf[:stream_specifier] bitstream_filters (output,per-stream)’

  33. 为匹配的流设置比特流过滤器

  34. ‘-filter_complex filtergraph (global)’

  35. 定义一个复杂的过滤图

  36. ‘-lavfi filtergraph (global)’

  37. 定义一个复杂的过滤图。相当于‘-filter_complex’

  38. ‘-filter_complex_script filename (global)’

  39. 该选项类似于‘-filter_complex’,唯一的不同是

  40. 它的参数是一个定义过滤图的文件的文件名

  41. ‘-accurate_seek (input)’

  42. 打开或禁止在输入文件中的精确跳转。默认打开。

  43.  
  44. 更详细的高级选项说明,请查阅 ffmpeg 文档

4. ffmpeg 使用示例

1) 输出 YUV420P 原始数据
ffmpeg -i test.mp4 test.yuv

2) 从视频前10s中提取图像,1s提取一帧
ffmpeg -i test.mp4 -t 10 -r 1 -f image2 pic-%03d.jpeg

3) 从视频中提取音频
ffmpeg -i test.mp4 -vn music.mp2

4) 转换 wav 格式,同时改变其采样率
ffmpeg -i test.wav -ar 32K test.mp2

5) 输出 mp3 原始 PCM 数据
ffmpeg -i test.mp3 -f s16le test.pcm
 
================================================================================================
part 4:
 

使用网络上的各种转码软件,比如爱剪辑,简直崩溃了!比如,它竟然强行把你要编辑的视频的前面,插入了他的广告!很不爽,决定用ffmpeg。 ffmpeg做IT media的都知道,很强大,只不多对windows用户比较麻烦,用命令行不方便。好吧,只能说,这篇文章估计只有小众朋友看的。呜呜

废话不说,直接贴出来吧。 贴出来之前,先mark一下 ffmpeg的使用方式ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...

常用参数说明: 主要参数: -i 设定输入流 -f 设定输出格式 -ss 开始时间 视频参数: -b 设定视频流量,默认为200Kbit/s -r 设定帧速率,默认为25 -s 设定画面的宽与高 -aspect 设定画面的比例 -vn 不处理视频 -vcodec 设定视频编解码器,未设定时则使用与输入流相同的编解码器 音频参数: -ar 设定采样率 -ac 设定声音的Channel数 -acodec 设定声音编解码器,未设定时则使用与输入流相同的编解码器 -an 不处理音频

1. 视频格式转换

(其实格式转换说法不太准确,但大家都这么叫,准确的说,应该是视频容器转换) 比如一个avi文件,想转为mp4,或者一个mp4想转为ts。 ffmpeg -i input.avi output.mp4 ffmpeg -i input.mp4 output.ts 我目测这个已经能满足很多人的需求了。

2. 提取音频

比如我有一个“晓松奇谈”,可是我不想看到他的脸,我只想听声音, 地铁上可以听,咋办? ffmpeg -i 晓松奇谈.mp4 -acodec copy -vn output.aac 上面的命令,默认mp4的audio codec是aac,如果不是会出错,咱可以暴力一点,不管什么音频,都转为最常见的aac。 ffmpeg -i 晓松奇谈.mp4 -acodec aac -vn output.aac

3. 提取视频

我目测有些IT员工,特别是做嵌入式的,比如机顶盒,想debug一下,没有音频的情况下,播放一个视频几天几夜会不会crash,这时候你需要一个纯视频文件,可以这么干。 ffmpeg -i input.mp4 -vcodec copy -an output.mp4

4. 视频剪切

经常要测试视频,但是只需要测几秒钟,可是视频却有几个G,咋办?切啊! 下面的命令,就可以从时间为00:00:15开始,截取5秒钟的视频。 ffmpeg -ss 00:00:15 -t 00:00:05 -i input.mp4 -vcodec copy -acodec copy output.mp4 -ss表示开始切割的时间,-t表示要切多少。上面就是从开始,切5秒钟出来。

5. 码率控制

码率控制对于在线视频比较重要。因为在线视频需要考虑其能提供的带宽。

那么,什么是码率?很简单: bitrate = file size / duration 比如一个文件20.8M,时长1分钟,那么,码率就是: biterate = 20.8M bit/60s = 20.8*1024*1024*8 bit/60s= 2831Kbps 一般音频的码率只有固定几种,比如是128Kbps, 那么,video的就是 video biterate = 2831Kbps -128Kbps = 2703Kbps。

说完背景了。好了,来说ffmpeg如何控制码率。 ffmpg控制码率有3种选择,-minrate -b:v -maxrate -b:v主要是控制平均码率。 比如一个视频源的码率太高了,有10Mbps,文件太大,想把文件弄小一点,但是又不破坏分辨率。 ffmpeg -i input.mp4 -b:v 2000k output.mp4 上面把码率从原码率转成2Mbps码率,这样其实也间接让文件变小了。目测接近一半。 不过,ffmpeg官方wiki比较建议,设置b:v时,同时加上 -bufsize -bufsize 用于设置码率控制缓冲器的大小,设置的好处是,让整体的码率更趋近于希望的值,减少波动。(简单来说,比如1 2的平均值是1.5, 1.49 1.51 也是1.5, 当然是第二种比较好) ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k output.mp4

-minrate -maxrate就简单了,在线视频有时候,希望码率波动,不要超过一个阈值,可以设置maxrate。 ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k -maxrate 2500k output.mp4

6. 视频编码格式转换

比如一个视频的编码是MPEG4,想用H264编码,咋办? ffmpeg -i input.mp4 -vcodec h264 output.mp4 相反也一样 ffmpeg -i input.mp4 -vcodec mpeg4 output.mp4

当然了,如果ffmpeg当时编译时,添加了外部的x265或者X264,那也可以用外部的编码器来编码。(不知道什么是X265,可以Google一下,简单的说,就是她不包含在ffmpeg的源码里,是独立的一个开源代码,用于编码HEVC,ffmpeg编码时可以调用它。当然了,ffmpeg自己也有编码器) ffmpeg -i input.mp4 -c:v libx265 output.mp4 ffmpeg -i input.mp4 -c:v libx264 output.mp4

7. 只提取视频ES数据

这个可能做开发的人会用到,顺便提一下吧。 ffmpeg –i input.mp4 –vcodec copy –an –f m4v output.h264

8. 过滤器的使用

这个我在另一篇博客提到了,这里贴一下吧。

8.1 将输入的1920x1080缩小到960x540输出:

ffmpeg -i input.mp4 -vf scale=960:540 output.mp4 //ps: 如果540不写,写成-1,即scale=960:-1, 那也是可以的,ffmpeg会通知缩放滤镜在输出时保持原始的宽高比。

比如,我有这么一个图片 iqiyi logo 想要贴到一个视频上,那可以用如下命令: ./ffmpeg -i input.mp4 -i iQIYI_logo.png -filter_complex overlay output.mp4 结果如下所示: add logo left 要贴到其他地方?看下面: 右上角: ./ffmpeg -i input.mp4 -i logo.png -filter_complex overlay=W-w output.mp4 左下角: ./ffmpeg -i input.mp4 -i logo.png -filter_complex overlay=0:H-h output.mp4 右下角: ./ffmpeg -i input.mp4 -i logo.png -filter_complex overlay=W-w:H-h output.mp4

有时候,下载了某个网站的视频,但是有logo很烦,咋办?有办法,用ffmpeg的delogo过滤器。 语法:-vf delogo=x:y:w:h[:t[:show]] x:y 离左上角的坐标 w:h logo的宽和高 t: 矩形边缘的厚度默认值4 show:若设置为1有一个绿色的矩形,默认值0。

ffmpeg -i input.mp4 -vf delogo=0:0:220:90:100:1 output.mp4 结果如下所示: de logo

9. 抓取视频的一些帧,存为jpeg图片

比如,一个视频,我想提取一些帧,存为图片,咋办? ffmpeg -i input.mp4 -r 1 -q:v 2 -f image2 pic-%03d.jpeg -r 表示每一秒几帧 -q:v表示存储jpeg的图像质量,一般2是高质量。 如此,ffmpeg会把input.mp4,每隔一秒,存一张图片下来。假设有60s,那会有60张。

60张?什么?这么多?不要不要。。。。。不要咋办?? 可以设置开始的时间,和你想要截取的时间呀。 ffmpeg -i input.mp4 -ss 00:00:20 -t 10 -r 1 -q:v 2 -f image2 pic-%03d.jpeg -ss 表示开始时间 -t表示共要多少时间。 如此,ffmpeg会从input.mp4的第20s时间开始,往下10s,即20~30s这10秒钟之间,每隔1s就抓一帧,总共会抓10帧。

怎么样,好用吧。^^


其他小众的用法

1.输出YUV420原始数据

对于一下做底层编解码的人来说,有时候常要提取视频的YUV原始数据。 怎么坐?很简答: ffmpeg -i input.mp4 output.yuv 怎么样,是不是太简单啦?!!!哈哈

如果你想问yuv的数据,如何播放,我不会告诉你,RawPlayer挺好用的!!

那如果我只想要抽取某一帧YUV呢? 简单,你先用上面的方法,先抽出jpeg图片,然后把jpeg转为YUV。 比如: 你先抽取10帧图片。 ffmpeg -i input.mp4 -ss 00:00:20 -t 10 -r 1 -q:v 2 -f image2 pic-%03d.jpeg 结果:

 
  1. -rw-rw-r-- 1 chenxf chenxf 296254 7月 20 16:08 pic-001.jpeg

  2. -rw-rw-r-- 1 chenxf chenxf 300975 7月 20 16:08 pic-002.jpeg

  3. -rw-rw-r-- 1 chenxf chenxf 310130 7月 20 16:08 pic-003.jpeg

  4. -rw-rw-r-- 1 chenxf chenxf 268694 7月 20 16:08 pic-004.jpeg

  5. -rw-rw-r-- 1 chenxf chenxf 301056 7月 20 16:08 pic-005.jpeg

  6. -rw-rw-r-- 1 chenxf chenxf 293927 7月 20 16:08 pic-006.jpeg

  7. -rw-rw-r-- 1 chenxf chenxf 340295 7月 20 16:08 pic-007.jpeg

  8. -rw-rw-r-- 1 chenxf chenxf 430787 7月 20 16:08 pic-008.jpeg

  9. -rw-rw-r-- 1 chenxf chenxf 404552 7月 20 16:08 pic-009.jpeg

  10. -rw-rw-r-- 1 chenxf chenxf 412691 7月 20 16:08 pic-010.jpeg

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

然后,你就随便挑一张,转为YUV:
ffmpeg -i pic-001.jpeg -s 1440x1440 -pix_fmt yuv420p xxx3.yuv
如果-s参数不写,则输出大小与输入一样。

当然了,YUV还有yuv422p啥的,你在-pix_fmt 换成yuv422p就行啦!

2. H264编码profile & level控制

背景知识

先科普一下profile&level吧,知道的请飘过。(这里讨论最常用的H264)
H.264有四种画质级别,分别是baseline, extended, main, high:
  1、Baseline Profile:基本画质。支持I/P 帧,只支持无交错(Progressive)和CAVLC;
  2、Extended profile:进阶画质。支持I/P/B/SP/SI 帧,只支持无交错(Progressive)和CAVLC;(用的少)
  3、Main profile:主流画质。提供I/P/B 帧,支持无交错(Progressive)和交错(Interlaced),
    也支持CAVLC 和CABAC 的支持;
  4、High profile:高级画质。在main Profile 的基础上增加了8x8内部预测、自定义量化、 无损视频编码和更多的YUV 格式;
H.264 Baseline profile、Extended profile和Main profile都是针对8位样本数据、4:2:0格式(YUV)的视频序列。在相同配置情况下,High profile(HP)可以比Main profile(MP)降低10%的码率。
根据应用领域的不同,Baseline profile多应用于实时通信领域,Main profile多应用于流媒体领域,High profile则多应用于广电和存储领域。

下图清楚的给出不同的profile&level的性能区别。
profile
这里写图片描述

level
这里写图片描述

2.1 ffmpeg如何控制profile&level

举3个例子吧
ffmpeg -i input.mp4 -profile:v baseline -level 3.0 output.mp4

ffmpeg -i input.mp4 -profile:v main -level 4.2 output.mp4

ffmpeg -i input.mp4 -profile:v high -level 5.1 output.mp4

如果ffmpeg编译时加了external的libx264,那就这么写:
ffmpeg -i input.mp4 -c:v libx264 -x264-params "profile=high:level=3.0" output.mp4

从压缩比例来说,baseline< main < high,对于带宽比较局限的在线视频,可能会选择high,但有些时候,做个小视频,希望所有的设备基本都能解码(有些低端设备或早期的设备只能解码baseline),那就牺牲文件大小吧,用baseline。自己取舍吧!

苹果的设备对不同profile的支持。
这里写图片描述

2.2. 编码效率和视频质量的取舍(preset, crf)

除了上面提到的,强行配置biterate,或者强行配置profile/level,还有2个参数可以控制编码效率。
一个是preset,一个是crf。
preset也挺粗暴,基本原则就是,如果你觉得编码太快或太慢了,想改改,可以用profile。
preset有如下参数可用:

ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow and placebo.
编码加快,意味着信息丢失越严重,输出图像质量越差。

CRF(Constant Rate Factor): 范围 0-51: 0是编码毫无丢失信息, 23 is 默认, 51 是最差的情况。相对合理的区间是18-28.
值越大,压缩效率越高,但也意味着信息丢失越严重,输出图像质量越差。

举个例子吧。
ffmpeg -i input -c:v libx264 -profile:v main -preset:v fast -level 3.1 -x264opts crf=18
(参考自:https://trac.ffmpeg.org/wiki/Encode/H.264)

2.3. H265 (HEVC)编码tile&level控制

背景知识

和H264的profile&level一样,为了应对不同应用的需求,HEVC制定了“层级”(tier) 和“等级”(level)。
tier只有main和high。
level有13级,如下所示:
这里写图片描述

不多说,直接给出怎么用。(supposed你用libx265编码)
ffmpeg -i input.mp4 -c:v libx265 -x265-params "profile=high:level=3.0" output.mp4

 

===================================================================================

part 5:

 

 

 

转flv

ffmpeg -i F:\01.wmv -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:\test.flv 

简单的转换:

ffmpeg -i IpCam.ts IpCam.flv

注意:bitrate否则转换后图像模糊:20M 合适

ffmpeg -i IpCam.ts -b 20000000  IpCam.flv

 

 

ffmpeg 推rtmp 流

ffmpeg -re -i ~/2012.flv -f flv rtmp://192.168.1.102/myapp/test1

ffmpeg -re -i RealStream.fifo -f flv -b 20000000 rtmp://localhost/myapp/test1

 

信息查询

ffmpeg -formats
查看所有支持的容器格式

ffmpeg -codecs
查看所有编解码器

ffmpeg -filters
查看所有可用的filter

ffmpeg -pix_fmts
查看所有支持的图片格式


ffmpeg -sample_fmts
查看所有支持的像素格式

ffprobe -i money.mp4
查看媒体信息

 

格式转换

ffmpeg -i money.mp4 -c:v mpeg2video -b:v 500k -c:a libmp3lame -f mpegts money.ts
ffmpeg -i money.mp4 -c:v libx264 -minrate:v 500k -maxrate:v 500k -bufsize:v 125k -c:a libmp3lame -f mpegts money.ts
ffmpeg -i money.mp4 -c:v libx264 -x264opts bitrate=500:vbv-maxrate=500:vbv-bufsize=166:nal_hrd=cbr  -c:a libmp3lame -f mpegts money_cbr_500k.ts
-i    输入文件名
-c:v  设置视频编码器
-v:b  设置码率
-c:a  设置音频编码器
-f    设置文件格式(容器)
-minrate:v 500k -maxrate:v 500k -bufsize:v 125k  设置CBR(不太好用)

 

-x264opts bitrate=500:vbv-maxrate=500:vbv-bufsize=166:nal_hrd=cbr  设置CBR(好用)

 

 

选择其中第一个视频流输出,设置码率
ffmpeg -i money.mp4 -map 0:v:0 -c:v libx264 -b:v 500k money_500k.mp4
ffmpeg -i money.mp4 -map 0:v:0 -c:v libx264 -b:v 300k money_300k.mp4
ffmpeg -i money.mp4 -map 0:v:0 -c:v libx264 -b:v 100k -s 336x188 money_100k.mp4
选择其中第一个音频流输出
ffmpeg -i money.mp4 -map 0:a:0 money_audio.mp4

 

使用图片合成翻转的视频:

 

ffmpeg -framerate 30 -pattern_type glob -i '*.jpg' -c:v libx264 -r 30 -vf vflip,hflip out.mp4

====================================================================================

part 6:

 

 

1.分离视频音频流

ffmpeg -i input_file -vcodec copy -an output_file_video  //分离视频流
ffmpeg -i input_file -acodec copy -vn output_file_audio  //分离音频流

2.视频解复用

ffmpeg –i test.mp4 –vcodec copy –an –f m4v test.264
ffmpeg –i test.avi –vcodec copy –an –f m4v test.264

3.视频转码

ffmpeg –i test.mp4 –vcodec h264 –s 352*278 –an –f m4v test.264              //转码为码流原始文件
ffmpeg –i test.mp4 –vcodec h264 –bf 0 –g 25 –s 352*278 –an –f m4v test.264  //转码为码流原始文件
ffmpeg –i test.avi -vcodec mpeg4 –vtag xvid –qsame test_xvid.avi            //转码为封装文件
//-bf B帧数目控制,-g 关键帧间隔控制,-s 分辨率控制

4.视频封装

ffmpeg –i video_file –i audio_file –vcodec copy –acodec copy output_file

5.视频剪切

ffmpeg –i test.avi –r 1 –f image2 image-%3d.jpeg        //提取图片
ffmpeg -ss 0:1:30 -t 0:0:20 -i input.avi -vcodec copy -acodec copy output.avi    //剪切视频
//-r 提取图像的频率,-ss 开始时间,-t 持续时间

6.视频录制

ffmpeg –i rtsp://192.168.3.205:5555/test –vcodec copy out.avi

7.YUV序列播放

ffplay -f rawvideo -video_size 1920x1080 input.yuv

8.YUV序列转AVI

ffmpeg –s w*h –pix_fmt yuv420p –i input.yuv –vcodec mpeg4 output.avi

常用参数说明:

主要参数: -i 设定输入流 -f 设定输出格式 -ss 开始时间 视频参数: -b 设定视频流量,默认为200Kbit/s -r 设定帧速率,默认为25 -s 设定画面的宽与高 -aspect 设定画面的比例 -vn 不处理视频 -vcodec 设定视频编解码器,未设定时则使用与输入流相同的编解码器 音频参数: -ar 设定采样率 -ac 设定声音的Channel数 -acodec 设定声音编解码器,未设定时则使用与输入流相同的编解码器 -an 不处理音频

------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------

1、将文件当做直播送至live

[plain] view plain copy

 

  1. ffmpeg -re -i localFile.mp4 -c copy -f flv rtmp://server/live/streamName  
ffmpeg -re -i localFile.mp4 -c copy -f flv rtmp://server/live/streamName

2、将直播媒体保存至本地文件

 

[plain] view plain copy

 

  1. ffmpeg -i rtmp://server/live/streamName -c copy dump.flv  
ffmpeg -i rtmp://server/live/streamName -c copy dump.flv

3、将其中一个直播流,视频改用h264压缩,音频不变,送至另外一个直播服务流

 

[plain] view plain copy

 

  1. ffmpeg -i rtmp://server/live/originalStream -c:a copy -c:v libx264 -vpre slow -f flv rtmp://server/live/h264Stream  
ffmpeg -i rtmp://server/live/originalStream -c:a copy -c:v libx264 -vpre slow -f flv rtmp://server/live/h264Stream

 

4、将其中一个直播流,视频改用h264压缩,音频改用faac压缩,送至另外一个直播服务流

[plain] view plain copy

 

  1. ffmpeg -i rtmp://server/live/originalStream -c:a libfaac -ar 44100 -ab 48k -c:v libx264 -vpre slow -vpre baseline -f flv rtmp://server/live/h264Stream  
ffmpeg -i rtmp://server/live/originalStream -c:a libfaac -ar 44100 -ab 48k -c:v libx264 -vpre slow -vpre baseline -f flv rtmp://server/live/h264Stream

5、将其中一个直播流,视频不变,音频改用faac压缩,送至另外一个直播服务流

[plain] view plain copy

 

  1. ffmpeg -i rtmp://server/live/originalStream -acodec libfaac -ar 44100 -ab 48k -vcodec copy -f flv rtmp://server/live/h264_AAC_Stream  
ffmpeg -i rtmp://server/live/originalStream -acodec libfaac -ar 44100 -ab 48k -vcodec copy -f flv rtmp://server/live/h264_AAC_Stream

6、将一个高清流,复制为几个不同视频清晰度的流重新发布,其中音频不变

[plain] view plain copy

 

  1. ffmpeg -re -i rtmp://server/live/high_FMLE_stream -acodec copy -vcodec x264lib -s 640×360 -b 500k -vpre medium -vpre baseline rtmp://server/live/baseline_500k -acodec copy -vcodec x264lib -s 480×272 -b 300k -vpre medium -vpre baseline rtmp://server/live/baseline_300k -acodec copy -vcodec x264lib -s 320×200 -b 150k -vpre medium -vpre baseline rtmp://server/live/baseline_150k -acodec libfaac -vn -ab 48k rtmp://server/live/audio_only_AAC_48k  
ffmpeg -re -i rtmp://server/live/high_FMLE_stream -acodec copy -vcodec x264lib -s 640×360 -b 500k -vpre medium -vpre baseline rtmp://server/live/baseline_500k -acodec copy -vcodec x264lib -s 480×272 -b 300k -vpre medium -vpre baseline rtmp://server/live/baseline_300k -acodec copy -vcodec x264lib -s 320×200 -b 150k -vpre medium -vpre baseline rtmp://server/live/baseline_150k -acodec libfaac -vn -ab 48k rtmp://server/live/audio_only_AAC_48k

7、功能一样,只是采用-x264opts选项

[plain] view plain copy

 

  1. ffmpeg -re -i rtmp://server/live/high_FMLE_stream -c:a copy -c:v x264lib -s 640×360 -x264opts bitrate=500:profile=baseline:preset=slow rtmp://server/live/baseline_500k -c:a copy -c:v x264lib -s 480×272 -x264opts bitrate=300:profile=baseline:preset=slow rtmp://server/live/baseline_300k -c:a copy -c:v x264lib -s 320×200 -x264opts bitrate=150:profile=baseline:preset=slow rtmp://server/live/baseline_150k -c:a libfaac -vn -b:a 48k rtmp://server/live/audio_only_AAC_48k  
ffmpeg -re -i rtmp://server/live/high_FMLE_stream -c:a copy -c:v x264lib -s 640×360 -x264opts bitrate=500:profile=baseline:preset=slow rtmp://server/live/baseline_500k -c:a copy -c:v x264lib -s 480×272 -x264opts bitrate=300:profile=baseline:preset=slow rtmp://server/live/baseline_300k -c:a copy -c:v x264lib -s 320×200 -x264opts bitrate=150:profile=baseline:preset=slow rtmp://server/live/baseline_150k -c:a libfaac -vn -b:a 48k rtmp://server/live/audio_only_AAC_48k

8、将当前摄像头及音频通过DSSHOW采集,视频h264、音频faac压缩后发布

[plain] view plain copy

 

  1. ffmpeg -r 25 -f dshow -s 640×480 -i video=”video source name”:audio=”audio source name” -vcodec libx264 -b 600k -vpre slow -acodec libfaac -ab 128k -f flv rtmp://server/application/stream_name  
ffmpeg -r 25 -f dshow -s 640×480 -i video=”video source name”:audio=”audio source name” -vcodec libx264 -b 600k -vpre slow -acodec libfaac -ab 128k -f flv rtmp://server/application/stream_name

9、将一个JPG图片经过h264压缩循环输出为mp4视频

[plain] view plain copy

 

  1. ffmpeg.exe -i INPUT.jpg -an -vcodec libx264 -coder 1 -flags +loop -cmp +chroma -subq 10 -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -flags2 +dct8x8 -trellis 2 -partitions +parti8x8+parti4x4 -crf 24 -threads 0 -r 25 -g 25 -y OUTPUT.mp4  
ffmpeg.exe -i INPUT.jpg -an -vcodec libx264 -coder 1 -flags +loop -cmp +chroma -subq 10 -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -flags2 +dct8x8 -trellis 2 -partitions +parti8x8+parti4x4 -crf 24 -threads 0 -r 25 -g 25 -y OUTPUT.mp4

10、将普通流视频改用h264压缩,音频不变,送至高清流服务(新版本FMS live=1)

[plain] view plain copy

 

  1. ffmpeg -i rtmp://server/live/originalStream -c:a copy -c:v libx264 -vpre slow -f flv “rtmp://server/live/h264Stream live=1〃<br style="box-sizing: border-box;" /><br style="box-sizing: border-box;" /><br style="box-sizing: border-box;" />  
ffmpeg -i rtmp://server/live/originalStream -c:a copy -c:v libx264 -vpre slow -f flv “rtmp://server/live/h264Stream live=1〃<br style="box-sizing: border-box;" /><br style="box-sizing: border-box;" /><br style="box-sizing: border-box;" />

------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------

 

1.采集usb摄像头视频命令:

ffmpeg -t 20 -f vfwcap -i 0 -r 8 -f mp4 cap1111.mp4

 

./ffmpeg -t 10 -f vfwcap -i 0 -r 8 -f mp4 cap.mp4

具体说明如下:我们采集10秒,采集设备为vfwcap类型设备,第0个vfwcap采集设备(如果系统有多个vfw的视频采集设备,可以通过-i num来选择),每秒8帧,输出方式为文件,格式为mp4。

 

2.最简单的抓屏:

ffmpeg -f gdigrab -i desktop out.mpg 

 

3.从屏幕的(10,20)点处开始,抓取640x480的屏幕,设定帧率为5 :

ffmpeg -f gdigrab -framerate 5 -offset_x 10 -offset_y 20 -video_size 640x480 -i desktop out.mpg 

 

4.ffmpeg从视频中生成gif图片:

ffmpeg -i capx.mp4 -t 10 -s 320x240 -pix_fmt rgb24 jidu1.gif

 

5.ffmpeg将图片转换为视频:

http://blog.sina.com.cn/s/blog_40d73279010113c2.html

 

===========================================================================

part 7:

 

 

FFMPEG以其强大的功能而在音视频领域著称,更重要的是它还是开源的!音视频格式转换、裁剪、拼接、提取字幕或某音轨等等,它都能胜任,可谓一把瑞士军刀,小巧但功能强大,是音视频研究的必备利器之一。

 

示例

 

1. 转换成H264编解码

[plain] view plain copy

 

  1. ffmpeg -i input_file -vcodec h264 output_file  
ffmpeg -i input_file -vcodec h264 output_file

其中 -i 表示输入文件, -vcodec  h264 表示视频编解码方式为 H264。

2. 转换成H265编解码

[plain] view plain copy

 

  1. ffmpeg -i input_file -vcode hevc output_file  
ffmpeg -i input_file -vcode hevc output_file

其中 -i 表示输入文件, -vcodec  hevc 表示视频编解码方式为 H265,注意ffmpeg 中名称为 hevc,不是H265!

3. 设置输出视频的分辨率

[plain] view plain copy

 

  1. ffmpeg -i input_file -vcodec h264 -s 1280x720 output_file  
ffmpeg -i input_file -vcodec h264 -s 1280x720 output_file

其中 -s 表示分辨率。

4. 设置输出文件的音视频比特率

[plain] view plain copy

 

  1. ffmpeg -i input_file  -vcodec h264 -b:v 10M -b:a 128K output_file  
ffmpeg -i input_file  -vcodec h264 -b:v 10M -b:a 128K output_file

其中 -b:v 10M 表示视频码率为10Mbps, -b:a 128K 表示音频码率为 128Kbps,注意FFMPEG对于码率控制,有时候不太准确,跟输入源有一定关系。

5. 剪切某段视频

[plain] view plain copy

 

  1. ffmpeg -ss 0:05:00 -t 0:1:30 -i input_file -vcodec copy -acodec copy output_file  
  2. ffmpeg -ss 300 -t 90  -i input_file -vcodec copy -acodec copy output_file  
 
  1. ffmpeg -ss 0:05:00 -t 0:1:30 -i input_file -vcodec copy -acodec copy output_file

  2. ffmpeg -ss 300 -t 90 -i input_file -vcodec copy -acodec copy output_file

上面的两种方式等价,时间格式支持 HH:MM:SS或者秒数。 -ss 开始时间, -t 持续时间, -vcodec copy 保持原视频编码, -acodec copy 保持原音频编码。

6. 分离音视频流保存为不同文件

[plain] view plain copy

 

  1. ffmpeg -i input_file -vcodec copy -an output_file_video  //提取视频流  
  2. ffmpeg -i input_file -acodec copy -vn output_file_audio  //提取音频流  
 
  1. ffmpeg -i input_file -vcodec copy -an output_file_video  //提取视频流

  2. ffmpeg -i input_file -acodec copy -vn output_file_audio  //提取音频流

其中 -an 表示不处理音频, -vn 表示不处理视频。

7.合并多个音视频文件为一个文件

 

[plain] view plain copy

 

  1. ffmpeg –i video_file –i audio_file –vcodec copy –acodec copy output_file  
ffmpeg –i video_file –i audio_file –vcodec copy –acodec copy output_file

 

 

8. 提取视频图像保存为图片文件

 

[plain] view plain copy

 

  1. ffmpeg –i input_file –r 1 –f image2 image-%3d.jpeg        //提取图片  
ffmpeg –i input_file –r 1 –f image2 image-%3d.jpeg        //提取图片

 

其中 -r 表示提取图像的频率,-f 表示输出格式, %3d 表示文件命名方式(也即生成的图片名为 image-001.jpeg, image-002.jpeg, ...., image-999.jpeg)。

 

9. 转换成YUV原始文件

 

[plain] view plain copy

 

  1. ffmpeg -i input_file -vcodec rawvideo -an output_file_yuv  
ffmpeg -i input_file -vcodec rawvideo -an output_file_yuv

 

 

10. YUV序列转出AVI文件

 

[plain] view plain copy

 

  1. ffmpeg –s w*h –pix_fmt yuv420p –i input.yuv –vcodec mpeg4 output.avi  
ffmpeg –s w*h –pix_fmt yuv420p –i input.yuv –vcodec mpeg4 output.avi

 

 

11. 控制关键帧间隔和B帧

 

[plain] view plain copy

 

  1. ffmpeg –i input_file  –vcodec h264 –bf 0 –g 25 –s 854x480 –an –f m4v output_file  
ffmpeg –i input_file  –vcodec h264 –bf 0 –g 25 –s 854x480 –an –f m4v output_file

 

其中-bf 控制B帧数目,-g 控制关键帧间隔, -f 控制文件格式(format,注意与codec的区别)。

 

12. 录制rtsp网络数据流

 

[plain] view plain copy

 

  1. ffmpeg –i rtsp://192.168.1.100:5555/test_stream –vcodec copy out.avi  
ffmpeg –i rtsp://192.168.1.100:5555/test_stream –vcodec copy out.avi

 

将rtsp的网络视频流文件保存为 out.avi 本地文件

 

13. 在多音轨文件中提取某音轨文件

得分两步走,第一步,查看源文件,找到对应的音频序号;第二步,将对应的音频序号流提取出来。如下所示:

 

[plain] view plain copy

 

  1. <strong><span style="color:#ff0000;">D:>ffmpeg  -i Xmen_HEVC_4K_Multi_Audio_28Mbps.mkv</span></strong>  
  2. ffmpeg version N-66931-gbbd8c85 Copyright (c) 2000-2014 the FFmpeg developers  
  3.   built on Oct 17 2014 01:05:12 with gcc 4.9.1 (GCC)  
  4.   configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfi  
  5. g --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --  
  6. enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-lib  
  7. opencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinge  
  8. r --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --  
  9. enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-  
  10. libx265 --enable-libxavs --enable-libxvid --enable-zlib  
  11.   libavutil      54. 10.100 / 54. 10.100  
  12.   libavcodec     56.  8.100 / 56.  8.100  
  13.   libavformat    56.  9.100 / 56.  9.100  
  14.   libavdevice    56.  1.100 / 56.  1.100  
  15.   libavfilter     5.  1.106 /  5.  1.106  
  16.   libswscale      3.  1.101 /  3.  1.101  
  17.   libswresample   1.  1.100 /  1.  1.100  
  18.   libpostproc    53.  3.100 / 53.  3.100  
  19. Input #0, matroska,webm, from 'D:\Xmen_HEVC_4K_Multi_Audio_28Mbps.mkv':  
  20.   Metadata:  
  21.     title           : X-MEN__DAYS_OF_FUTURE_PAST.Title800  
  22.     encoder         : libebml v0.7.8 + libmatroska v0.8.1  
  23.     creation_time   : 2014-10-07 14:08:43  
  24.   Duration: 02:11:35.18, start: 0.000000, bitrate: 28873 kb/s  
  25.     Chapter #0:0: start 0.000000, end 213.338000  
  26.     Metadata:  
  27.       title           : (01)00:00:00:000  
  28.     Chapter #0:1: start 213.338000, end 480.688000  
  29.     Metadata:  
  30.       title           : (02)00:03:33:338  
  31.     Chapter #0:2: start 480.688000, end 628.628000  
  32.     Metadata:  
  33.       title           : (03)00:08:00:688  
  34.     Chapter #0:3: start 628.628000, end 838.045000  
  35.     Metadata:  
  36.       title           : (04)00:10:28:628  
  37.     Chapter #0:4: start 838.045000, end 1022.021000  
  38.     Metadata:  
  39.       title           : (05)00:13:58:045  
  40.     Chapter #0:5: start 1022.021000, end 1216.089000  
  41.     Metadata:  
  42.       title           : (06)00:17:02:021  
  43.     Chapter #0:6: start 1216.089000, end 1331.330000  
  44.     Metadata:  
  45.       title           : (07)00:20:16:089  
  46.     Chapter #0:7: start 1331.330000, end 1597.887000  
  47.     Metadata:  
  48.       title           : (08)00:22:11:330  
  49.     Chapter #0:8: start 1597.887000, end 1832.038000  
  50.     Metadata:  
  51.       title           : (09)00:26:37:887  
  52.     Chapter #0:9: start 1832.038000, end 2069.776000  
  53.     Metadata:  
  54.       title           : (10)00:30:32:038  
  55.     Chapter #0:10: start 2069.776000, end 2160.992000  
  56.     Metadata:  
  57.       title           : (11)00:34:29:776  
  58.     Chapter #0:11: start 2160.992000, end 2298.087000  
  59.     Metadata:  
  60.       title           : (12)00:36:00:992  
  61.     Chapter #0:12: start 2298.087000, end 2437.101000  
  62.     Metadata:  
  63.       title           : (13)00:38:18:087  
  64.     Chapter #0:13: start 2437.101000, end 2753.792000  
  65.     Metadata:  
  66.       title           : (14)00:40:37:101  
  67.     Chapter #0:14: start 2753.792000, end 2933.847000  
  68.     Metadata:  
  69.       title           : (15)00:45:53:792  
  70.     Chapter #0:15: start 2933.847000, end 3118.156000  
  71.     Metadata:  
  72.       title           : (16)00:48:53:847  
  73.     Chapter #0:16: start 3118.156000, end 3283.113000  
  74.     Metadata:  
  75.       title           : (17)00:51:58:156  
  76.     Chapter #0:17: start 3283.113000, end 3471.426000  
  77.     Metadata:  
  78.       title           : (18)00:54:43:113  
  79.     Chapter #0:18: start 3471.426000, end 3648.186000  
  80.     Metadata:  
  81.       title           : (19)00:57:51:426  
  82.     Chapter #0:19: start 3648.186000, end 3806.594000  
  83.     Metadata:  
  84.       title           : (20)01:00:48:186  
  85.     Chapter #0:20: start 3806.594000, end 4029.567000  
  86.     Metadata:  
  87.       title           : (21)01:03:26:594  
  88.     Chapter #0:21: start 4029.567000, end 4183.596000  
  89.     Metadata:  
  90.       title           : (22)01:07:09:567  
  91.     Chapter #0:22: start 4183.596000, end 4391.470000  
  92.     Metadata:  
  93.       title           : (23)01:09:43:596  
  94.     Chapter #0:23: start 4391.470000, end 4531.860000  
  95.     Metadata:  
  96.       title           : (24)01:13:11:470  
  97.     Chapter #0:24: start 4531.860000, end 4647.726000  
  98.     Metadata:  
  99.       title           : (25)01:15:31:860  
  100.     Chapter #0:25: start 4647.726000, end 4770.098000  
  101.     Metadata:  
  102.       title           : (26)01:17:27:726  
  103.     Chapter #0:26: start 4770.098000, end 5090.710000  
  104.     Metadata:  
  105.       title           : (27)01:19:30:098  
  106.     Chapter #0:27: start 5090.710000, end 5218.254000  
  107.     Metadata:  
  108.       title           : (28)01:24:50:710  
  109.     Chapter #0:28: start 5218.254000, end 5464.250000  
  110.     Metadata:  
  111.       title           : (29)01:26:58:254  
  112.     Chapter #0:29: start 5464.250000, end 5643.679000  
  113.     Metadata:  
  114.       title           : (30)01:31:04:250  
  115.     Chapter #0:30: start 5643.679000, end 5853.180000  
  116.     Metadata:  
  117.       title           : (31)01:34:03:679  
  118.     Chapter #0:31: start 5853.180000, end 6114.817000  
  119.     Metadata:  
  120.       title           : (32)01:37:33:180  
  121.     Chapter #0:32: start 6114.817000, end 6292.995000  
  122.     Metadata:  
  123.       title           : (33)01:41:54:817  
  124.     Chapter #0:33: start 6292.995000, end 6439.808000  
  125.     Metadata:  
  126.       title           : (34)01:44:52:995  
  127.     Chapter #0:34: start 6439.808000, end 6689.766000  
  128.     Metadata:  
  129.       title           : (35)01:47:19:808  
  130.     Chapter #0:35: start 6689.766000, end 7002.745000  
  131.     Metadata:  
  132.       title           : (36)01:51:29:766  
  133.     Chapter #0:36: start 7002.745000, end 7212.413000  
  134.     Metadata:  
  135.       title           : (37)01:56:42:745  
  136.     Chapter #0:37: start 7212.413000, end 7354.972000  
  137.     Metadata:  
  138.       title           : (38)02:00:12:413  
  139.     Chapter #0:38: start 7354.972000, end 7831.907000  
  140.     Metadata:  
  141.       title           : (39)02:02:34:972  
  142.     Chapter #0:39: start 7831.907000, end 7895.095000  
  143.     Metadata:  
  144.       title           : (40)02:10:31:907  
  145.     Chapter #0:40: start 7895.095000, end 7895.178884  
  146.     Metadata:  
  147.       title           : (41)02:11:35:095  
  148.     <strong>Stream #0:0: Video: hevc (Main), yuv420p(tv), 3840x2160, SAR 1:1 DAR 16:9, 23.98 fps, 23.98 tbr, 48003.07 tbn, 48003  
  149. .07 tbc (default)  
  150.     Stream #0:1(eng): Audio: dts (DTS-HD MA), 48000 Hz, 5.1(side), fltp, 1536 kb/s (default)  
  151.     <span style="color:#33ff33;">Stream #0:2(eng): Audio: ac3, 48000 Hz, 5.1(side), fltp, 448 kb/s</span>  
  152.     Stream #0:3(spa): Audio: ac3, 48000 Hz, 5.1(side), fltp, 448 kb/s  
  153.     Stream #0:4(fra): Audio: ac3, 48000 Hz, 5.1(side), fltp, 448 kb/s  
  154.     Stream #0:5(por): Audio: ac3, 48000 Hz, 5.1(side), fltp, 448 kb/s  
  155.     Stream #0:6(rus): Audio: dts (DTS), 48000 Hz, 5.1(side), fltp, 768 kb/s  
  156.     Stream #0:7(tha): Audio: ac3, 48000 Hz, 5.1(side), fltp, 448 kb/s  
  157.     Stream #0:8(ukr): Audio: ac3, 48000 Hz, 5.1(side), fltp, 448 kb/s</strong>  
  158. <span style="color:#ff0000;">At least one output file must be specified</span>  
  159.   
  160. D:>  
 
  1. <strong><span style="color:#ff0000;">D:>ffmpeg -i Xmen_HEVC_4K_Multi_Audio_28Mbps.mkv</span></strong>

  2. ffmpeg version N-66931-gbbd8c85 Copyright (c) 2000-2014 the FFmpeg developers

  3. built on Oct 17 2014 01:05:12 with gcc 4.9.1 (GCC)

  4. configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfi

  5. g --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --

  6. enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-lib

  7. opencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinge

  8. r --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --

  9. enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-

  10. libx265 --enable-libxavs --enable-libxvid --enable-zlib

  11. libavutil 54. 10.100 / 54. 10.100

  12. libavcodec 56. 8.100 / 56. 8.100

  13. libavformat 56. 9.100 / 56. 9.100

  14. libavdevice 56. 1.100 / 56. 1.100

  15. libavfilter 5. 1.106 / 5. 1.106

  16. libswscale 3. 1.101 / 3. 1.101

  17. libswresample 1. 1.100 / 1. 1.100

  18. libpostproc 53. 3.100 / 53. 3.100

  19. Input #0, matroska,webm, from 'D:\Xmen_HEVC_4K_Multi_Audio_28Mbps.mkv':

  20. Metadata:

  21. title : X-MEN__DAYS_OF_FUTURE_PAST.Title800

  22. encoder : libebml v0.7.8 + libmatroska v0.8.1

  23. creation_time : 2014-10-07 14:08:43

  24. Duration: 02:11:35.18, start: 0.000000, bitrate: 28873 kb/s

  25. Chapter #0:0: start 0.000000, end 213.338000

  26. Metadata:

  27. title : (01)00:00:00:000

  28. Chapter #0:1: start 213.338000, end 480.688000

  29. Metadata:

  30. title : (02)00:03:33:338

  31. Chapter #0:2: start 480.688000, end 628.628000

  32. Metadata:

  33. title : (03)00:08:00:688

  34. Chapter #0:3: start 628.628000, end 838.045000

  35. Metadata:

  36. title : (04)00:10:28:628

  37. Chapter #0:4: start 838.045000, end 1022.021000

  38. Metadata:

  39. title : (05)00:13:58:045

  40. Chapter #0:5: start 1022.021000, end 1216.089000

  41. Metadata:

  42. title : (06)00:17:02:021

  43. Chapter #0:6: start 1216.089000, end 1331.330000

  44. Metadata:

  45. title : (07)00:20:16:089

  46. Chapter #0:7: start 1331.330000, end 1597.887000

  47. Metadata:

  48. title : (08)00:22:11:330

  49. Chapter #0:8: start 1597.887000, end 1832.038000

  50. Metadata:

  51. title : (09)00:26:37:887

  52. Chapter #0:9: start 1832.038000, end 2069.776000

  53. Metadata:

  54. title : (10)00:30:32:038

  55. Chapter #0:10: start 2069.776000, end 2160.992000

  56. Metadata:

  57. title : (11)00:34:29:776

  58. Chapter #0:11: start 2160.992000, end 2298.087000

  59. Metadata:

  60. title : (12)00:36:00:992

  61. Chapter #0:12: start 2298.087000, end 2437.101000

  62. Metadata:

  63. title : (13)00:38:18:087

  64. Chapter #0:13: start 2437.101000, end 2753.792000

  65. Metadata:

  66. title : (14)00:40:37:101

  67. Chapter #0:14: start 2753.792000, end 2933.847000

  68. Metadata:

  69. title : (15)00:45:53:792

  70. Chapter #0:15: start 2933.847000, end 3118.156000

  71. Metadata:

  72. title : (16)00:48:53:847

  73. Chapter #0:16: start 3118.156000, end 3283.113000

  74. Metadata:

  75. title : (17)00:51:58:156

  76. Chapter #0:17: start 3283.113000, end 3471.426000

  77. Metadata:

  78. title : (18)00:54:43:113

  79. Chapter #0:18: start 3471.426000, end 3648.186000

  80. Metadata:

  81. title : (19)00:57:51:426

  82. Chapter #0:19: start 3648.186000, end 3806.594000

  83. Metadata:

  84. title : (20)01:00:48:186

  85. Chapter #0:20: start 3806.594000, end 4029.567000

  86. Metadata:

  87. title : (21)01:03:26:594

  88. Chapter #0:21: start 4029.567000, end 4183.596000

  89. Metadata:

  90. title : (22)01:07:09:567

  91. Chapter #0:22: start 4183.596000, end 4391.470000

  92. Metadata:

  93. title : (23)01:09:43:596

  94. Chapter #0:23: start 4391.470000, end 4531.860000

  95. Metadata:

  96. title : (24)01:13:11:470

  97. Chapter #0:24: start 4531.860000, end 4647.726000

  98. Metadata:

  99. title : (25)01:15:31:860

  100. Chapter #0:25: start 4647.726000, end 4770.098000

  101. Metadata:

  102. title : (26)01:17:27:726

  103. Chapter #0:26: start 4770.098000, end 5090.710000

  104. Metadata:

  105. title : (27)01:19:30:098

  106. Chapter #0:27: start 5090.710000, end 5218.254000

  107. Metadata:

  108. title : (28)01:24:50:710

  109. Chapter #0:28: start 5218.254000, end 5464.250000

  110. Metadata:

  111. title : (29)01:26:58:254

  112. Chapter #0:29: start 5464.250000, end 5643.679000

  113. Metadata:

  114. title : (30)01:31:04:250

  115. Chapter #0:30: start 5643.679000, end 5853.180000

  116. Metadata:

  117. title : (31)01:34:03:679

  118. Chapter #0:31: start 5853.180000, end 6114.817000

  119. Metadata:

  120. title : (32)01:37:33:180

  121. Chapter #0:32: start 6114.817000, end 6292.995000

  122. Metadata:

  123. title : (33)01:41:54:817

  124. Chapter #0:33: start 6292.995000, end 6439.808000

  125. Metadata:

  126. title : (34)01:44:52:995

  127. Chapter #0:34: start 6439.808000, end 6689.766000

  128. Metadata:

  129. title : (35)01:47:19:808

  130. Chapter #0:35: start 6689.766000, end 7002.745000

  131. Metadata:

  132. title : (36)01:51:29:766

  133. Chapter #0:36: start 7002.745000, end 7212.413000

  134. Metadata:

  135. title : (37)01:56:42:745

  136. Chapter #0:37: start 7212.413000, end 7354.972000

  137. Metadata:

  138. title : (38)02:00:12:413

  139. Chapter #0:38: start 7354.972000, end 7831.907000

  140. Metadata:

  141. title : (39)02:02:34:972

  142. Chapter #0:39: start 7831.907000, end 7895.095000

  143. Metadata:

  144. title : (40)02:10:31:907

  145. Chapter #0:40: start 7895.095000, end 7895.178884

  146. Metadata:

  147. title : (41)02:11:35:095

  148. <strong>Stream #0:0: Video: hevc (Main), yuv420p(tv), 3840x2160, SAR 1:1 DAR 16:9, 23.98 fps, 23.98 tbr, 48003.07 tbn, 48003

  149. .07 tbc (default)

  150. Stream #0:1(eng): Audio: dts (DTS-HD MA), 48000 Hz, 5.1(side), fltp, 1536 kb/s (default)

  151. <span style="color:#33ff33;">Stream #0:2(eng): Audio: ac3, 48000 Hz, 5.1(side), fltp, 448 kb/s</span>

  152. Stream #0:3(spa): Audio: ac3, 48000 Hz, 5.1(side), fltp, 448 kb/s

  153. Stream #0:4(fra): Audio: ac3, 48000 Hz, 5.1(side), fltp, 448 kb/s

  154. Stream #0:5(por): Audio: ac3, 48000 Hz, 5.1(side), fltp, 448 kb/s

  155. Stream #0:6(rus): Audio: dts (DTS), 48000 Hz, 5.1(side), fltp, 768 kb/s

  156. Stream #0:7(tha): Audio: ac3, 48000 Hz, 5.1(side), fltp, 448 kb/s

  157. Stream #0:8(ukr): Audio: ac3, 48000 Hz, 5.1(side), fltp, 448 kb/s</strong>

  158. <span style="color:#ff0000;">At least one output file must be specified</span>

  159.  
  160. D:>

 

执行上面的命令,查看原始文件,发现它有8个音轨!,我们只提取第二个音轨流(上图标识为绿色的那个),命令如下所示:

 

[plain] view plain copy

 

  1. ffmpeg -i Xmen_HEVC_4K_Multi_Audio_28Mbps.mkv -map 0:2 audio_2.wav  
ffmpeg -i Xmen_HEVC_4K_Multi_Audio_28Mbps.mkv -map 0:2 audio_2.wav

 

14. 多个视频文件拼接

首先创建一个需要拼接的文件,例如 concat.txt,内容如下:

file 'orig_20160616113303_0.avi'
file 'orig_20160616113303_1.avi'

然后执行如下命令 

 

[plain] view plain copy

 

  1. ffmpeg  -f concat -i concat.txt  -c copy orig_20160616113303_merge.avi  
 ffmpeg  -f concat -i concat.txt  -c copy orig_20160616113303_merge.avi

 

FFMPEG常用参数说明

主要参数:

-i 设定输入流
-f 设定输出格式
-ss 开始时间
-formats  查看所有支持的容器格式
-codecs  查看所有编解码器
-filters      查看所有可用的filter
-pix_fmts 查看所有支持的图片格式
-sample_fmts 查看所有支持的像素格式
-i input_file 查看媒体文件input_file的信息(注意后面不再接其它参数,例如: ffmpeg -i test.mp4,查看 test.mp4视频信息)


视频参数:
-b 设定视频流量,默认为200Kbit/s
-r 设定帧速率,默认为25
-s 设定画面的宽与高
-aspect 设定画面的比例
-vn 不处理视频
-vcodec 设定视频编解码器,未设定时则使用与输入流相同的编解码器


音频参数:
-ar 设定采样率
-ac 设定声音的Channel数
-acodec 设定声音编解码器,未设定时则使用与输入流相同的编解码器
-an 不处理音频

 

小结

ffmpeg功能强大,参数配置众多,最好的方式查看它的命令行帮助文档,各个参数都有详细的说明,唯一的遗憾就是没有例子,对于初入媒体领域的人来说,门槛比较高。不明白的参数,可以多试试,再接合MediaInfo工具查看具体信息,通过VLC或者FFMPEG自带的 ffplay播放器播放,就容易理解了。

===========================================================================

part 8:

 

 

格式转换 (将file.avi 转换成output.flv)

     ffmpeg -i  file.avi   output.flv

       -i 表示输入文件 

 :现在有个视频video.avi,有个音频 audio.mp3,将其合并成output.avi

两个命令                     ( video2.avi 是中间文件 ,用完可删)

ffmpeg -i video.avi -vcodec copy -an video2.avi   
ffmpeg -i video2.avi -i audio.mp3 -vcodec copy -acodec copy output.avi

 -i 表示输入文件

  -vcodec copy 表示 force video codec ('copy' to copy stream) 这个不知怎么译 ,估计是直接copy 

  -acodec copy   这个说的应该是音频了   跟上面一样

-an : 表示  disable audio  估计是audio no 之类的缩写   表示去掉video.avi 原有的音频

方法2 好像可以直接指定两个输入文件 ,

ffmpeg -i /tmp/a.wav  -i /tmp/a.avi /tmp/a.avi   两个文件 的顺序很重

从视频里提取声音(声音与视频的分离)

 ffmpeg  -i 人生若只如初见.flv  -vn r.mp3  从flv 文件 中提取声音并保存为mp3 格式  

       -vn : 表示忽略视频 估计是video no 之类的缩写

 ffmpeg  -i 人生若只如初见.flv  -an  r.flv   只留视频不留声音 

    -an : 表示 忽略 声音 估计是audio no 之类的缩写

 

从视频里提取图片( )

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

 -ss 第8秒处 截一图

 

压缩mp3 文件

如果你觉得mp3 文件 有点大,想变小一点那么可以通过-ab 选项改变音频的比特率 (bitrate)

ffmpeg -i input.mp3 -ab 128 output.mp3    //这里将比特率设为128

你可以用file 命令查看一下源文件 的信息

z.mp3: Audio file with ID3 version 2.3.0, contains: MPEG ADTS, layer III, v1, 192 kbps, 44.1 kHz, Stereo

其中的192 kbps 就是这个东西

mp3中比特率的含义是:在压缩音频文件至mp3时,由压缩软件所确定数码文件在播放时每秒传 送给播放器大小,其单位是:千位/秒;英文的含义是:kbps - = kilobits per second。现在mp3文件的最高数位率是320 kbps。这样的文件体积很大,每分钟的音乐超过两兆字节。如果采用可变比特率(VBR)编码来生成mp3文件,获得与320 kbps相当音质,文件的体积会缩小25~50%。请注意:播放时间相同,而歌曲不同,所获的压缩mp3文件的一般不相同,这是因为VBR编码所生成的 mp3文件的大小不仅仅取决于播放时间的长度,还取决于源音频文件的其它因素。

 

录音(要有可用的麦克风,并且如果用alsa 的话,好像得安alsa-oss,重启) 

 ffmpeg  -f oss -i /dev/dsp   out.avi  (should  hava oss or alsa-oss)

 ffmpeg   -f  alsa -ac 2 -i hw:0, 0  out.avi   (should )

 ffmpeg   -f alsa -ac 2 -i pulse  (should hava PulseAudio)

 

   oss 是linux 下的声音相关的东西,与alsa 一样,不过oss 是商业的, 而/dev/dsp 是oss 用到的麦克的设备吧,可以这样理解

屏幕录像

ffmpeg -f x11grab -s xga -r 10 -i :0.0+0+0 wheer.avi 

ffmpeg -f x11grab  -s 320x240  -r 10 -i :0.0+100+200 wheer.avi

:0:0 表示屏幕(个人理解,因为系统变量$DISPLAY值就是:0.0)  而100,表示距左端100象素,200表示距上端200

-s 设置窗口大小

  -r 10 好像是设置频率,不懂

ffmpeg -f x11grab -s xga    -qscale 5    -r 10 -i :0.0+0+0 wheer.avi 

-qscale 8 设定画面质量,值 越小越好

屏幕录像,同时录音

ffmpeg -f oss -i /dev/dsp        -f x11grab -r 30 -s 1024x768 -i :0.0  output.mkv

ffmpeg   -ac 2 -f oss  -i  /dev/dsp   -f x11grab -r 30 -s 1024x768 -i :0.0 -acodec pcm_s16le -vcodec libx264 -vpre lossless_ultrafast -threads 0 output.mkv

看到这,你会发现这个命令有多强大,

如果我屏幕上打开了一个窗口,我只想录这个窗口的内容,如何确定这个窗口的坐标位置呢

可以用另外一个命令

xwininfo 输入这个命令后,用鼠标点选目标窗口,

就会出现目标窗口的坐标,宽高等一系列信息

Absolute upper-left X:  276
  Absolute upper-left Y:  57
  Relative upper-left X:  2
  Relative upper-left Y:  23
  Width: 742
  Height: 499
  Depth: 24
  Visual: 0x21
  Visual Class: TrueColor
  Border width: 0
  Class: InputOutput
  Colormap: 0x20 (installed)
  Bit Gravity State: NorthWestGravity
  Window Gravity State: NorthWestGravity
  Backing Store State: NotUseful
  Save Under State: no
  Map State: IsViewable
  Override Redirect State: no
  Corners:  +276+57  -262+57  -262-244  +276-244
  -geometry 80x24+274+34 看到这一行了没 ()

 

比如根据上面的信息

ffmpeg -f oss  -i  /dev/dsp      -f  x11grab -r 30  -s 1280x752 -i :0.0+0+23  output.avi 
Another thing you can change is the video frame rate (FPS). In the example above we used -r 30 which means capture at 30 FPS. You can change this value to whatever frame rate you want.

这个 -r 30 应该是每秒钟取样几次,估计是一秒截三十次屏,

切头去尾

 ffmpeg -ss 00:00:10 -t 00:01:22 -i 五月天-突然好想你.mp3  output.mp3 

只要 从第10秒开始截取,共截取1:22时长的内容

视频文件的连接,如两个flv 文件 连接成一

 

好像必须先将文件 转成mpg ,dv 等格式的文件后才能进行连接

  • 连接复数的AVI影片档之范例(在此范例中须一度暂时将AVI档转换成MPEG-1档(MPEG-1, MPEG-2 PS, DV格式亦可连接))
ffmpeg -i input1.avi -sameq inputfile_01.mpg -r 20

ffmpeg -i input2.avi -sameq inputfile_02.mpg  -r 20

cat inputfile_01.mpg inputfile_02.mpg > inputfile_all.mpg

ffmpeg -i inputfile_all.mpg -sameq outputfile.avi

上面将  input1.avi    input2.avi 合并成outputfile.avi

-sameq  表示  相同的质量(可能指的是画面,不太清楚)

 -r 指频率







=====================================================================下面是wiki 上给的几个例子

参数

FFmpeg可使用众多参数,参数内容会根据ffmpeg版本而有差异,使用前建议先参考参数及编解码器的叙述。此外,参数明细可用 ffmpeg -h 显示;编解码器名称等明细可用 ffmpeg -formats 显示。

下列为较常使用的参数。

[编辑 ] 主要参数

  • -i 设定输入档名。
  • -f 设定输出格式。
  • -y 若输出档案已存在时则覆盖档案。
  • -fs 超过指定的档案大小时则结束转换。
  • -ss 从指定时间开始转换。
  • -title 设定标题。
  • -timestamp 设定时间戳。
  • -vsync 增减Frame使影音同步。

[编辑 ] 影像参数

  • -b 设定影像流量,默认为200Kbit/秒。( 单位请参照下方注意事项 )
  • -r 设定FrameRate值,默认为25。
  • -s 设定画面的宽与高。
  • -aspect 设定画面的比例。
  • -vn 不处理影像,于仅针对声音做处理时使用。
  • -vcodec 设定影像影像编解码器,未设定时则使用与输入档案相同之编解码器。

[编辑 ] 声音参数

  • -ab 设定每Channel (最近的SVN 版为所有Channel的总合)的流量。( 单位 请参照下方注意事项 )
  • -ar 设定采样率。
  • -ac 设定声音的Channel数。
  • -acodec 设定声音编解码器,未设定时与影像相同,使用与输入档案相同之编解码器。
  • -an 不处理声音,于仅针对影像做处理时使用。
  • -vol 设定音量大小,256为标准音量。(要设定成两倍音量时则输入512,依此类推。)

[编辑 ] 注意事项

  • 以-b及ab参数设定流量时,根据使用的ffmpeg版本,须注意单位会有kbits/sec与bits/sec的不同。(可用ffmpeg -h显示说明来确认单位。)

例如,单位为bits/sec的情况时,欲指定流量64kbps时需输入‘ -ab 64k ’;单位为kbits/sec的情况时则需输入‘ -ab 64 ’。

  • 以-acodec及-vcodec所指定的编解码器名称,会根据使用的ffmpeg版本而有所不同。例如使用AAC编解码器时,会有输入aac与 libfaac的情况。此外,编解码器有分为仅供解码时使用与仅供编码时使用,因此一定要利用ffmpeg -formats 确 认输入的编解码器是否能运作。

[编辑 ] 范例

  • 将MPEG-1影片转换成MPEG-4格式之范例
ffmpeg -i inputfile.mpg -f mp4 -acodec libfaac -vcodec mpeg4 -b 256k -ab 64k outputfile.mp4

  • 将MP3声音转换成MPEG-4格式之范例
ffmpeg -i inputfile.mp3 -f mp4 -acodec libaac -vn -ab 64k outputfile.mp4

  • 将DVD的VOB档转换成VideoCD格式的MPEG-1档之范例
ffmpeg -i inputfile.vob -f mpeg -acodec mp2 -vcodec mpeg1video -s 352x240 -b 1152k -ab 128k outputfile.mpg
  • 将AVI影片转换成H.264格式的M4V档之范例
  • ffmpeg -i inputfile.avi -f mp4 -acodec libfaac -vcodec libx264 -b 512k -ab 320k outputfile.m4v
  • 将任何影片转换成东芝REGZA可辨识的MPEG2格式之范例
  • ffmpeg -i inputfile -target ntsc-svcd -ab 128k -aspect 4:3 -s 720x480 outputfile.mpg
  • 连接复数的AVI影片档之范例(在此范例中须一度暂时将AVI档转换成MPEG-1档(MPEG-1, MPEG-2 PSDV格式亦可连接)、
ffmpeg -i input1.avi -sameq inputfile_01.mpg

ffmpeg -i input2.avi -sameq inputfile_02.mpg

cat inputfile_01.mpg inputfile_02.mpg > inputfile_all.mpg

ffmpeg -i inputfile_all.mpg -sameq outputfile.avi

=============================================================================
http://ffmpeg.org/ffmpeg-doc.html

http://ubuntuforums.org/showthread.php?t=1392026
同时搞明白的一些问题在alsa 体系中声卡(也可能是麦克风,)叫hw:0,0 而在oss 体系中叫/dev/dsp (用词可能不太专业)  Linux在安装了声卡后,会有一些设备文件生成。采集数字样本的/dev/dsp文件,针对混音器的/dev/mixer文件,用于音序器的/dev/sequencer,/dev/audio文件一个基于兼容性考虑的声音设备文件。只要向dev/audio中输入wav文件就能发出声音。而对/dev/dsp文件读取就能得到WAV文件格式的声音文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值