ffmpeg簡介


1. ffmpeg下載

ffmpeg是一個開源軟件,可以在官方平台下載。可以下載源碼到具體平台編譯,也可以直接下載某平台已編譯好的軟件。

http://ffmpeg.org/download.html

ffmpeg的使用資料也在官網下載。文檔是html格式的英文文檔,可以使用谷歌打開,打開時谷歌翻譯,拿來做參考還可以。

2. ffmpeg軟件組件

ffmpeg下載下來之后有三個組件。

2.1     ffmpeg 媒體處理工具

2.2     ffplay 媒體播放器(ffplay 123.mp4即可播放一個媒體文件)

2.3     ffprobe 媒體流分析器(ffprobe 123.mp4即可分析該文件的詳細屬性)

我們使用的主要是ffmpeg來處理視頻源以獲得我們想要的視頻格式和類型。

3. ffmpeg轉碼過程

 

 

 4. ffmpeg語法簡介

ffmpeg使用的語法格式如下:

ffmpeg [global_options] {[input_file_options] -i ' INPUT_FILE'} ... {[output_file_options]' OUTPUT_FILE'} ...

使用ffmpeg –h等命令可以查看ffmpeg語法幫助。

從ffmpeg的幫助信息來看,ffmpeg有6個命令模塊。

4.1  打印信息(幫助/信息/能力值)

4.2  全局參數(影響整個程序,而不是單個文件)

4.3  每文件主要參數(文件的時間戳/元數據/幀數等信息)

4.4  視頻參數(視頻的錄制幀數/像素長款比/視頻調控/采樣率等)

4.5  音頻參數(音頻的錄制幀數/音頻通道/采樣率/過濾器等)

4.6  字幕參數(設置字幕幀數/開關字幕/固定字幕長度/預置字幕等)

詳細的解讀可以讀幫助文檔,也可以在linux系統下使用man ffmpeg看到更多的幫助信息。

5. ffmpeg常用命令雜記

5.1  視頻格式轉換

ffmpeg將視頻轉換為FLV格式:

ffmpeg.exe -i test.mp4 -ab 30 -ar 20000 -b 128K -r 25 -s 1920x1080 D:\test.flv

ffmpeg將視頻轉換為3GP格式:

ffmpeg -i test.mp4 -y -b 30 -s sqcif -r 10 -acodec amr_wb -ab 24 -ac 1 -ar 20000 test.3gp

轉碼解密的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’在輸出流的順序上定義了哪一路輸入流是用於每一個輸出流的。

5.2 視頻中的圖片操作

添加水印:

ffmpeg -i test.mp4 -i watermark.png -filter_complex "overlay=10:10" test.mp4

或(-vcodec libx264 可選):

ffmpeg -i test.ts -vcodec libx264 -vf “movie=logo.png[wm]; [in][wm]overlay=10:10[out]” out.ts

制作gif:

ffmpeg -ss 00:00:01 -t 10 -i test.ts -vf scale=1000:-1 -f gif -r 5 5fps.gif

截圖:

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

指定前30幀轉換成一個Animated Gif:

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

截取指定時間的縮微圖:

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

5.3視頻轉換

編碼轉換:

ffmpeg -i test.ts -vcodec libx265 -x265-params lossless test1.ts

改視頻碼率:

ffmpeg -i input.avi -b:v 1500K output.mp4

指定文件大小:

ffmpeg -i input.mp4  -fs 20M  output.mp4

改分辨率:

ffmpeg -i input.mp4 -strict -2 -s 640x480 output.mp4

調整為4:3的畫面比例:

ffmpeg -i test.mp4 -s 1920x1080 -aspect 4:3 output.mp4

多個視頻拼接:

ffmpeg -i "concat:test1.ts|test2.ts|test3.ts|test4.ts" -c copy test5.ts

分割視頻:

ffmpeg -ss 00:07:00 -t 00:58:58 -i test.mp4 -vcodec copy -acodec copy test1.mp4

單獨輸出音/視頻:

單獨輸出視頻(輸出視頻無聲音):

ffmpeg -i test.mp4 -vcodec copy -an testvideo.mp4

單獨輸出音頻(輸出音頻無畫面):

ffmpeg -i test.mp4 -vcodec copy -vn testaudio.mp3

5.4 視頻切片

切片生成HLS文件:

ffmpeg -re -i test.ts -codec:v libx264 -codec:a ac3 -map 0 -f ssegment -segment_format mpegts -segment_list playlist.m3u8 -segment_list_flags +live -segment_list_size 0 -segment_time 10 out%03d.ts

制作點播分片:

ffmpeg -i input.mp4 -vcodec copy -acodec copy -hls_time 10 -hls_list_size 0 output.m3u8

5.5 視頻錄制

使用ffmpeg錄像屏幕:

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

重新調整視頻尺寸大小:

ffmpeg -vcodec mpeg4 -b 1000 -r 10 -g 300 -i D:\\test.avi -s 800×600 D:\\test-800-600.avi

錄制攝像頭的信號:

ffmpeg -f vfwcap -i 0 -r 25 -vcodec libx264 output.mp4

錄制視頻同時切片:

ffmpeg -f vfwcap -i 0 -codec:v libx264  -map 0 -f ssegment -segment_format mpegts -segment_list playlist.m3u8 -segment_list_flags +live -segment_list_size 0 -segment_time 10 out%03d.ts

5.6 ffmpeg推流

格式:

ffmpeg -i rtmp://*******(源地址) -c:v copy -c:a copy -f flv -y rtmp://*******(服務器地址)

示例:

ffmpeg  -loglevel 48 -v verbose -thread_queue_size 512 -threads 2 -max_delay 0   -re  -stream_loop -1 -i /test.mp4  -bufsize 10m -reorder_queue_size 10000  -c:v copy -c:a copy -bsf:a aac_adtstoasc -flags +global_header -flvflags aac_seq_header_detect -f flv rtmp://192.168.10.100:1935/default_tv/test

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM