2013-10-24 53 views
3

首先,我搜索了我的問題。但沒有人能解決它。HandBrakeCLI bash腳本轉換文件夾中的所有視頻

我想轉換目錄中的所有視頻文件,輸出將保存在另一個目錄中。我從某個地方得到了一個bash腳本,我不記得了。

#!/bin/bash 

SRC="/home/abc/public_html/filex/store/vids/toriko/VIDEOS HERE" 
DEST="/home/abc/public_html/filex/store/vids/toriko/51-100" 
DEST_EXT=mp4 
HANDBRAKE_CLI=HandBrakeCLI 
PRESET="iPhone & iPod Touch" 

for FILE in "`ls $SRC`" 
do 
filename=$(basename $FILE) 
extension=${filename##*.} 
filename=${filename%.*} 

$HANDBRAKE_CLI -i "$SRC"/$FILE -o "$DEST"/"$filename".$DEST_EXT "$PRESET" 

done 

問題是,文件的輸出將是沒有文件名..只有「.mp4」。 ,並且只有1個文件生成。意味着,從該文件夾中的50個視頻中,只有1個文件使用名稱「.mp4」生成,之後,HandBrakeCLI退出。 任何人都可以修復我的代碼? 我在bash編碼沒有的遭遇..所以,giiven合適的劇本將欣賞:)

回答

2

你行

for FILE in "`ls $SRC`" 

有效地創建只有一個迭代,其中FILE包含的文件列表(和它無法處理$SRC中的空間)。更好地與

for FILE in "$SRC"/* 

實例替換爲:

$ ls test 
1.txt 2.txt 
$ SRC=test; for f in "`ls $SRC`" ; do echo $f; done 
1.txt 2.txt 
$ SRC=test; for f in "$SRC"/* ; do echo $f; done 
test/1.txt 
test/2.txt 

旁註:你可以在那裏的空間沒有問題

$ ls "the test" 
1.txt 2.txt 
$ SRC="the test"; for f in "$SRC"/* ; do echo $f; done 
the test/1.txt 
the test/2.txt 
+0

我修改劇本。現在編碼過程運行良好。我可以通過查看它創建的具有自己名稱的輸出來看到它,而不是「.mp4」。 讓我們看看幾個視頻完成沒有任何錯誤,我會標記你的答:)順便說一句,謝謝:) – G3M

+0

別忘了; ) – damienfrancois

+0

完成沒有任何錯誤:)謝謝 – G3M

0

我只是用這個腳本的修改建議嘗試以上。我發現我需要在$ FILE的兩個用途中使用雙引號,以便用空格處理文件名。

所以......

名= $(名前綴 「$ FILE」)

$ HANDBRAKE_CLI -i 「$ SRC」/ 「$ FILE」 -o 「$ DEST」 /"$filename".$DEST_EXT「$ PRESET」

2

我試過這個腳本,和其他人喜歡它,但我想轉換遞歸目錄樹並將文件放在與.mp4擴展名相同的目錄下並刪除.avi文件,經過多次試驗和錯誤,我放棄了這個代碼,並搜索了一個新的代碼,id喜歡信用

http://www.surlyjake.com/blog/2010/08/10/script-to-run-handbrake-recursively-through-a-folder-tree/

提供原代碼!

這裏是我修改後的腳本,幾乎沒有修改BTW這個腳本是簡短的,甜蜜和容易理解。

#!/bin/bash 

# This Script Goes in Root Folder of TV show -- Example Folder Structure 
# /Stargate/Season\ 1/Epiosde.avi 
# /Stargate/Season\ 2/Epiosde.avi 
# /Stargate/handbrake_folder.script 
# Outputs all Files back inside same dir's and does all folders inside Startgate DIR 
# /Stargate/Season\ 1/Epiosde.mp4 
# /Stargate/Season\ 2/Epiosde.mp4 

# PRESET = -o flags for CLI can be got from GUI under Activity Log or from https://trac.handbrake.fr/wiki/CLIGuide OR you can use actual Presets! 

# PRESET="iPhone & iPod Touch" 

PRESET="--modulus 2 -e x264 -q 20 --vfr -a 1 -E ac3 -6 5point1 -R Auto -B 384 -D 0 --gain 0 --audio-fallback ac3 --encoder-preset=veryfast --encoder-level="5.2" --encoder-profile=high --verbose=1" 

if [ -z "$1" ] ; then 
TRANSCODEDIR="." 
else 
TRANSCODEDIR="$1" 
fi 
find "$TRANSCODEDIR"/* -type f -name "*.avi" -exec bash -c 'HandBrakeCLI -i "$1" -o "${1%\.*}".mp4 --preset="$PRESET"' __ {} \; && find . -name '*.avi' -exec rm -r  {} \; 

被警告:這將轉換然後刪除所有.AVI文件在腳本中的文件樹!

隨意取出

[-name "*.avi"] & [&& find . -name '*.avi' -exec rm -r  {} \;] 

禁用僅轉換.avi和去除的.avi或修改適合另一個分機。

乾杯,並希望這可以幫助別人!

+0

對不起,打擾你,這是我用當前CLI版本:0.10.2/OSX 10.11.2 失敗腳本似乎立即在退出結束; 任何想法?/感謝您的時間! – Levi

+1

我有更多的版本[在這裏](https://www.freesoftwareservers.com/index.php/2015/09/04/convert-videos-recursively-with-handbrake-script-handbrakecli/),但只是出於好奇心你在轉換AVI嗎?你是否嘗試過簡化PRESET? – FreeSoftwareServers

+0

我得到了腳本工作! 是的,我轉換AVI文件,雖然,雖然mp4文件比原來的AVI文件大... 我沒有嘗試指定預設,我試圖降低-q字段38,但我越來越相同的文件大小。 我會嘗試這個腳本,感謝您做出有用的事情! – Levi

1

我已經找到了解決辦法:

#!/bin/bash 

SRC="/home/abc/public_html/filex/store/vids/toriko/VIDEOS HERE" 
DEST="/home/abc/public_html/filex/store/vids/toriko/51-100" 
DEST_EXT=mp4 
HANDBRAKE_CLI=HandBrakeCLI 

for FILE in "$SRC"/* 
do 
    filename=$(basename "$FILE") 
    extension=${filename##*.} 
    filename=${filename%.*} 
    $HANDBRAKE_CLI -i "$FILE" -o "$DEST"/"$filename".$DEST_EXT 
done 
相關問題