2015-09-14 52 views
1

我試圖設置一個使用ffmpeg開始將接收到的文件轉換爲另一種格式的已觀看文件夾(使用fswatch)(已將該部分整理出來)。 到目前爲止這麼好,我遇到的問題是讓腳本等待原始輸入(或主文件)完成渲染或已完全複製到我的監視文件夾中。製作觀看文件夾等待文件完成呈現

這裏的文件夾

fswatch -o ~/Desktop/autom_shell| xargs -n1 ~/Desktop/scripts_autom_shell/move_QT.sh 

move_QT.sh過濾器的腳本,並從我的接收文件夾的移動QuickTime影片到我編碼的文件夾。

我找了一個解決方案,發現kqwait,但我絕對不知道如何應用它在我的情況。

MacOS的10.10

回答

0

我已經看過了源kqwait,並讀取文檔上fswatch,儘管kqwait的名字,大部分的這些工具具有相同的基本設計。

它們等待通知操作正在文件系統中發生,這意味着刪除,重命名和寫入操作。他們無法真正做的是在應用程序的操作完成時通知您。有關於「寫入」通知的通知表明文件已關閉,但大多數這些實用程序的意圖不是等待發生(儘管名稱爲kqwait)。

這些實用程序中的大多數都是爲了等待文件系統上的任何事情發生,經過篩選才能對該文件系統中的特定文件或目錄作出反應。只有當你可以等待一系列寫通知的密切通知時,你纔有機會做你想要的。即使如此,還不清楚實際並且可靠地表明文件接收完成的密切通知。它僅僅意味着寫作停止了。在不知道應用程序的行爲的情況下,這可能意味着連接被刪除並且文件不完整,並且可能會在後續嘗試中恢復。

您真正需要的是能夠接收比文件系統中發生的更高級別事件的通知。

但是,除了這個,你可以管理的最好的方法是響應fswatch(或類似的命令),這表明寫入已經開始,然後隨着時間的推移監視你確定的傳入文件的任何新文件看看他們是否繼續增長(或者你繼續收到fswatch的通知,表明文字已經延續)。然後,經過足夠的時間後,腳本觀察到文件大小不再增長,或者足夠的時間過去了fswatch不再通知寫入正在發生,您可以假設文件已完成並嘗試啓動轉換。

這不僅僅是對示例文章的更正 - 它會編寫一些複雜的設計任何一種設計的複雜腳本,所有這些設計都基於不明確的假設(在假設接收前需要花費多少時間例如完成)。

+0

「不知道應用程序的行爲,這可能意味着連接被刪除,文件不完整,並可能在後續嘗試中恢復。」 基本上CPU使用率通過屋頂。如果應用程序閒置或忙於編輯任務(Avid Media Composer或Final Cut),則CPU負載在任何比例下都在1.5到15之間,而渲染時可能會高達1.500。我從 得到這個數字 ps -xco%cpu,command | grep AvidMediaComposer 這是一個我在Applescript中找到的代碼示例 – JSchrey

+0

對不起,這裏有新的,有格式問題。 'ps -xco%cpu,command | grep AvidMediaComposer' – JSchrey

0

要回答我的問題:

我嘗試了一些東西,罐頭檢測用於各種原因的CPU負載的想法。 我使用下面的代碼

prev_size=-1 # initialize variable 
new_size=`/usr/bin/du -sk "$file_i" | awk '{print $1}'` # get current file size 

while [ $prev_size != $new_size ] # repeat until these values are the same 
do 
/bin/sleep 5 # check every 5 seconds 
tmp_size=$new_size # move to intermediate value 
new_size=`/usr/bin/du -sk "$file_i" | awk '{print $1}'` # get new file size 
prev_size=$tmp_size 
done 

我發現here,依靠目錄大小。 雖然它不完美,但足以滿足我的目的。 希望我有更多的時間來處理這個問題,完成後會將代碼發佈到我的腳本中。

0
fswatch -xn /Users/...... | while read file; do 
while [ `lsof -t $file` > 0 ]; do sleep .1; done 
    ffmpeg........ 
done