2017-09-05 77 views
0

我正在使用ffmpeg作爲其核心功能的一部分的python項目。從本質上說ffmpeg我用歸結爲這兩個命令的功能:在python應用程序中使用FFmpeg:ffmpeg工具或libav *庫?

ffmpeg -i udp://<address:port> -qscale:v 2 -vf "fps=30" sttest%04d.jpg 
ffmpeg -i udp://<address:port> -map data-re -codec copy -f data out.bin 

很簡單的東西。

我想創建一個自包含的程序(使用上述ffmpeg功能),可以很容易地安裝在任何特定的系統上,而不依賴於該系統具有必要的依賴關係,希望我會將這些依賴關係與程序本身。

考慮到這一點,最好是使用libav*庫在程序中執行此功能?或者ffmpeg命令行工具的包裝器(ffmpy)會是更好的選擇嗎?我目前關於每種方法的缺點的想法是,使用這些庫可能是最佳實踐,但是學習如何使用它們(並且可能學習C,我從未學過,在這個過程中)似乎過於複雜做我上面提到的那兩件基本的事情。整體的圖書館對我來說有點像一個黑盒子,沒有很多文檔。但是使用ffmpeg的包裝的問題是,它實質上依賴於調用一個子流程,這似乎有點草率。雖然我不確定爲什麼我覺得自己內心地反對子流程。

+0

如果您不知道C,請堅持使用命令行實用程序。 – halfelf

回答

3

這是有點意見的問題,但是我建議在子進程中使用ffmpeg CLI,只要你在做一些它支持的事情,只要使用libav *庫,如果你有一些要求CLI不能真正滿足。

雖然您可以在庫中獲得更多的靈活性,但API非常複雜,您可能會花大部分時間重複CLI的功能(ffmpeg.c,只是將庫粘合在一起的主要程序是大約4800行,不包括其3700行選項解析器)。而且這很可能會增加一些錯誤 - 特別是如果你缺乏C的知識。所以如果你能讓CLI去做你需要的東西,那無疑是最少阻力的道路。子流程中沒有什麼羞恥:這就是Unix的方式!

相關問題