首先当然Aegisub是一个字幕制作软件。
并且,为了方便制作字幕软件,Aegisub可以非常精准地预览视频、音频和字幕。
众所周知,ffmpeg是一个非常强大的媒体文件处理工具,但是官方只有命令行。
虽然有一些GUI,但是并不一定能非常精准快速地预览视频、音频和字幕,不一定方便自己修改。
而Aegisub由于支持lua扩展,就可以用来做别的事情。比如我刚刚做了替换视频中的音频,压制字幕到视频中两个功能。之前做了把一行字幕对应的视频/音频内容保存出来的功能。(当然也有限制,输入最多只能有1个视频、1个音频、1个字幕。只能说适合做合适的事情)
就提供个思路,感兴趣的朋友可以这么用试一试。
写的代码核心的部分非常简单,就是拼接参数。
function merge_video_audio()
os.execute('ffmpeg -i "' .. aegisub.project_properties().video_file .. '" -i "' ..
aegisub.project_properties().audio_file .. '" -vcodec copy -map 0:0 -map 1:0 -y "' ..
aegisub.project_properties().video_file .. '_replace_audio.' .. suffix .. '" & pause');
end
function merge_video_sub()
script_path = (aegisub.decode_path("?script/" .. aegisub.file_name()));
cmd = string.gsub(script_path,":.+",": & ") .. 'cd "'..script_path..'\\..\" & ' ;
video_path = aegisub.project_properties().video_file;
script_suffix = (string.gsub(script_path, '.+%.', ''));
video_suffix = (string.gsub(video_path, '.+%.', ''));
vf = '"subtitles=' .. aegisub.file_name() .. '"';
if (script_suffix == "ass") then
vf = '"ass=' .. aegisub.file_name() .. '"';
end
cmd = cmd .. 'ffmpeg -i "' .. aegisub.project_properties().video_file .. '" -vf ' .. vf .. ' -y "' ..
aegisub.project_properties().video_file .. '_merge_sub.' .. video_suffix .. '" & pause'
aegisub.debug.out(aegisub.file_name() .. "\n" ..cmd)
os.execute(cmd);
end