ffmpeg builds by zeranoe_FFmpeg
FFmpeg 是一個用于處理音視頻的開源程序,但它的入門較為復(fù)雜,難度較大,且沒有較為清晰明了的簡易教程,因此有必要,系統(tǒng)性地講解 FFmpeg 的一些實(shí)用操作。
關(guān)于下載:
官方下載鏈接:
https://ffmpeg.zeranoe.com/builds/win64/static/ffmpeg-20200715-a54b367-win64-static.zip
這也是針對 Windows 系統(tǒng)的最新版本,當(dāng)然 static 版無需執(zhí)行安裝操作,較為簡單。對上述壓縮文件解壓縮后,獲得文件下的子級內(nèi)容:--- bin---?doc?---?presets---?LICENSE.txt---?README.txt事實(shí)上,該文件夾,需要放置在一個固定的位置,建議采用全英文路徑!Windows 系統(tǒng)下如何配置?選擇「此電腦」?> 右鍵,選擇屬性 > 高級系統(tǒng)設(shè)置 > 環(huán)境變量 > 選中 Path? > 新建,添加應(yīng)當(dāng)注意,是把文件夾下的 bin 文件夾添加到 Path 中之后,打開 PowerShell, 輸入:ffmpeg?-version?即可獲得:到此,FFmpeg 配置成功由于 FFmpeg 屬于純粹的命令行工具,因此如何調(diào)出命令行窗口,則是首要任務(wù)。對于 Windows 系統(tǒng)下,可以使用 Powershell 窗口,由于 FFmpeg 的處理對象是音視頻文件,那么如何快速切換到音視頻文件的路徑下,則是重點(diǎn)。不建議使用命令來切換路徑,相對而言,應(yīng)該采用更加簡潔的方式:打開任一文件下,此時鼠標(biāo)不能選中任何文件,先按 鍵的同時,鼠標(biāo)右鍵,彈出窗口,選擇:「在此處打開 Powershell 窗口」之后,便能進(jìn)入當(dāng)前路徑下的 Powershell 窗口如何使用及基本語法?FFmpeg 的核心在于 ffmpeg 工具,也就是:ffmpeg.exe語法形式:ffmpeg?-i?x1?[]?x2
-i 后面,輸入文件名,即為需要處理的音視頻文件x1: 對應(yīng)待處理的文件名,需要添加后綴名[]: 認(rèn)為是控制處理的一系列參數(shù)x2: 最后輸出的文件名ffmpeg?-i?04.mp4??_hide_banner
當(dāng)前文件夾下,存在 04.mp4 文件,參數(shù):_hide_banner 用于隱藏banner 信息,僅展示 mp4 文件的相關(guān)信息。
注意事項(xiàng):由于 Powershell 下不支持中文輸入,因此所有文件名必須為英文模式。
通過上述命令,即可獲取該視頻的基本信息,如時長,畫面的寬高,速率等
基本語法:>??ffmpeg?-i?04.mp4??-sameq??-f?avi?2.avi....
Option?'sameq'?was?removed.?If?you?are?looking?for?an?option?to?preserve?the?quality?(which?is?not?what?-sameq?was?for),?use?-qscale?0?or?an?equivalent?quality?factor?option.
Failed?to?set?value?'1'?for?option?'sameq':?Invalid?argument
Error?parsing?global?options:?Invalid?argument
上述命令用于將?04.mp4 轉(zhuǎn)為 2.avi , 但需要注意:-sameq 參數(shù),目前已經(jīng)被移除,所以控制轉(zhuǎn)格式時的質(zhì)量,需要采用 -qscale 0 參數(shù)。-qscale 0?: 跟原視頻質(zhì)量相同,其值越大,轉(zhuǎn)碼后視頻質(zhì)量愈差。ffmpeg?-i?04.mp4??-qscale?0??-f?avi?2.avi
通過上述方式,將 mp4 轉(zhuǎn)為同等質(zhì)量的 avi 格式-qscale 參數(shù)值一般在?0?~6 之間比較合適,越大,轉(zhuǎn)碼后視頻質(zhì)量越差。視頻裁剪ffmpeg?-i?04.mp4?-t?60??03.mp4
-t 參數(shù) 60 表示取視頻長度為:60s由于未指定起始和終止點(diǎn),默認(rèn)截取前 60s, 因此:從文件的屬性中,即可獲知:時長 00:01:00當(dāng)上面的方法,依然對視頻進(jìn)行了重新編碼,自然會造成過長的耗時。由于裁剪前后,視頻的格式未發(fā)生變化,因此,我們只需要復(fù)制即可,容器本身不發(fā)生,只是單純地 拷貝到另一個容器中,因此需要增加參數(shù):?ffmpeg?-i?04.mp4?-t?60?-c?copy??03-1.mp4
通過屬性信息比對,就能得出:-c copy 的體積更小。因此,推薦使用 -c copy指定位置裁剪:??ffmpeg?-i?04.mp4?-ss?4:30?-t?45?-c?copy?01.mp4
-ss 指定起始點(diǎn),如上所示,為 4 分 30 秒處開始,往后截取 45 秒。以及:??ffmpeg?-i?04.mp4?-ss?4:30?-to?6:45?-c?copy?01.mp4
-to 實(shí)際上,指定終點(diǎn)點(diǎn),從 4 分 30 秒到?6 分?45 秒而:-c:v copy ?只拷貝視頻編碼部分!ffmpeg?-i?04.mp4?-ss?4:30?-to?6:45?-c:v?copy?-an?01.mp4上述代碼中的:-an , 用于去除音頻部分。此時,獲得 「無聲的視頻」:屬性信息中,音頻部分不顯示任何信息,說明,-an 已經(jīng)去除了音頻部分。類似的:ffmpeg?-i?04.mp4?-ss?4:30?-to?6:45??-vn?01.mp3
-vn 去除視頻,獲得音頻文件。但此時不能添加:-c:a copy事實(shí)上,標(biāo)準(zhǔn)的時間格式為:00:00:00 表示?「時:分:秒」,但一般情況下,不需要用到的,都可以省略,直接以 4:30 即可表示 「分:秒」拓展延伸:如何實(shí)現(xiàn)對文件下一堆視頻文件的批量轉(zhuǎn)音頻操作?
事實(shí)上,FFmpeg 并不支持批量操作!如何構(gòu)建批量化操作,則只能另想辦法?
首先,我們先考慮有沒有前人做好的?「輪子」, 這樣就不必閉門造車,重新制造輪子。
Name:?Pazera?Free?Audio?Extractor?(32/64-bit)Version:?2.9
License:?Freeware
Date:?2018.07.29
Author:?Jacek?Pazera
Web?page:?http://www.pazera-software.com/products/audio-extractor/
Quick?start:?http://www.pazera-software.com/products/audio-extractor/quickstart.php
??This?program?is?distributed?in?the?hope?that?it?will?be?useful,
??but?WITHOUT?ANY?WARRANTY;?without?even?the?implied?warranty?of
??MERCHANTABILITY?or?FITNESS?FOR?A?PARTICULAR?PURPOSE.
??
This?program?uses?the?following?open?source?software:
??1.?FFmpeg,?licensed?under?the?GNU?Lesser?General?Public?License?(LGPL)?version?2.1?available?at?http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
??2.?MediaInfo?library,?licensed?under?the?MediaInfo(Lib)?License?available?at?https://mediaarea.net/en/MediaInfo/License
??3.?Free?SpTBX?components?available?at?http://www.silverpointdevelopment.com/sptbxlib/index.htm,?licensed?under?the?SpTBXLib?License?available?at?http://www.silverpointdevelopment.com/sptbxlib/SpTBXLib-LICENSE.htm
??4.?The?Drop?Files?and?Version?Information?components?by?Peter?D.?Johnson?(http://delphidabbler.com/),?licensed?under?the?Mozilla?Public?License?v2.0?available?at?https://www.mozilla.org/en-US/MPL/2.0/
AudioExtractor64.exe 的 README.txt 文件信息如上所示,專門用于音頻的提取!其中使用了 FFmpeg 工具,本質(zhì)上是調(diào)用 FFmpeg 來完成視頻的相關(guān)操作,但作者已經(jīng)把這個輪子做成了完善的軟件。同時也實(shí)現(xiàn)了 Freeware 的目標(biāo)。界面:畢竟,已經(jīng)是完善的界面設(shè)置,因此,不再詳細(xì)說明如何使用。下面,我們開始自己造輪子?本著,R 語言優(yōu)先的原則,批量自動化,肯定是考慮使用 R 語言。>?ffmpeg?-i?04.mp4?-ss?4:30?-to?6:45??-vn?01.mp3
>?ffmpeg?-i?05.mp4?-ss?4:30?-to?6:45??-vn?02.mp3
>?ffmpeg?-i?06.mp4?-ss?4:30?-to?6:45??-vn?03.mp3
事實(shí)上,可能就是如上所示,一條一條的命令,依次執(zhí)行罷了,但最終依然需要通過命令行來執(zhí)行。有規(guī)律性的命令,本質(zhì)上依然是一堆字符串,因此利用 R 語言的字符串操作來生成字符串向量,最終傳遞給命令行窗口,執(zhí)行命令即可。f?'ffmpeg?-i?',
?????????????sprintf('%02.0f',1:4),
?????????????'.mp4',
?????????????'?-ss?4:30?-to?6:45?-vn?',
????????????sprintf('%02.0f',1:4),'.mp3')
返回信息:>?f
[1]?"ffmpeg?-i?01.mp4?-ss?4:30?-to?6:45?-vn?01.mp3"
[2]?"ffmpeg?-i?02.mp4?-ss?4:30?-to?6:45?-vn?02.mp3"
[3]?"ffmpeg?-i?03.mp4?-ss?4:30?-to?6:45?-vn?03.mp3"
[4]?"ffmpeg?-i?04.mp4?-ss?4:30?-to?6:45?-vn?04.mp3"
實(shí)踐環(huán)節(jié):>?list.files()
[1]?"01.mp4"?"02.mp4"?"03.mp4"?"04.mp4"
list.files() 返回當(dāng)前路徑下的文件。然后,開始構(gòu)造循環(huán):for?(i?in?seq_along(f))?{
????system(f[i])
??}
執(zhí)行代碼后,查看文件:>?list.files()
[1]?"01.mp3"?"01.mp4"?"02.mp3"?"02.mp4"?"03.mp3"
[6]?"03.mp4"?"04.mp3"?"04.mp4"
事實(shí)上,已經(jīng)生成了目標(biāo)文件。至此,批量工作結(jié)束。>?list.files()
[1]?"01.mp3"?"01.mp4"?"02.mp3"?"02.mp4"?"03.mp3"
[6]?"03.mp4"?"04.mp3"?"04.mp4"
>?list.files(pattern?=?'.mp3')?%>%?unlink
>?list.files()
[1]?"01.mp4"?"02.mp4"?"03.mp4"?"04.mp4"
通過 pattern 進(jìn)行篩選,交由 unlink() 刪除 mp3 文件
unlink() 在這里的作用等同于 file.remove()
比對效率:
?a?function()?{for?(i?in?seq_along(f))?{
????system(f[i],show.output.on.console?=?F)
??}
list.files(pattern?=?'.mp3')?%>%?unlink
}
b?function()?{
???sapply(f,?system,show.output.on.console?=?F)
???list.files(pattern?=?'.mp3')?%>%?unlink
}
a 采用 for 循環(huán),b 采用?sapply() 方法
同時,添加了參數(shù):show.output.on.console = F, 不再輸出終端信息。
那么他們的效率如何呢?
>?system.time(a())???user??system?elapsed?
???0.00????0.01???12.24?
>?system.time(b())
???user??system?elapsed?
???0.01????0.00???12.17?
事實(shí)上,后者僅比前者快了 0.07s?
但,sapply() 的形式,更加優(yōu)雅,推薦使用后者。
小細(xì)節(jié):
a() 運(yùn)行后,實(shí)際上已經(jīng)刪除了生成的 mp3 文件,之后才重新運(yùn)行 b()
這里,在 R 語言運(yùn)行模式下,是不能夠默認(rèn)覆蓋文件的,因此需要刪除之前的 mp3 文件。
y 參數(shù):
?ffmpeg?-i?01.mp4?-ss?4:30?-to?6:45??-y??-vn?01.mp3-y 用于直接覆蓋同名文件。即意味著:若之前就存在 01.mp3 同名文件,則直接覆蓋。
av 包
?Package:?????????????avType:????????????????Package
Title:???????????????Working?with?Audio
?????????????????????and?Video?in?R
Version:?????????????0.5.0
Authors@R:???????????person("Jeroen",
?????????????????????"Ooms",?role?=
?????????????????????c("aut",?"cre"),
?????????????????????email?=
?????????????????????"jeroen@berkeley.edu",
?????????????????????comment?=?c(ORCID?=
?????????????????????"0000-0002-4035-0289"))
Description:?????????Bindings?to?'FFmpeg'
?????????????????????
...
SystemRequirements:
?????????????????????FFmpeg?(>=?3.2);
?????????????????????with?at?least
?????????????????????libx264?and?lame
?????????????????????(mp3)?drivers.
?????????????????????Debian/Ubuntu:
?????????????????????libavfilter-dev,
?????????????????????Fedora/CentOS:
?????????????????????ffmpeg-devel?(via
?????????????????????https://rpmfusion.org),
?????????????????????MacOS?Homebrew:
?????????????????????ffmpeg.
Depends:?????????????R?(>=?3.5)
av 包的出現(xiàn),解決了 R 語言無法更好地處理音視頻的弊端,同時 av 包其實(shí)是需要 FFmpeg 作為支持,其實(shí)是調(diào)用 FFmpeg 進(jìn)行處理。
因此,更建議使用 av
>?ls('package:av')?[1]?"av_audio_convert"?????"av_capture_graphics"??"av_decoders"?????????
?[4]?"av_demo"??????????????"av_demuxers"??????????"av_encode_video"?????
?[7]?"av_encoders"??????????"av_filters"???????????"av_log_level"????????
[10]?"av_media_info"????????"av_muxers"????????????"av_spectrogram_video"
[13]?"av_video_convert"?????"av_video_images"??????"av_video_info"???????
[16]?"bartlett"?????????????"bhann"????????????????"bharris"?????????????
[19]?"blackman"?????????????"bnuttall"?????????????"bohman"??????????????
[22]?"cauchy"???????????????"dolph"????????????????"flattop"?????????????
[25]?"gauss"????????????????"hamming"??????????????"hanning"?????????????
[28]?"lanczos"??????????????"nuttall"??????????????"parzen"??????????????
[31]?"read_audio_bin"???????"read_audio_fft"???????"sine"????????????????
[34]?"tukey"????????????????"welch"???????????????
av 中的函數(shù),其實(shí)僅僅只有 35個,量并不是很大,但涉及到音視頻相關(guān)的一系列知識,想要熟練使用的話,仍需付出大量的實(shí)踐。
---end---
總結(jié)
以上是生活随笔為你收集整理的ffmpeg builds by zeranoe_FFmpeg的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 渠道号_亲测:安卓打渠道
- 下一篇: python处理word文档保留格式_p