1 原始視頻信息
通過(guò)ffmpeg -i命令查看視頻基本信息
ffmpeg -i input.mp4
ffmpeg version 6.1-essentials_build-www.gyan.dev Copyright (c) 2000-2023 the FFmpeg developers
built with gcc 12.2.0 (Rev10, Built by MSYS2 project)
configuration: --enable-gpl --enable-version3 --enable-static --pkg-config=pkgconf --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-zlib --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-sdl2 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libaom --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-libfreetype --enable-libfribidi --enable-libharfbuzz --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-dxva2 --enable-d3d11va --enable-libvpl --enable-libgme --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libtheora --enable-libvo-amrwbenc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-librubberband
libavutil 58. 29.100 / 58. 29.100
libavcodec 60. 31.102 / 60. 31.102
libavformat 60. 16.100 / 60. 16.100
libavdevice 60. 3.100 / 60. 3.100
libavfilter 9. 12.100 / 9. 12.100
libswscale 7. 5.100 / 7. 5.100
libswresample 4. 12.100 / 4. 12.100
libpostproc 57. 3.100 / 57. 3.100
[mov,mp4,m4a,3gp,3g2,mj2 @ 0000024c98921a00] st: 0 edit list: 1 Missing key frame while searching for timestamp: 1000
[mov,mp4,m4a,3gp,3g2,mj2 @ 0000024c98921a00] st: 0 edit list 1 Cannot find an index entry before timestamp: 1000.
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input.mp4':
Metadata:
major_brand : mp42
minor_version : 1
compatible_brands: mp42hvc1CAEP
make :
make-eng :
model :
model-eng :
creation_time : 2023-09-14T07:26:06.000000Z
timecode : 00:25:37:02
Duration: 00:07:01.44, start: 0.000000, bitrate: 214391 kb/s
Stream #0:0[0x1](eng): Video: hevc (Rext) (hvc1 / 0x31637668), yuv422p10le(tv, bt709), 4096x2160, 214092 kb/s, 50 fps, 50 tbr, 50k tbn (default)
Metadata:
creation_time : 2023-09-14T07:26:06.000000Z
vendor_id : [0][0][0][0]
Stream #0:1[0x2](eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 253 kb/s (default)
Metadata:
creation_time : 2023-09-14T07:26:06.000000Z
vendor_id : [0][0][0][0]
Stream #0:2[0x3](eng): Data: none (tmcd / 0x64636D74), 1 kb/s (default)
Metadata:
creation_time : 2023-09-14T07:26:06.000000Z
timecode : 00:25:37:02
At least one output file must be specified
通過(guò)命令查看,原始視頻信息
Video: hevc (Rext) (hvc1 / 0x31637668), yuv422p10le(tv, bt709), 4096x2160, 214092 kb/s, 50 fps, 50 tbr, 50k tbn (default)
分辨率為4096x2160,碼率214092k, 幀率50
2 ffmpeg視頻轉(zhuǎn)換-保持清晰度
ffmpeg -i input.mp4 -r 25 -qscale 0 -q:v 1 -c:a aac -b:v 20000k -vf scale=2048:-1 output.mp4
-qscale value:使用固定的視頻量化標(biāo)度(VBR),以value質(zhì)量為基礎(chǔ)的VBR,取值0.01-255,越小質(zhì)量越好
-
-q:v:表示存儲(chǔ)jpeg的圖像質(zhì)量
-
-b:v:設(shè)置輸出文件的視頻比特率(碼率)
-
-c:a:指定音頻編碼器
-
-r 輸出幀率
-
-vf:設(shè)置視頻濾鏡,scale=2048:-1,寬度為2048,保持長(zhǎng)寬比
3 查看轉(zhuǎn)換視頻
ffmpeg -i output.mp4
ffmpeg version 6.1-essentials_build-www.gyan.dev Copyright (c) 2000-2023 the FFmpeg developers
built with gcc 12.2.0 (Rev10, Built by MSYS2 project)
configuration: --enable-gpl --enable-version3 --enable-static --pkg-config=pkgconf --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-zlib --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-sdl2 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libaom --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-libfreetype --enable-libfribidi --enable-libharfbuzz --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-dxva2 --enable-d3d11va --enable-libvpl --enable-libgme --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libtheora --enable-libvo-amrwbenc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-librubberband
libavutil 58. 29.100 / 58. 29.100
libavcodec 60. 31.102 / 60. 31.102
libavformat 60. 16.100 / 60. 16.100
libavdevice 60. 3.100 / 60. 3.100
libavfilter 9. 12.100 / 9. 12.100
libswscale 7. 5.100 / 7. 5.100
libswresample 4. 12.100 / 4. 12.100
libpostproc 57. 3.100 / 57. 3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'output.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf60.16.100
Duration: 00:07:01.52, start: 0.000000, bitrate: 20144 kb/s
Stream #0:0[0x1](eng): Video: h264 (High 4:2:2) (avc1 / 0x31637661), yuv422p10le(tv, bt709, progressive), 2048x1080, 20009 kb/s, 25 fps, 25 tbr, 12800 tbn (default)
Metadata:
handler_name : VideoHandler
vendor_id : [0][0][0][0]
encoder : Lavc60.31.102 libx264
timecode : 00:25:37:02
Stream #0:1[0x2](eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
Metadata:
handler_name : SoundHandler
vendor_id : [0][0][0][0]
Stream #0:2[0x3](eng): Data: none (tmcd / 0x64636D74)
Metadata:
handler_name : TimeCodeHandler
timecode : 00:25:37:02
At least one output file must be specified
轉(zhuǎn)換后的視頻參數(shù)如下:
Video: h264 (High 4:2:2) (avc1 / 0x31637661), yuv422p10le(tv, bt709, progressive), 2048x1080, 20009 kb/s, 25 fps, 25 tbr, 12800 tbn (default)
分辨率為2048x1080,碼率20009k, 幀率25
?4 FFmpeg介紹
FFmpeg項(xiàng)目由 Fabrice Bellard在2000年創(chuàng)立。到目前為止,F(xiàn)Fmpeg項(xiàng)目的開發(fā)者仍然與VLC、MPV、dav1d、x264等多媒體開源項(xiàng)目有著廣泛的重疊。Ffmpeg(FastForward Mpeg)是一款遵循GPL的開源軟件,在音視頻處理方面表現(xiàn)十分優(yōu)秀,幾乎囊括了現(xiàn)存所有的視音頻格式的編碼,解碼、轉(zhuǎn)碼、混合、過(guò)濾及播放。作為最受歡迎的視頻和圖像處理軟件,它被來(lái)自各行各業(yè)的不同公司所廣泛使用。同時(shí)也是一款跨平臺(tái)的軟件,完美兼容Linux、Windows、Mac OSX等平臺(tái)。其實(shí)它由3大部件組成,號(hào)稱音視頻處理工具三劍客:
- Ffmpeg:由命令行組成,用于多媒體格式轉(zhuǎn)換
- Ffplay:基于ffmpeg開源代碼庫(kù)libraries做的多媒體播放器
- Ffprobe:基于ffmpeg做的多媒體流分析器
???????Ffmpeg 應(yīng)該是 FFmpeg 工具集中最核心的利器,支持多種多樣的編碼器、解碼器、封裝格式、濾鏡功能。FFmpeg框架的基本組成包含AVFormat、AVCodec、AVFilter、AVDevice、AVUtil等模塊庫(kù),結(jié)構(gòu)圖如下:
- ?AVFormat–FFmpeg的封裝模塊
AVFormat中實(shí)現(xiàn)了目前多媒體領(lǐng)域中的絕大多數(shù)媒體封裝格式,包括封裝和解封裝,如MP4、FLV、KV、TS等文件封裝格式,RTMP、RTSP、MMS、HLS等網(wǎng)絡(luò)協(xié)議封裝格式。FFmpeg是否支持某種媒體封裝格式,取決于編譯時(shí)是否包含了該格式的封裝庫(kù)。根據(jù)實(shí)際需求,可進(jìn)行媒體封裝格式的擴(kuò)展,增加自己定制的封裝格式,即在AVFormat中增加自己的封裝處理模塊。
- AVCodec–FFmpeg的編解碼模塊
AVCodec中實(shí)現(xiàn)了目前多媒體領(lǐng)域絕大多數(shù)常用的編解碼格式,即支持編碼,也支持解碼。AVCodec除了支持MPEG4、AAC、MJPEG等自帶的媒體編解碼格式之外,還支持第三方的編解碼器,如H.264(AVC)編碼,需要使用x264編碼器;H.265(HEVC)編碼,需要使用x264編碼器;MP3(mp3lame)編碼,需要使用libmp3lame編碼器。如果希望增加自己的編碼格式,或者硬件編解碼,則需要在AVCodec中增加相應(yīng)的編解碼模塊。
- AVFilter–FFmpeg的濾鏡模塊
AVFilter庫(kù)提供了一個(gè)通用的音頻、視頻、字幕等濾鏡處理框架。在AVFilter中,濾鏡框架可以有多個(gè)輸入和多個(gè)輸出。
- swresample–FFmpeg的音頻轉(zhuǎn)換計(jì)算模塊
swresample模塊提供了高級(jí)別的音頻重采樣API。例如允許操作音頻采樣、音頻通道布局轉(zhuǎn)換與布局調(diào)整。
- swscale–FFmpeg的視頻圖像轉(zhuǎn)換計(jì)算模塊
swscale模塊提供了高級(jí)別的圖像轉(zhuǎn)換API,例如它允許進(jìn)行圖像縮放和像素格式轉(zhuǎn)換,常見(jiàn)于將圖像從1080p轉(zhuǎn)換成720p或者480p等的縮放,或者將圖像數(shù)據(jù)從YUV420p轉(zhuǎn)換成YUYV,或者YUV轉(zhuǎn)RGB等圖像格式轉(zhuǎn)換。
5 FFmpeg常用參數(shù)
5.1 能力集列表
- -formats:列出支持的文件格式。
- -codecs:列出支持的編解碼器。
- -decoders:列出支持的解碼器。
- -encoders:列出支持的編碼器。
- -protocols:列出支持的協(xié)議。
- -bsfs:列出支持的比特流過(guò)濾器。
- -filters:列出支持的濾鏡。
- -pix_fmts:列出支持的圖像采樣格式。
- -sample_fmts:列出支持的聲音采樣格式。
5.2 常用輸入選項(xiàng)
- -i filename:指定輸入文件名。
- -f fmt:強(qiáng)制設(shè)定文件格式,需使用能力集列表中的名稱(缺省是根據(jù)擴(kuò)展名選擇的)。
- -ss hh:mm:ss[.xxx]:設(shè)定輸入文件的起始時(shí)間點(diǎn),啟動(dòng)后將跳轉(zhuǎn)到此時(shí)間點(diǎn)然后開始讀取數(shù)據(jù)。
對(duì)于輸入,以下選項(xiàng)通常是自動(dòng)識(shí)別的,但也可以強(qiáng)制設(shè)定。
- -c codec:指定解碼器,需使用能力集列表中的名稱。
- -acodec codec:指定聲音的解碼器,需使用能力集列表中的名稱。
- -vcodec codec:指定視頻的解碼器,需使用能力集列表中的名稱。
- -b:v bitrate:設(shè)定視頻流的比特率,整數(shù),單位bps。
- -r fps:設(shè)定視頻流的幀率,整數(shù),單位fps。
- -s WxH : 設(shè)定視頻的畫面大小。也可以通過(guò)掛載畫面縮放濾鏡實(shí)現(xiàn)。
- -pix_fmt format:設(shè)定視頻流的圖像格式(如RGB還是YUV)。
- -ar sample rate:設(shè)定音頻流的采樣率,整數(shù),單位Hz。
- -ab bitrate:設(shè)定音頻流的比特率,整數(shù),單位bps。
- -ac channels:設(shè)置音頻流的聲道數(shù)目。
5.3 常用輸出選項(xiàng)
- -f fmt:強(qiáng)制設(shè)定文件格式,需使用能力集列表中的名稱(缺省是根據(jù)擴(kuò)展名選擇的)。
- -c codec:指定編碼器,需使用能力集列表中的名稱(編碼器設(shè)定為”copy“表示不進(jìn)行編解碼)。
- -acodec codec:指定聲音的編碼器,需使用能力集列表中的名稱(編碼器設(shè)定為”copy“表示不進(jìn)行編解碼)。
- -vcodec codec:指定視頻的編碼器,需使用能力集列表中的名稱(編解碼器設(shè)定為”copy“表示不進(jìn)行編解碼)。
- -r fps:設(shè)定視頻編碼器的幀率,整數(shù),單位fps。
- -pix_fmt format:設(shè)置視頻編碼器使用的圖像格式(如RGB還是YUV)。
- -ar sample rate:設(shè)定音頻編碼器的采樣率,整數(shù),單位Hz。
- -b bitrate:設(shè)定音視頻編碼器輸出的比特率,整數(shù),單位bps。
- -ab bitrate:設(shè)定音頻編碼器輸出的比特率,整數(shù),單位bps。
- -ac channels:設(shè)置音頻編碼器的聲道數(shù)目。
- -an 忽略任何音頻流。
- -vn 忽略任何視頻流。
- -t hh:mm:ss[.xxx]:設(shè)定輸出文件的時(shí)間長(zhǎng)度。
- -to hh:mm:ss[.xxx]:如果沒(méi)有設(shè)定輸出文件的時(shí)間長(zhǎng)度的畫可以設(shè)定終止時(shí)間點(diǎn)。
5.4 ffmpeg流標(biāo)識(shí)
FFMPEG的某些選項(xiàng)可以對(duì)一個(gè)特定的媒體流起作用,這種情況下需要在選項(xiàng)后面增加一個(gè)流標(biāo)識(shí)。流標(biāo)識(shí)允許以下幾種格式:
- 流序號(hào)。譬如“:1”表示第二個(gè)流。
- 流類型。譬如“:a“表示音頻流,流類型可以和流序號(hào)合并使用,譬如“:a:1”表示第二個(gè)音頻流。
- 節(jié)目。節(jié)目和流序號(hào)可以合并使用。
- 流標(biāo)識(shí)。流標(biāo)識(shí)是一個(gè)內(nèi)部標(biāo)識(shí)號(hào)。
假如要設(shè)定第二個(gè)音頻流為copy,則需要指定-codec:a:1 copy
5.5 ffmpeg音頻選項(xiàng)
- -aframes:等價(jià)于frames:a,輸出選項(xiàng),用于指定輸出的音頻幀數(shù)目。
- -aq:等價(jià)于q:a,老版本為qscale:a,用于設(shè)定音頻質(zhì)量。
- -atag:等價(jià)于tag:a,用于設(shè)定音頻流的標(biāo)簽。
- -af:等價(jià)于filter:a,用于設(shè)定一個(gè)聲音的后處理過(guò)濾鏈,其參數(shù)為一個(gè)描述聲音后處理鏈的字符串。
5.6 ffmpeg視頻選項(xiàng)
- -vframes:等價(jià)于frames:v,輸出選項(xiàng),用于指定輸出的視頻幀數(shù)目。
- -aspect:設(shè)置寬高比,如4:3、16:9、1.3333、1.7777等。
- -bits_per_raw_sample:設(shè)置每個(gè)像素點(diǎn)的比特?cái)?shù)。
- -vstats:產(chǎn)生video統(tǒng)計(jì)信息。
- -vf:等價(jià)于filter:v,用于設(shè)定一個(gè)圖像的后處理過(guò)濾鏈,其參數(shù)為一個(gè)描述圖像后處理鏈的字符串。
- -vtag:等價(jià)于tag:v,用于設(shè)定視頻流的標(biāo)簽。
- -force_fps:強(qiáng)制設(shè)定視頻幀率。
- -force_key_frames:顯式控制關(guān)鍵幀的插入,參數(shù)為字符串,可以是一個(gè)時(shí)間戳,也可以是一個(gè) “expr:”前綴的表達(dá)式。如“-force_key_frames 0:05:00”、“-force_key_frames expr:gte(t,n_forced*5)”
5.7 ffmpeg濾鏡選項(xiàng)
-filter_simple 添加簡(jiǎn)單濾鏡
-filter_complex FILTER 添加復(fù)雜濾鏡文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-785834.html
5.8 ffmpeg高級(jí)選項(xiàng)
- -re:要求按照既定速率處理輸入數(shù)據(jù),這個(gè)速率即是輸入文件的幀率。
- -map:指定輸出文件的流映射關(guān)系。例如 “-map 1:0 -map 1:1”要求將第二個(gè)輸入文件的第一個(gè)流和第二個(gè)流寫入到輸出文件。如果沒(méi)有-map選項(xiàng),ffmpeg采用缺省的映射關(guān)系。
5.9 ffprobe參數(shù)
簡(jiǎn)單的說(shuō),ffprobe 是一個(gè)多媒體流分析工具。它從多媒體流中收集信息,并且以人類和機(jī)器可讀的形式打印出來(lái)。它可以用來(lái)檢測(cè)多媒體流的容器類型,以及每一個(gè)多媒體流的格式和類型。它可以作為一個(gè)獨(dú)立的應(yīng)用來(lái)使用,也可以結(jié)合文本過(guò)濾器執(zhí)行更復(fù)雜的處理。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-785834.html
- -f format 強(qiáng)制使用某種格式
- -sexagesimal 時(shí)間單元格式化 HOURS:MM:SS.MICROSECONDS
- -pretty 格式美化
- -print_format format 格式化(可選值: default, compact, csv, flat, ini, json, xml)
- -of format -print_format別名
- -select_streams stream_specifier 選擇指定流
- -sections 打印節(jié)的結(jié)構(gòu)和信息
- -show_data 顯示包數(shù)據(jù)
- -show_data_hash 顯示包數(shù)據(jù)哈希值
- -show_error 顯示文件探測(cè)/檢測(cè)錯(cuò)誤
- -show_format 顯示格式或者容器信息
- -show_frames 顯示幀信息
- -show_format_entry entry 根據(jù)格式/容器信息顯示指定entry
- -show_packets 顯示包信息
- -show_programs 顯示程序信息
- -show_streams 顯示流信息
- -show_chapters 顯示章節(jié)信息
- -count_frames 統(tǒng)計(jì)每個(gè)流的幀數(shù)
- -count_packets 統(tǒng)計(jì)每個(gè)流的包數(shù)
- -show_program_version 顯示ffprobe版本
- -show_library_versions show library versions
- -show_versions show program and library versions
- -show_pixel_formats 顯示像素格式
- -show_private_data show private data
- -private same as show_private_data
- -bitexact force bitexact output
- -read_intervals read_intervals set read intervals
- -default generic catch all option
5.10 ffplayer參數(shù)
- -x 強(qiáng)制設(shè)置視頻顯示窗口的寬度
- -y 強(qiáng)制設(shè)置視頻顯示窗口的高度
- -S 設(shè)置視頻顯示的寬高
- -fs 強(qiáng)制全屏顯示
- -an 屏蔽音頻
- -vn 屏蔽視頻
- -Sn 屏蔽字幕
- -ss 根據(jù)設(shè)置的秒進(jìn)行定位拖動(dòng)
- -t 設(shè)置播放視頻/音頻長(zhǎng)度
- -Bytes 設(shè)置定位拖動(dòng)的策略,0為不可拖動(dòng),1為可拖動(dòng),-1為自動(dòng)
- -Nodisp 關(guān)閉圖形化顯示窗口
- -f 強(qiáng)制使用設(shè)置的格式進(jìn)行解析
- -window_title 設(shè)置顯示窗口的標(biāo)題
- -af 設(shè)置音頻的濾鏡
- -Codec 強(qiáng)制使用設(shè)置的codec進(jìn)行解碼
- -autorotate 自動(dòng)旋轉(zhuǎn)視頻
- -ast 設(shè)置將要播放的音頻流
- -vst 設(shè)置將要播放的視頻流
- -sst 設(shè)置將要播放的字幕流
- -Stats 輸出多媒體播放狀態(tài)
- -Fast 非標(biāo)準(zhǔn)化規(guī)范的多媒體兼容優(yōu)化
- -sync 音視頻同步設(shè)置可設(shè)置根據(jù)音頻視頻進(jìn)行參考,視頻時(shí)間參考,或者外部擴(kuò)展時(shí)間進(jìn)行參考
- -autoexit 多媒體播放完畢自動(dòng)退出ffplay,ffplay默認(rèn)播放完畢不退出播放器
- -exitonkeydown 當(dāng)有按鍵按下事件產(chǎn)生時(shí)退出ffplay
- -exitonmousedown 當(dāng)有鼠標(biāo)按鍵事件產(chǎn)生時(shí)退出ffplay
- -loop 設(shè)置多媒體文件循環(huán)播放次數(shù)
- -framedrop 當(dāng)CPU資 源占用過(guò)高時(shí),自動(dòng)丟幀
- -infbuf 設(shè)置無(wú)極限的播放器buffer,這個(gè)選項(xiàng)常見(jiàn)于實(shí)時(shí)流媒體播放場(chǎng)景
- -vf 視頻濾鏡設(shè)置
- -acodec 強(qiáng)制使用設(shè)置的音頻解碼器
- -vcodec 強(qiáng)制使用設(shè)置的視頻解碼器
- -scodec 強(qiáng)制使用設(shè)置的字幕解碼器
到了這里,關(guān)于使用ffmpeg調(diào)整視頻分辨率/幀率并保持高清晰度的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!