Aegisub:一个可以给ffmpeg当GUI的字幕软件

首先当然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