假日洗車:ffmpeg

要處理 ffmpeg 之前要處理 homebrew:要處理影音工具之前,要處理如何運用工具。

> brew reinstall ffmpeg --with-vpx --with-vorbis --with-libvorbis --with-vpx --with-vorbis --with-theora --with-libogg --with-libvorbis --with-gpl --with-version3 --with-nonfree --with-postproc --with-libaacplus --with-libass --with-libcelt --with-libfaac --with-libfdk-aac --with-libfreetype --with-libmp3lame --with-libopencore-amrnb --with-libopencore-amrwb --with-libopenjpeg --with-openssl --with-libopus --with-libschroedinger --with-libspeex --with-libtheora --with-libvo-aacenc --with-libvorbis --with-libvpx --with-libx264 --with-libxvid

homebrew 就像是「系統性搭蓋違建的工具」。只是這個違建如何多麽地讓人想搭,而且原建築師沒有提供同樣的工具。

這篇文章〈Homebrew Demystified: OS X’s Ultimate Package Manager〉這樣解釋:

A package manager is an application that handles all the above for you with one simple command. Up until recently, MacPorts was the package manager of choice for OS X, followed closely by Fink. I won’t be going into comparisons of these managers here, and if you’re interested in knowing more you can Google around for articles such as this one.

What does a package manager do, exactly? The premise is simple:

  1. Takes a single command as input and figures out which software package you want installed
  2. Downloads the source code of the package (or in Fink’s case, the pre-built application itself)
  3. Figures out if any dependencies are present and if so, downloads them as well
  4. Compiles (builds) the dependencies from the source code files and installs them
  5. Builds your requested software
  6. Installs it into the predefined location

A package manager such as Homebrew automatically handles all dependencies and installs requested software into one common location for easy access and updating.

Thus, installing the aforementioned Imagemagick with Homebrew becomes as simple as running brew install imagemagick.

ffmpeg 就是那個讓「套件管理員」可以管理的「套件」。如果你有在看它最新版本的說明文件,你會發現裡面有很大一個成分是各種濾鏡(filter)。它的說明頁面是這樣開頭自我介紹的:

FFmpeg is the leading multimedia framework, able to decodeencodetranscodemuxdemuxstreamfilter and play pretty much anything that humans and machines have created. It supports the most obscure ancient formats up to the cutting edge. No matter if they were designed by some standards committee, the community or a corporation. It is also highly portable: FFmpeg compiles, runs, and passes our testing infrastructure FATE across Linux, Mac OS X, Microsoft Windows, the BSDs, Solaris, etc. under a wide variety of build environments, machine architectures, and configurations.

ffmpeg 計畫主要由三種工具構成:ffmpeg 轉換工具、ffplay 播放工具,以及 ffprobe 分析偵錯工具。它也對開發者提供下列工具:

  • libavutil 簡化程式的函式庫,包含隨機數字產生器、資料結構、數學常式、核心多媒體公用程式等等。
  • libavcodec 影音 codecs 的解碼器與加碼器。
  • libavformat 多媒體容器格式展頻(demuxer)與壓頻(muxer)的函式庫。
  • libavdevice 包含往輸入與向輸出裝置進出許多通用多媒體 I/O 框架,包括 Video4Linux、Video4Linux2, VfW 與 ALSA 的函式庫。
  • libavfilter 媒體過濾器的函式庫。
  • libswscale 高度最佳化影像規模調整,與色彩空間/畫素格式轉換操作作業。
  • libswresample 聲音重新取樣,混搭與取樣格式轉換作業。

他的文件位於 http://ffmpeg.org/documentation.html ,包括命令列指令、元件的文件、函式庫等資料文件。

透過 homebrew 烘焙 ffplay 沒有順利裝成,雖然當不了一整個男子漢,但是下載下來也可以吧(攤手)。ffmpeg 計畫鼓勵參與者直接 build 系統,所以看來也得更近一步了解 git 系統了。

git 系統像是一個異形寄生在原來的檔案系統上。當然,原來的檔案系統已經是一個「怪胎」了,不過在我們把它當作工具的狀況下,常常會忘記這件事情。而 git 的「寄生」讓這件事情徹底給「異形化」。

在你自己電腦上進行版本控制,往往會用另存新檔、或更改檔案名字的方式來進行。取代這種古老作法的最早方式,是本機的版本的「版本控制系統」(Local Version Control System)。自己電腦裡面的版本控制只需要每次記錄下來差異,理論上就應該可以回復成為任何一個版本的檔案。其次是眾人合作的電腦檔案,需要一個「集中式版本控制系統」(Centralized Version Control Systems, CVCSs)。再下來是「分散式版本控制系統」(Distributed Version Control System)— git 管理的是你的系統裡面一連串的 snapshot。

過往的作業系統的使用,bash 系統殼的種種使用,雖然很簡單地讓一個操作者悠游其中,但是忘記問「為什麼」這個問題,以致於未能夠把這些「怪奇現象」串連起來(例如我根據這個檔案,解決了 bash 不會自動載入 .profile 的問題了)。

程式裡呼叫應用程式:"open -a Appname"

Git 不必然是跟 GitHub 有關係呢。

這是用下載下來的 ffplay 播映爸爸紀念影片的樣子。

螢幕快照 2018-04-04 下午3.42.38

但是醒醒吧,你沒有車呢。(笑)

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.