This code is an Applescript intended to be used along with folder actions to batch convert files dropped in a folder using ffmpeg.
(*
Convert MPG files in a folder to h264 using ffmpeg (ffmpegx).
March 2010 Fp www.designeddrawnmade.blogspot.com
Requires ffmpegX to exist in /Applications/ffmpegX_0.0.9y/ffmpegX.app
Derived from Apple sample code, etc.
*)
property done_foldername : "Done"
property extension_list : {"mpeg", "mpg", "MPG", "MPEG"}
on adding folder items to this_folder after receiving these_items
tell application "Finder"
if not (exists folder done_foldername of this_folder) then
make new folder at this_folder with properties {name:done_foldername}
end if
end tell
try
repeat with i from 1 to number of items in these_items
set this_item to item i of these_items
set ff_Path to "/Applications/ffmpegX_0.0.9y/ffmpegX.app//Contents/Resources/" as string
set this_item_posix to the POSIX path of this_item
set pathOnly to path_only(this_item_posix)
set name_wExt to remove_path(this_item_posix)
set nameOnly to remove_extension(name_wExt)
set file_extension to get_extension(this_item)
set temp_filename to pathOnly & "Done/" & nameOnly
set temp_filename to quoted form of temp_filename
set this_item_posix_q to quoted form of this_item_posix
if file_extension is not in the extension_list then
do shell script "cp " & this_item_posix_q & " " & pathOnly & "Done/"
set finalfile to pathOnly & "Done/" & name_wExt
change_dates(this_item, finalfile)
do shell script "rm " & this_item_posix_q
else
-- display dialog "variables" & return & return & pathOnly & return & nameOnly & return & file_extension & return & temp_filename & return & name_wExt
do shell script ff_Path & "ffmpeg -i " & this_item_posix_q & " -an -f yuv4mpegpipe - | " & ff_Path & "x264 -v --no-cabac -b 0 --qpmin 22 --qpmax 51 -B 5100 --me hex --threads 2 --level 13 --fps 30000/1001 -o " & temp_filename & ".ff.video.mp4 - 640x480 "
do shell script ff_Path & "ffmpeg -i " & temp_filename & ".ff.video.mp4 -i " & this_item_posix_q & " -y -vn -f mp4 -acodec aac -ab 128 -ar 44100 -ac 2 -map 1.0:0.0 " & temp_filename & ".ff.audio.mp4 "
do shell script ff_Path & "mp4box -add " & temp_filename & ".ff.video.mp4 -add " & temp_filename & ".ff.audio.mp4 -new " & temp_filename & ".ff.mp4"
do shell script "rm " & temp_filename & ".ff.video.mp4 && rm " & temp_filename & ".ff.audio.mp4"
set finalfile to pathOnly & "Done/" & nameOnly & ".ff.mp4"
change_dates(this_item, finalfile)
end if
end repeat
end try
end adding folder items to
on get_extension(this_item)
tell application "Finder" to set file_extension to the name extension of this_item
end get_extension
on remove_path(this_name)
repeat while this_name contains "/"
set x to the offset of "/" in this_name
set this_name to (text (x + 1) thru -1 of this_name)
end repeat
return this_name
end remove_path
on path_only(this_name)
if this_name contains "/" then
set this_name to (the reverse of every character of this_name) as string
set x to the offset of "/" in this_name
set this_name to (text (x) thru -1 of this_name)
set this_name to (the reverse of every character of this_name) as string
end if
return this_name
end path_only
on remove_extension(this_name)
if this_name contains "." then
set this_name to (the reverse of every character of this_name) as string
set x to the offset of "." in this_name
set this_name to (text (x + 1) thru -1 of this_name)
set this_name to (the reverse of every character of this_name) as string
end if
return this_name
end remove_extension
on change_dates(oldfile, file_)
tell application "Finder" to set old_date to the creation date of file oldfile
set {year:y, month:m, day:d, hours:hh, minutes:mm} to (old_date)
set old_date to y * 100000000 + m * 1000000 + d * 10000 + hh * 100 + mm
set old_date_string to remove_scientific(old_date)
set file_ to POSIX path of file_
do shell script "touch -t " & old_date_string & " " & quoted form of file_
end change_dates
on remove_scientific(this_number)
set this_number to this_number as string
if this_number contains "E" then
set this_number to (the reverse of every character of this_number) as string
set x to the offset of "E" in this_number
set this_number to (text (x + 1) thru -1 of this_number)
set this_number to (the reverse of every character of this_number) as string
end if
if this_number contains "." then
set this_number to (the reverse of every character of this_number) as string
set y to the offset of "." in this_number
set timepartA to (text (y + 1) thru -1 of this_number)
set this_number to (the reverse of every character of this_number) as string
set z to the offset of "." in this_number
set timepartB to (text (z + 1) thru -1 of this_number)
end if
set new_number to timepartA & timepartB
return new_number
end remove_scientific
No comments:
Post a Comment