Encoder.vala 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. namespace Publicate.Video {
  2. public class Encoder {
  3. public string input_file { get; private set; }
  4. public string output_dir { get; private set; }
  5. public EncodingProfile profile { get; private set; }
  6. public signal void progress_changed(double fraction, bool completed);
  7. public Encoder(File input, string output_dir, EncodingProfile profile) {
  8. input_file = input.get_path();
  9. this.output_dir = output_dir;
  10. this.profile = profile;
  11. }
  12. public void encode() throws Error {
  13. progress_changed(0.0, false);
  14. var output_file = output_dir + "/" + profile.output_name();
  15. var first_pass = new Subprocess.newv(profile.get_first_pass_command(input_file, output_file), GLib.SubprocessFlags.NONE);
  16. first_pass.wait();
  17. if(first_pass.get_exit_status() != 0) {
  18. throw new Error.literal(Quark.from_string("first-pass-failed"), 19, "Failed to analyse video");
  19. }
  20. progress_changed(0.5, false);
  21. var second_pass = new Subprocess.newv(profile.get_second_pass_command(input_file, output_file), GLib.SubprocessFlags.NONE);
  22. second_pass.wait();
  23. if(second_pass.get_exit_status() != 0) {
  24. throw new Error.literal(Quark.from_string("second-pass-failed"), 19, "Failed to encode video");
  25. }
  26. progress_changed(1.0, true);
  27. }
  28. }
  29. }