前言:
最近對于音視頻和圖像的處理問題比較感興趣,但發(fā)現(xiàn)很多目前需要的功能要么需要付費但不會過于麻煩,要么比較麻煩,很可能某個功能實現(xiàn)需要安裝很多軟件
例如,視頻轉GIF動圖,該功能的實現(xiàn)要么使用Photoshop全家桶,要么找在線網(wǎng)站,或者是wps充會員,或者找其它方法,但其實FFMPEG這個軟件就可以搞定一切了。
那么,選擇FFMPEG的理由有哪些呢?
第一,F(xiàn)FMPEG可以跨平臺,也就是mac,Linux,windows都可以部署使用,甚至可以使用dockers這樣的容器,當然了,在Linux下如果有批量剪輯音視頻的需求,會非常方便,雖然可能需要編寫腳本
第二,F(xiàn)FMPEG是一個開源的,自由的軟件,沒有那些使用上的限制,當然,我們在使用的時候還是需要尊重一下軟件開源協(xié)議
第三,F(xiàn)FMPEG的功能是非常非常多的,可以剪輯音視頻,視頻轉換為圖片,圖片剪輯,音頻混響,音視頻的抽取替換,字幕,還有一些不是太常規(guī)的功能,比如,錄屏,攝像頭視頻抓取,麥克風音頻抓取等等功能;同時,F(xiàn)FMPEG所支持的音視頻格式非常多,基本95%的格式都可以支持,除了一些個別的收費格式,例如mflac音頻文件這樣的不支持。
也是由于FFMPEG的這些強大功能,可以在很多地方大顯身手,比如,平常的娛樂方面,動圖制作;攝像頭的視頻流抓取配合人工智能識別;短視頻的剪輯制作;音視頻的大規(guī)模清洗;音視頻的翻拍;電子相冊,相冊轉換成視頻? 等等落地場景,場景多樣,就看你的想象力有多好了吧?。。。?/strong>
那么,這么強大的開源的音視頻和圖片處理工具自然是不可能一篇文章就講清楚了,本文將主要就FFMPEG遮擋水印,GIF類型的動圖制作,視頻內的音頻抽取,替換這幾個簡單的功能做一個講解。
一,
音視頻格式轉換
音視頻和圖片的格式是非常多的,這里我就不廢話太多了,只說一下常用的,比如,視頻的mov,avi,mp4,ts,mkv,rmvb等等格式;音頻的flac,mp3,wma,ape,acc,ogg等等格式;圖片的GIF,PNG,SWF,BPM,JPG等等格式
那么,廢話這么半天是想說格式對應于文件的編碼格式,比如,某個電影視頻,它的格式是rmvb,這時候指的的是它的編碼格式,那么,我要在Windows播放這個視頻,是需要有解碼這個編碼格式的解碼器的軟件才可以播放,也就是具有rmvb解碼器或者稱之為解碼引擎,解碼庫的軟件,例如Windows media 播放器或者vlc播放器這樣的具有相應解碼器的播放器才可以播放
當然了,F(xiàn)FPLAY基本沒有這種困擾,95%的文件格式都可以輕松播放,??,現(xiàn)在可以聊一聊文件格式轉換的問題了
FFMPEG的音視頻文件格式轉換非常簡單,ffmpeg -i 原始音視頻文件 轉換后的音視頻文件? 就這么簡單粗暴,例如,flac文件轉換成MP3文件:
其它的格式轉換基本都是這樣的,沒有什么技巧可言
二,
音視頻抽取
例如,原視頻是電影武俠,時長1小時57分鐘
截取自41分鐘0秒開始之后的20秒視頻,抽取的視頻同時轉換成mp4格式:
ffmpeg -i "C:\Users\Administrator\Desktop\武俠 (2011)導演陳可辛 編劇林愛華 主演甄子丹 金城武 湯唯 王羽 惠英紅李小冉姜武類型劇情動作懸疑武俠.rmvb" -ss 41:00 -t 20 D:\test2.mp4
可以看到,抽取的視頻確實是20秒?
rmvb視頻轉換成rmvb視頻需要強制轉換,指定轉換格式,強制轉換可能會有失敗的風險
增加-f 格式即可,例如下面的命令也是可以的:
ffmpeg -i "C:\Users\Administrator\Desktop\武俠 (2011)導演陳可辛 編劇林愛華 主演甄子丹 金城武 湯唯 王羽 惠英紅李小冉姜武類型劇情動作懸疑武俠.rmvb" -y -ss 41:00 -t 20 -f mpeg D:\test2.rmvb
ffmpeg -i "C:\Users\Administrator\Desktop\武俠 (2011)導演陳可辛 編劇林愛華 主演甄子丹 金城武 湯唯 王羽 惠英紅李小冉姜武類型劇情動作懸疑武俠.rmvb" -y -ss 41:00 -t 20 -f mpeg D:\test2.mpeg
音頻文件的轉換相對簡單:
ffmpeg -i 222.mp3 333.wav
輸出如下:
C:\Users\Administrator\Desktop\11111>ffmpeg -i 222.mp3 333.wav
ffmpeg version 6.1.1-full_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-libsnappy --enable-zlib --enable-librist --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray --enable-libcaca --enable-sdl2 --enable-libaribb24 --enable-libaribcaption --enable-libdav1d --enable-libdavs2 --enable-libuavs3d --enable-libzvbi --enable-librav1e --enable-libsvtav1 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libaom --enable-libjxl --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-frei0r --enable-libfreetype --enable-libfribidi --enable-libharfbuzz --enable-liblensfun --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-libshaderc --enable-vulkan --enable-libplacebo --enable-opencl --enable-libcdio --enable-libgme --enable-libmodplug --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libshine --enable-libtheora --enable-libtwolame --enable-libvo-amrwbenc --enable-libcodec2 --enable-libilbc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-ladspa --enable-libbs2b --enable-libflite --enable-libmysofa --enable-librubberband --enable-libsoxr --enable-chromaprint
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, mp3, from '222.mp3':
Metadata:
title : 有沒有人告訴你
album : 相愛十年 電視劇原聲帶
artist : 陳楚生
ID : 8597091334
track : 1
disc : 1
encoder : Lavf60.16.100
Duration: 00:04:21.15, start: 0.025056, bitrate: 145 kb/s
Stream #0:0: Audio: mp3, 44100 Hz, stereo, fltp, 128 kb/s
Metadata:
encoder : Lavc60.31
Stream #0:1: Video: png, rgb24(pc, gbr/unknown/unknown), 500x500 [SAR 1:1 DAR 1:1], 90k tbr, 90k tbn (attached pic)
Metadata:
comment : Other
Stream mapping:
Stream #0:0 -> #0:0 (mp3 (mp3float) -> pcm_s16le (native))
Press [q] to stop, [?] for help
Output #0, wav, to '333.wav':
Metadata:
INAM : 有沒有人告訴你
IPRD : 相愛十年 電視劇原聲帶
IART : 陳楚生
ID : 8597091334
IPRT : 1
disc : 1
ISFT : Lavf60.16.100
Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, stereo, s16, 1411 kb/s
Metadata:
encoder : Lavc60.31.102 pcm_s16le
[out#0/wav @ 0000017891270640] video:0kB audio:44982kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000382%
size= 44982kB time=00:04:21.09 bitrate=1411.3kbits/s speed= 748x
使用ffprobe命令查看是否轉換成功:
C:\Users\Administrator\Desktop\11111>ffprobe -i 333.wav
ffprobe version 6.1.1-full_build-www.gyan.dev Copyright (c) 2007-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-libsnappy --enable-zlib --enable-librist --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray --enable-libcaca --enable-sdl2 --enable-libaribb24 --enable-libaribcaption --enable-libdav1d --enable-libdavs2 --enable-libuavs3d --enable-libzvbi --enable-librav1e --enable-libsvtav1 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libaom --enable-libjxl --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-frei0r --enable-libfreetype --enable-libfribidi --enable-libharfbuzz --enable-liblensfun --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-libshaderc --enable-vulkan --enable-libplacebo --enable-opencl --enable-libcdio --enable-libgme --enable-libmodplug --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libshine --enable-libtheora --enable-libtwolame --enable-libvo-amrwbenc --enable-libcodec2 --enable-libilbc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-ladspa --enable-libbs2b --enable-libflite --enable-libmysofa --enable-librubberband --enable-libsoxr --enable-chromaprint
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, wav, from '333.wav':
Metadata:
artist : 陳楚生
title : 有沒有人告訴你
album : 相愛十年 電視劇原聲帶
track : 1
encoder : Lavf60.16.100
Duration: 00:04:21.12, bitrate: 1411 kb/s
Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, 2 channels, s16, 1411 kb/s
音頻轉碼:
ffmpeg -i "C:\Users\Administrator\Desktop\Music\陳楚生 - 有沒有人告訴你.flac" -c:a libmp3lame -q:a 6 D:\chen.mp3 #音頻轉碼 ,最高等級的
?
視頻內的音頻抽?。?/strong>
vn表示去掉視頻,視頻去掉了自然就剩下音頻了
an表示去掉音頻,音頻去掉了自然就剩下視頻了,an就不演示了
ffmpeg -i D:\555.mp4 -vn D:\333.mp4 #提取音頻,可以提取為mp3,也可以mp4
ffmpeg -i D:\555.mp4 -c:v copy -vn D:\333.mp3 -y ###仍然是提取音頻,和上面的沒什么太大區(qū)別
ffmpeg -i D:\555.mp4 -map 0 -map 0:a:1 -copy D:\333.mp3###仍然是提取音頻,和上面的沒什么太大區(qū)別
ffmpeg -i D:\555.mp4 -an D:\333.mp4 #提取視頻
ffmpeg -i "C:\Users\Administrator\Desktop\武俠 (2011)導演陳可辛 編劇林愛華 主演甄子丹 金城武 湯唯 王羽 惠英紅李小冉姜武類型劇情動作懸疑武俠.rmvb" -vn D:\wuxia.mp3
###提取電影武俠里的所有音頻
三,
動圖的制作
ffmpeg -i D:\666.mp4 -ss 00:20 -t 12 -r 10 -s 320*250 D:\888.gif -y #截取視頻并轉換成動圖
以上命令是截取666.mp4,從視頻的20秒開始,往后接12秒,動圖質量為10,動圖大小為320*250 ,保存路徑為D盤,如果有同名的888.gif文件直接覆蓋
這里的-t? 可以精確到毫秒,比如-t 12.7? 表示12秒零70毫秒,這樣也是??的
經(jīng)過實踐,可以發(fā)現(xiàn),如果視頻直接轉動圖,動圖會很大,因為是保留視頻的畫面大小了,因此,必須-s參數(shù)指定GIF的畫面大小
由于GIF動圖一般是做表情圖使用,一般大小不宜超過2M,制作的時候一般是截取視頻的十來秒內容即可,太多也沒有必要了。
四,
替換視頻內的音頻
ffmpeg -i D:\222.mp4 -i D:\chen.mp3 -c copy -map 0:v:0 -map 1:a:0 -shortest D:\test.mp4 -y #222.mp4這個視頻有音頻的,直接替換
?-map 0:v:0代表視頻 -map 1:a:0 代表音頻 -c copy 表示僅拷貝,不做任何轉碼文章來源:http://www.zghlxwxcb.cn/news/detail-828469.html
ffmpeg -i D:\222.mp4 -i D:\chen.mp3 -c copy -map 0:v:0 -map 1:a:0 -c:a libmp3lame -q:a 6 -shortest D:\test.mp4 -y
###音頻重新編碼,質量6 最高6,chen.mp3是一首完整的歌曲,222.mp4是十幾秒的視頻,音頻的時間和視頻的時間一致裁剪
-c:a libmp3lame -q:a 6表示音頻做轉碼,轉碼為MP3,質量等級最高,也就是音質最好,6是最高等級,1是最低等級文章來源地址http://www.zghlxwxcb.cn/news/detail-828469.html
到了這里,關于音視頻剪輯|FFMPEG|windows10下的音視頻格式轉換,遮擋填充,GIF動圖制作,背景音頻抽取,替換的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!