FFmpeg指定開(kāi)始結(jié)束時(shí)間截取原視頻命令
"ffmpeg -i $inputVideoPath -ss $beginTime -to ${sentenceInfo.endTime} -c:v libx264 -crf 28 -preset superfast -pix_fmt yuv420p -y $tempVideoPath${index}.mp4"
-i標(biāo)識(shí)輸入文件 需要取對(duì)應(yīng)輸入文件進(jìn)行操作根據(jù)順序從零開(kāi)始[index:v]
-crf 23 參數(shù)用于控制 x264 編碼器的視頻質(zhì)量。CRF 意為 Constant Rate Factor,是一種基于恒定質(zhì)量的編碼方式,可以在不同的編碼場(chǎng)景中實(shí)現(xiàn)一定程度的質(zhì)量和壓縮比的平衡。
-crf 參數(shù)的取值范圍是 0-51,其中 0 表示無(wú)損編碼,51 表示最低質(zhì)量。一般情況下,推薦使用 18-28 之間的值,其中 18 表示最高質(zhì)量,28 表示較高的壓縮比和相對(duì)較好的質(zhì)量。
例如,-crf 23 表示使用 CRF 為 23 的編碼方式,可以獲得相對(duì)較好的視頻質(zhì)量和壓縮比之間的平衡。如果需要更高的質(zhì)量,則可以使用更低的 CRF 值,如 -crf 18;如果需要更高的壓縮比,則可以使用更高的 CRF 值,如 -crf 28。
-c:v libx264 是 FFmpeg 中用于指定視頻編碼器為 libx264 的參數(shù)。其中 -c:v 表示選擇視頻編碼器,libx264 則是選擇 x264 編碼器作為視頻編碼器。
-preset medium 參數(shù)用于設(shè)置 x264 編碼器的預(yù)設(shè)值,從而控制視頻編碼的速度和質(zhì)量之間的平衡。預(yù)設(shè)值可用于自動(dòng)設(shè)置一系列與編碼速度和質(zhì)量相關(guān)的參數(shù),以便更好地適應(yīng)不同的編碼場(chǎng)景。-preset 參數(shù)支持以下幾個(gè)選項(xiàng):
ultrafast
superfast
veryfast
faster
fast
medium (默認(rèn))
slow
slower
veryslow
預(yù)設(shè)值從 ultrafast 到 veryslow,編碼速度逐漸變慢,但視頻質(zhì)量也會(huì)逐漸提高。使用 -preset medium 可以獲得相對(duì)較好的編碼速度和視頻質(zhì)量之間的平衡。如果希望優(yōu)化編碼速度,可以考慮使用更快的預(yù)設(shè)值,如 -preset superfast。如果希望獲得更高的視頻質(zhì)量,則可以使用更慢的預(yù)設(shè)值,如 -preset slow。
FFmpeg縮放輸入視頻并調(diào)整輸入視頻相對(duì)于背景圖片位置,并添加指定寬高背景圖片,輸出視頻寬高默認(rèn)跟背景圖片一致
"ffmpeg -i $tempVideoPath${index}.mp4 -i $tempBgDir/background$index.png -filter_complex " +
"[0:v]scale=480:260[video];" +
"[1:v]scale=720:960[bg];" +
"[bg][video]overlay=20:160[v]" +
" -map [v] -map 0:a -c:a copy -y $tempAddVideoPath${index}.mp4"
[0:v]scale=480:260[video] 是一個(gè)視頻濾鏡,用于將輸入文件中的視頻流進(jìn)行縮放操作。具體含義如下:
[0:v] 表示選擇輸入文件中的第一個(gè)視頻流作為處理對(duì)象;
scale=480:260 表示對(duì)視頻流進(jìn)行縮放操作,將視頻的寬度縮放到 480 像素,高度縮放到 260 像素;
[video] 表示將經(jīng)過(guò)縮放操作后的視頻流輸出到一個(gè)名為 "video" 的輸出文件中。
這個(gè)濾鏡會(huì)將輸入視頻流進(jìn)行縮放,將視頻的分辨率從原來(lái)的大小轉(zhuǎn)換為 480x260 像素的大小。通過(guò)這種方式可以改變視頻的尺寸大小,以滿足不同場(chǎng)合下的需求,比如適配不同的屏幕分辨率、減少視頻的體積等。
-map 0:a -c:a copy表示原封不動(dòng)將輸入視頻音軌直接復(fù)制到當(dāng)前視頻使用
[bg][video]overlay=20:160[v] 是 FFmpeg 中的一個(gè)視頻濾鏡,它的作用是將一個(gè)背景圖片(bg)和一個(gè)視頻流(video)進(jìn)行疊加,得到一個(gè)新的視頻流(v)。具體含義如下:
[bg][video] 表示從 bg 和 video 兩個(gè)輸入流中獲取視頻幀;
overlay=20:160 表示將 video 中的每一幀都疊加到 bg 上,具體疊加的位置是在 bg 左上角偏移 (20, 160) 的位置處。疊加的過(guò)程是逐像素進(jìn)行的,每個(gè)像素的顏色由 bg 和 video 對(duì)應(yīng)位置的像素顏色混合而成;
[v] 表示將疊加后的視頻流輸出到一個(gè)名為 "v" 的輸出文件中。
這個(gè)濾鏡會(huì)將輸入的視頻流和背景圖片進(jìn)行疊加,從而生成一個(gè)新的視頻流。在生成新的視頻流的過(guò)程中,視頻流的每一幀都會(huì)與背景圖片進(jìn)行疊加,以得到最終的合成視頻。通過(guò)調(diào)整 overlay 參數(shù)可以實(shí)現(xiàn)不同的疊加效果,比如改變視頻在背景中的位置、改變疊加的透明度等。
FFmpeg將多個(gè)視頻拼接合成命令
"ffmpeg -i file1 -i file2 ... -i fileN -filter_complex [0:v][0:a][1:v][1:a]concat=n=${fileSize}:v=1:a=1 -f mp4 -y $outputVideoPath"
[0:v][0:a][1:v][1:a] 表示從兩個(gè)視頻文件中分別獲取視頻流和音頻流;
concat 表示使用 FFmpeg 的拼接濾鏡進(jìn)行拼接操作;
n=${fileSize} 表示拼接的視頻文件數(shù)量,其中 ${fileSize} 是一個(gè)變量,代表需要拼接的視頻文件數(shù)量;
v=1 表示將拼接后的視頻流輸出到新文件中;
a=1 表示將拼接后的音頻流輸出到新文件中。
通過(guò)這個(gè)濾鏡可以將多個(gè)視頻文件拼接成一個(gè)新的視頻文件,并且保留原視頻文件中的音頻流。在拼接過(guò)程中,每個(gè)視頻文件的視頻流和音頻流都會(huì)被提取出來(lái),然后按照順序進(jìn)行拼接。如果有多個(gè)視頻文件,那么可以使用 ${fileSize} 變量來(lái)指定拼接的文件數(shù)量。注意,在拼接視頻文件時(shí),要求各個(gè)文件的分辨率、幀率、編碼格式等必須相同,否則可能會(huì)導(dǎo)致拼接失敗或出現(xiàn)畫(huà)面不同步的問(wèn)題。
-f mp4標(biāo)識(shí)合成視頻格式為MP4