在做音視頻的項(xiàng)目當(dāng)中,常常遇到音視頻不同步,編碼和解碼的出錯(cuò)的等等問(wèn)題,這時(shí)候就需要將對(duì)應(yīng)出問(wèn)題的視頻數(shù)據(jù)給dump下來(lái)進(jìn)行分析塌忽,使用ffmpeg的各種工具能夠更好的分析對(duì)應(yīng)的音視頻的文件。
ffmpeg
ffmpeg工具功能非常強(qiáng)大失驶,主要用于音視頻轉(zhuǎn)碼土居。
使用規(guī)則是:
ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url} ...
1.流說(shuō)明符
stream_index
表示流的編號(hào),是從0開(kāi)始的突勇,一般使用的時(shí)候都是配合streamType進(jìn)行使用的装盯。
示例
比如-codec:a :1 ac3,表示指定第二路音頻流使用ac3進(jìn)行編碼,不指定stream_index的話甲馋,就表示所有的流埂奈,-b:a 128k,表示指定所有的音頻流都用128k的碼率定躏,-codec copy 或者-codec:copy則表示將只是將流復(fù)制账磺,并沒(méi)有重新編碼
stream_type
p:program_id[:stream_index] or p:program_id[:stream_type[:stream_index]] or p:program_id??key[:value]"
第一種情況,匹配指定的stream_index流痊远;
第二種情況垮抗,匹配指定的stream_type和指定的stream_index的流;
第三種情況碧聪,匹配指定metadata的流
m:key[:value]
跟指定了metadata的key和value的流進(jìn)行匹配冒版,value沒(méi)有給出的話,匹配有對(duì)應(yīng)的key的流逞姿。
u
跟可用配置的流進(jìn)行匹配辞嗡。
2.通用選項(xiàng)
這些選項(xiàng)都在ff*的工具都通用
-L
顯示證書(shū)
-h,-?,-help,–help [arg]
幫助說(shuō)明
arg的取值
arg取值 說(shuō)明
-version
顯示版本
-formats、-demuxers滞造、-muxers续室、-devices、-codecs谒养、-decoders挺狰、-encoders、-bsfs买窟、-protocols丰泊、-filters、-pix_fmts始绍、-sample_fmts趁耗、-layouts-colors、-sources device[,opt1=val1[,opt2=val2]…]疆虚、-sinks device[,opt1=val1[,opt2=val2]…]
上面參數(shù)都顯示類(lèi)的,都是顯示可用的參數(shù),bsfs是bitstream fitlers
-loglevel [flags+]loglevel | -v [flags+]loglevel
loglevel有如下的值
-report
將所有的日志給dump下來(lái)径簿,文件名字規(guī)則為program-YYYYMMDD-HHMMSS.log
-hide_bander
壓制打印的banner
-cpuflags flags
3.主要的選項(xiàng)
-f fmt (input/output)
指定輸入輸出的格式
-i url (input)
輸入的文件格式
-y (global)
不在詢問(wèn)的重寫(xiě)輸出文件
-n (global)
不重寫(xiě)輸出文件
-stream_loop number(input)
設(shè)置輸入的流是否需要循環(huán)罢屈,Loop 0表示不loop,loop -l表示無(wú)限loop
-c[:stream_specifier] codec (input/output,per-stream)
-codec[:stream_specifier] codec (input/output,per-stream)
指定轉(zhuǎn)碼的編碼器
ffmpeg -i INPUT -map 0 -c:v libx264 -c:a copy OUTPUT
-map 0表示對(duì)所有的視頻流都生效篇亭,-c:v 表示指定視頻流的編碼器缠捌,-c:a 表示對(duì)音頻流的只是復(fù)制而已桥爽。
ffmpeg -i INPUT -map 0 -c copy -c:v:1 libx264 -c:a:137 libvorbis OUTPUT
-t duration (input/output)
表示限制讀取的數(shù)據(jù)的時(shí)間長(zhǎng)度
-to position (input/output)
表示停止讀取源文件的位置
-fs limit_size (output)
顯示輸出文件的大小
-ss position (input/output)
指定輸入或者輸出文件的起始位置
-sseof position (input)
指定輸入文件的結(jié)束位置
-itsoffset offset (input)
設(shè)置輸入文件的時(shí)間偏移
-timestamp date (output)
設(shè)置錄制的時(shí)間戳
-metadata[:metadata_specifier] key=value (output,per-metadata)
添加輸入文件的metadata信息
ffmpeg -i in.avi -metadata title="my title" out.flv
ffmpeg -i INPUT -metadata:s:a:0 language=eng OUTPUT
-disposition[:stream_specifier] value (output,per-stream)
設(shè)置流的配置
下面有流的配置
default
dub
original
comment
lyrics
karaoke
forced
hearing_impaired
visual_impaired
clean_effects
attached_pic
captions
descriptions
dependent
metadata
示例
設(shè)置第二路音頻流為默認(rèn)的流
ffmpeg -i in.mkv -c copy -disposition:a:1 default out.mkv
-program [title=title:][program_num=program_num:]st=stream[:st=stream…] (output)
創(chuàng)建指定的項(xiàng)目
-target type (output)
設(shè)置輸出的文件類(lèi)型
vcd, svcd, dvd, dv, dv50等等類(lèi)型丢郊,有可能要使用這些格式前綴pal-, ntsc- or film-
示例
ffmpeg -i myfile.avi -target pal-vcd /tmp/vcd.mpg
-dn (output)
不轉(zhuǎn)碼data數(shù)據(jù)
-dframes number (output)
設(shè)置data數(shù)據(jù)的幀率
-frames[:stream_specifier] framecount (output,per-stream)
設(shè)置達(dá)到某個(gè)幀數(shù),然后停止轉(zhuǎn)碼
-q[:stream_specifier] q (output,per-stream)
-qscale[:stream_specifier] q (output,per-stream)
用來(lái)解決高質(zhì)量的轉(zhuǎn)碼
-filter[:stream_specifier] filtergraph (output,per-stream)
使用指定的濾鏡效果,filtergraph是過(guò)濾器圖
-filter_script[:stream_specifier] filename (output,per-stream)
和上面的參數(shù)一致
-filter_threads nb_threads (global)
定義處理filter的線程數(shù)
-pre[:stream_specifier] preset_name (output,per-stream)
設(shè)置流的預(yù)先配置
-stats (global)
打印轉(zhuǎn)碼的狀態(tài)日志
-progress url (global)
將處理進(jìn)度打印到文件當(dāng)中
-stdin
開(kāi)啟標(biāo)準(zhǔn)輸入輸出
-debug_ts (global) 或者-fdebug ts
打印轉(zhuǎn)碼時(shí)間戳衙猪,用來(lái)測(cè)試或者debug的
-attach filename (output)
添加一個(gè)附屬的文件到輸出文件中
ffmpeg -i INPUT -attach DejaVuSans.ttf -metadata:s:2 mimetype=application/x-truetype-font out.mkv
-dump_attachment[:stream_specifier] filename (input,per-stream)
將附屬文件給dump下來(lái)
ffmpeg -dump_attachment:t:0 out.ttf -i INPUT
3.視頻的選項(xiàng)
-vframes number (output)
設(shè)置輸出文件的幀數(shù)
-r[:stream_specifier] fps (input/output,per-stream)
設(shè)置輸出的幀率
-s[:stream_specifier] size (input/output,per-stream)
設(shè)置輸出文件的大小柔昼,這里是等比例縮放的
-aspect[:stream_specifier] aspect (output,per-stream)
設(shè)置輸出文件視頻寬高比例
-vn (output)
不開(kāi)視頻轉(zhuǎn)碼
-vcodec codec (output)或者-codec:v
設(shè)置視頻編碼的編碼器
-pass[:stream_specifier] n (output,per-stream)
選擇pass的數(shù)量
ffmpeg -i foo.mov -c:v libxvid -pass 1 -an -f rawvideo -y NUL
ffmpeg -i foo.mov -c:v libxvid -pass 1 -an -f rawvideo -y /dev/null
-passlogfile[:stream_specifier] prefix (output,per-stream)
設(shè)置pass的log文件
-vf filtergraph (output)
設(shè)置轉(zhuǎn)碼的變換的規(guī)則
//按照寬高最小值進(jìn)行視頻的轉(zhuǎn)碼為240p
ffmpeg -i output_p_540.mp4 -vf scale="floor(iw/min(iw\,ih)*240/2)*2:floor(ih/min(iw\,ih)*240/2)*2" output_p_480.mp4
4.高級(jí)的視頻轉(zhuǎn)碼選項(xiàng)
-pix_fmt[:stream_specifier] format (input/output,per-stream)
設(shè)置輸入或者輸出的的pix_fmt,可以用-pix_fmts顯示可用的pix_fmt
-sws_flags flags (input/output)
設(shè)置圖片變換的flags
-rc_override[:stream_specifier] override (output,per-stream)
指定幀率控制的間隔
-ilme
強(qiáng)制編碼器的交錯(cuò)支持
-psnr
計(jì)算PSNR即壓縮后的視頻質(zhì)量
-vstats
dump轉(zhuǎn)碼的日志哑芹,到 vstats_HHMMSS.log中
-vstats_file file
dump轉(zhuǎn)碼的日志到指定的文件
-vstats_version file
version = 1 :
frame= %5d q= %2.1f PSNR= %6.2f f_size= %6d s_size= %8.0fkB time= %0.3f br= %7.1fkbits/s avg_br= %7.1fkbits/s
version > 1:
out= %2d st= %2d frame= %5d q= %2.1f PSNR= %6.2f f_size= %6d s_size= %8.0fkB time= %0.3f br= %7.1fkbits/s avg_br= %7.1fkbits/s
-top[:stream_specifier] n (output,per-stream)
top=1/bottom=0/auto=-1 field first
-dc precision
內(nèi)部精度
-vtag fourcc/tag (output)
強(qiáng)制將視頻為四字節(jié)代碼?捕透?聪姿?
-qphist (global)
顯示QP的柱形圖
-force_key_frames[:stream_specifier] time[,time…] (output,per-stream)
-force_key_frames[:stream_specifier] expr:expr (output,per-stream)
強(qiáng)加關(guān)鍵幀到指定時(shí)間戳
-copyinkf[:stream_specifier] (output,per-stream)
stream copy的時(shí)候,同時(shí)將不是第一個(gè)關(guān)鍵幀乙嘀,前面的所有幀都拷貝過(guò)去
-init_hw_device type[=name][:device[,key=value…]]
-init_hw_device type[=name]@source
初始化硬編碼設(shè)備
-init_hw_device list
查看ffmpeg支持的硬編碼設(shè)備
-filter_hw_device name
通過(guò)硬編碼設(shè)備調(diào)用指定的濾鏡
-hwaccel[:stream_specifier] hwaccel (input,per-stream)
使用硬件加速去解碼流
-hwaccel_device[:stream_specifier] hwaccel_device (input,per-stream)
選擇一個(gè)設(shè)備去進(jìn)行硬件加速
-hwaccels
列舉FFmpeg支持的硬件加速
5.音頻的選項(xiàng)
-aframes number (output)
設(shè)置輸出的音頻幀數(shù)
-ar[:stream_specifier] freq (input/output,per-stream)
設(shè)置音頻的采樣率
-aq q (output)
設(shè)置音頻的質(zhì)量
-ac[:stream_specifier] channels (input/output,per-stream)
設(shè)置音頻的channel count
-an (output)
關(guān)閉音頻的轉(zhuǎn)碼
-acodec codec (input/output)或者-codec:a
設(shè)置音頻硬編碼器
-sample_fmt[:stream_specifier] sample_fmt (output,per-stream)
設(shè)置采樣的格式
-af filtergraph (output)
設(shè)置音頻的轉(zhuǎn)碼的濾鏡
6.高級(jí)音頻的選項(xiàng)
-atag fourcc/tag (output)或者-tag:a
強(qiáng)制音頻的選項(xiàng)
-guess_layout_max channels (input,per-stream)
猜測(cè)音頻的channel
7.字幕選項(xiàng)
-scodec codec (input/output)
設(shè)置字幕的編碼器
-sn (output)
不開(kāi)啟字幕轉(zhuǎn)碼
8.高級(jí)字幕選項(xiàng)
-fix_sub_duration
解決字幕時(shí)間
-canvas_size size
設(shè)置字幕顯示的畫(huà)布大小
9.高級(jí)選項(xiàng)
map [-]input_file_id[:stream_specifier][?][,sync_file_id[:stream_specifier]] | [linklabel] (output)
指定一個(gè)或者更多的輸入的流輸出到文件中
第一個(gè)-map選項(xiàng)末购,對(duì)應(yīng)輸出文件的流0,第二個(gè)-map選項(xiàng)虎谢,對(duì)應(yīng)輸出文件的流1盟榴,以此類(lèi)推。
[-]選項(xiàng)婴噩,是指除了指定流以外的所有流
?選項(xiàng)擎场,允許匹配到流
安排所有流從輸入到輸出文件
ffmpeg -i INPUT -map 0 output
假如有2路音頻流在輸入文件中,這些流都被指定為0:0 或者0:1讳推,用-map來(lái)選擇哪路流配置到輸出文件中,下面是設(shè)置第2路音頻流顶籽,到音頻流中
ffmpeg -i INPUT -map 0:1 out.wav
選擇第一個(gè)文件的index為2的流,并選擇第二個(gè)文件的index為6的流到银觅,輸出文件中
ffmpeg -i a.mov -i b.mov -c copy -map 0:2 -map 1:6 out.mov
選擇所有的視頻流和第3路音頻流到輸出文件
ffmpeg -i INPUT -map 0:v -map 0:a:2 OUTPUT
選擇除了第二路音頻流的所有的流礼饱,都到輸出文件中
ffmpeg -i INPUT -map 0 -map -0:a:1 OUTPUT
選擇所有的視頻流和音頻流,假如這個(gè)文件沒(méi)有音頻流也沒(méi)有問(wèn)題
ffmpeg -i INPUT -map 0:v -map 0:a? OUTPUT
選擇英文的音頻流
ffmpeg -i INPUT -map 0:m:language:eng OUTPUT
-ignore_unknown
忽略未知類(lèi)型的流拷貝錯(cuò)誤
-copy_unknown
忽略拷貝流失敗
map_channel [input_file_id.stream_specifier.channel_id|-1][?][:output_file_id.stream_specifier]
-1 是可以選擇靜音聲道
選擇輸出的音頻的聲道
? 可以不匹配到聲道
示例
假如輸入文件是立體聲道音頻文件究驴,通過(guò)下面命令變成雙聲道的音頻文件
ffmpeg -i INPUT -map_channel 0.0.1 -map_channel 0.0.0 OUTPUT
靜音第一個(gè)聲道并且保持第二個(gè)聲道
ffmpeg -i INPUT -map_channel -1 -map_channel 0.0.1 OUTPUT
-map_metadata[:metadata_spec_out] infile[:metadata_spec_in] (output,per-metadata)
設(shè)置輸出文件的metadata
metadata可以由下面的表單
g
全局metadata
s[:stream_spec]
流index的metadata
c:chapter_index
每個(gè)chapter的metadata
p:program_index
每個(gè)program的metadata
示例
拷貝輸入文件的第一路流的metadata到輸出文件的全局metadata
ffmpeg -i in.ogg -map_metadata 0:s:0 out.mp3
拷貝全局的metadata到音頻流中
ffmpeg -i in.mkv -map_metadata:s:a 0:g out.mkv
-map_chapters input_file_index (output)
從輸入文件拷貝chapters到下個(gè)輸出文件
-benchmark (global)
顯示編碼結(jié)束標(biāo)記
-benchmark_all (global)
顯示標(biāo)記信息在編碼中
-timelimit duration (global)
在某個(gè)時(shí)間點(diǎn)退出FFmpeg
-dump (global)
dump所有的輸入到到文件中
-hex (global)
dump文件是镊绪,同時(shí)dump payload
-re (input)
輸出的幀率和輸入的文件保持一致
-loop_output number_of_times
重復(fù)這個(gè)文件,比如像gif文件
-vsync parameter
視頻同步方法
parameter的取值
0, passthrough
從解復(fù)用直接傳遞到復(fù)用中去
1, cfr
幀會(huì)復(fù)用并且丟棄去達(dá)到指定的幀率
2,vfr
幀會(huì)直接按照時(shí)間戳傳遞過(guò)去洒忧,并且丟棄區(qū)具有相同時(shí)間戳的視頻數(shù)據(jù)幀
drop
所有的幀都傳遞過(guò)去蝴韭,但是基于新的幀率得到新的時(shí)間戳
-1, auto
依賴(lài)復(fù)用器的能力,選擇1到2之間
-frame_drop_threshold parameter
丟幀的界限
-async samples_per_second
音頻同步的方法
-copyts
不處理輸入的時(shí)間戳熙侍,保持它們的值不收損害
-start_at_zero
當(dāng)使用上面的選項(xiàng)榄鉴,變化輸入的文件的時(shí)間戳履磨,所以他們其實(shí)時(shí)間為0
-copytb mode
在流拷貝的時(shí)候,設(shè)置編碼器的時(shí)間基點(diǎn)
1
使用解復(fù)用的時(shí)間基點(diǎn)
0
使用解碼器的時(shí)間基點(diǎn)
-1
自動(dòng)選擇時(shí)間基點(diǎn)庆尘,保證一個(gè)正常的輸出
-enc_time_base[:stream_specifier] timebase (output,per-stream)
設(shè)置編碼器的時(shí)間基點(diǎn)
0
設(shè)置一個(gè)默認(rèn)的時(shí)間基點(diǎn)值
-1
盡量使用出入流的時(shí)間基點(diǎn)
'> 0
使用指定的值作為時(shí)間基點(diǎn)
-bitexact (input/output)
啟動(dòng)位精確模式剃诅,給解復(fù)用器和復(fù)用器
-shortest (output)
使用最短的流進(jìn)行編碼
-dts_delta_threshold
時(shí)間戳不連續(xù)的閾值
-muxdelay seconds (input)
設(shè)置最大的解碼延遲
-muxpreload seconds (input)
設(shè)置初始化解碼延遲
-streamid output-stream-index:new-value (output)
賦值一個(gè)新的流id的值到輸出流中
ffmpeg -i inurl -streamid 0:33 -streamid 1:36 out.ts
-bsf[:stream_specifier] bitstream_filters (output,per-stream)
設(shè)置位流的濾鏡給匹配的流
ffmpeg -i h264.mp4 -c:v copy -bsf:v h264_mp4toannexb -an out.h264
ffmpeg -i file.mov -an -vn -bsf:s mov2textsub -c:s copy -f rawvideo sub.txt
-tag[:stream_specifier] codec_tag (input/output,per-stream)
在指定的加個(gè)tag
-timecode hh:mm:ssSEPff
設(shè)置指定的時(shí)間點(diǎn)去寫(xiě)入
ffmpeg -i input.mpg -timecode 01:02:03.04 -r 30000/1001 -s ntsc output.mpg
-filter_complex filtergraph (global)
定義復(fù)雜的濾鏡器圖
覆蓋一張圖到視頻上面
ffmpeg -i video.mkv -i image.png -filter_complex '[0:v][1:v]overlay[out]' -map
'[out]' out.mkv
[0:v]連接到第一個(gè)視頻流在第一個(gè)輸入的文件,連接到第一個(gè)輸入輸入的覆蓋濾鏡驶忌。
假設(shè)這里只有一個(gè)視頻流的輸入文件矛辕,我們可以刪除輸入的標(biāo)志,所以上面等同于
ffmpeg -i video.mkv -i image.png -filter_complex 'overlay[out]' -map
'[out]' out.mkv
此外付魔,我們可以忽略輸出的標(biāo)記和單個(gè)輸出到濾鏡器聊品,并自動(dòng)添加到輸出文件。
ffmpeg -i video.mkv -i image.png -filter_complex 'overlay' out.mkv
完成5s的純紅視頻几苍,可以只用顏色源
ffmpeg -filter_complex 'color=c=red' -t 5 out.mkv
-filter_complex_threads nb_threads (global)
定義多少個(gè)線程進(jìn)行濾鏡的處理翻屈,默認(rèn)的數(shù)值是CPU的位數(shù)
-lavfi filtergraph (global)
定義一個(gè)復(fù)雜的濾鏡器圖
-filter_complex_script filename (global)
這個(gè)選項(xiàng)同-filter_complex,唯一不同的是從文件進(jìn)行讀取規(guī)則
-accurate_seek (input)
這個(gè)選項(xiàng)開(kāi)啟和關(guān)閉精確的seeking,配合-ss選項(xiàng)擦剑,并使用-noaccurate_seek進(jìn)行關(guān)閉
-seek_timestamp (input)
這個(gè)選項(xiàng)是開(kāi)啟或者關(guān)閉通過(guò)時(shí)間戳進(jìn)行seeking
-thread_queue_size size (input)
這個(gè)選項(xiàng)設(shè)置最大的數(shù)據(jù)隊(duì)列妖胀,當(dāng)讀取文件或者設(shè)備的時(shí)候,要低延時(shí)和高碼率的直播流惠勒,數(shù)據(jù)包可能會(huì)被丟棄赚抡,當(dāng)沒(méi)有及時(shí)被讀取到,提高這個(gè)值可以避免發(fā)送這種情況纠屋。
-sdp_file file (global)
打印sdp的信息到輸出的流
-discard (input)
允許丟棄指定的流或者幀在解復(fù)用的時(shí)候
none
不丟棄任何幀
default
默認(rèn)涂臣,不丟幀
noref
丟所有非參考幀
bidir
丟所有雙向預(yù)測(cè)幀
nokey
丟了除了關(guān)鍵幀之外的所有幀
all
丟所有的幀
-xerror (global)
出錯(cuò)是停止
-max_muxing_queue_size packets (output,per-stream)
編碼的時(shí)候,設(shè)置復(fù)用的包的隊(duì)列的大小
硬編字幕在DVB-T記錄到MPEG-TS格式售担,延時(shí)字幕為1s鐘
ffmpeg -i input.ts -filter_complex \
'[#0x2ef] setpts=PTS+1/TB [sub] ; [#0x2d0] [sub] overlay' \
-sn -map '#0x2dc' output.mkv
11.例子
11.1 音視頻抓取
如果你指定輸入的格式和設(shè)備赁遗,F(xiàn)Fmpeg能夠直接抓取視頻或者音頻
ffmpeg -f oss -i /dev/dsp -f video4linux2 -i /dev/video0 /tmp/out.mpg
或者使用ALSA的音頻輸入源替代OOS
ffmpeg -f alsa -ac 1 -i hw:1 -f video4linux2 -i /dev/video0 /tmp/out.mpg
11.2 X11抓取
通過(guò)x11顯示進(jìn)行抓取
ffmpeg -f x11grab -video_size cif -framerate 25 -i :0.0 /tmp/out.mpg
0.0是顯示屏的坐標(biāo)X11 Server,和DISPLAY環(huán)境變量相似
ffmpeg -f x11grab -video_size cif -framerate 25 -i :0.0+10,20 /tmp/out.mpg
11.3 音視頻文件格式變換
使用YUV文件作為輸入源
ffmpeg -i /tmp/test%d.Y /tmp/out.mpg
這會(huì)使用這些文件
/tmp/test0.Y, /tmp/test0.U, /tmp/test0.V,
/tmp/test1.Y, /tmp/test1.U, /tmp/test1.V, etc...
使用原始YUV420P的文件
ffmpeg -i /tmp/test.yuv /tmp/out.avi
輸出YUV420P文件
ffmpeg -i mydivx.avi hugefile.yuv
設(shè)置各自輸入文件和輸出文件
ffmpeg -i /tmp/a.wav -s 640x480 -i /tmp/a.yuv /tmp/a.mpg
可以做音頻和視頻轉(zhuǎn)換
ffmpeg -i /tmp/a.wav -ar 22050 /tmp/a.mp2
同一時(shí)間進(jìn)行幾種格式的轉(zhuǎn)換
ffmpeg -i /tmp/a.wav -map 0:a -b:a 64k /tmp/a.mp2 -map 0:a -b:a 128k /tmp/b.mp2
從視頻里面截取圖片
ffmpeg -i foo.avi -r 1 -s WxH -f image2 foo-%03d.jpeg
通過(guò)使用-frames:v或者-t 族铆,進(jìn)行限制輸出的幀數(shù)岩四,或者通過(guò)-ss僅僅想視頻視頻
ffmpeg -f image2 -framerate 12 -i foo-%03d.jpeg -s WxH foo.avi
當(dāng)導(dǎo)入一個(gè)圖片集合,-i 同時(shí)可以支持的
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.nu
強(qiáng)制輸出CBR視頻輸出
ffmpeg -i myfile.avi -b 4000k -minrate 4000k -maxrate 4000k -bufsize 1835k out.m2v
四個(gè)選項(xiàng)Imin,Imax,mblmin和mblmax使用‘lambda’單元
ffmpeg -i src.ext -lmax 21*QP2LAMBDA dst.ext
12.實(shí)際項(xiàng)目使用的命令
AAC轉(zhuǎn)PCM文件
ffmpeg -i input.aac -f s16le -ar 44100 -acodec pcm_s16le output.pcm
PCM文件轉(zhuǎn)AAC
ffmpeg -f s16le -ar 44100 -ac 2 -acodec pcm_s16le -i input. output.wav
FFmpeg推拉流命令
//推流本地文件到服務(wù)器
ffmpeg -re -i /Users/xu/Desktop/bangbangbang.mp4 -vcodec libx264 -acodec aac -f flv rtmp://localhost:1935/rtmplive/home
//本地桌面錄制或者分享
ffmpeg -f avfoundation -i "1" -vcodec libx264 -preset ultrafast -acodec libfaac -f flv rtmp://localhost:1935/rtmplive/home
//桌面+麥克風(fēng)
ffmpeg -f avfoundation -i "1:0" -vcodec libx264 -preset ultrafast -acodec libmp3lame -ar 44100 -ac 1 -f flv rtmp://localhost:1935/rtmplive/home
//桌面+麥克風(fēng)+攝像頭
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/rtmplive/home
FFmpeg的視頻分辨率轉(zhuǎn)換公式
ffmpeg -i output_p_540.mp4 -vf scale="floor(iw/min(iw\,ih)*240/2)*2:floor(ih/min(iw\,ih)*240/2)*2" output_p_480.mp4
FFmpeg進(jìn)行轉(zhuǎn)碼
ffmpeg -i input_ac3.mp4 -vcodec copy -acodec aac -f flv output.flv