Finally added the ability to transcode videos
This commit is contained in:
		@@ -2,10 +2,10 @@ use std::fs;
 | 
				
			|||||||
use std::path::Path;
 | 
					use std::path::Path;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub struct Repository {
 | 
					pub struct Repository {
 | 
				
			||||||
	base_dir: String,
 | 
						pub base_dir: String,
 | 
				
			||||||
	ingest_dir: String,
 | 
						pub ingest_dir: String,
 | 
				
			||||||
	archive_dir: String,
 | 
						pub archive_dir: String,
 | 
				
			||||||
	output_dir: String,
 | 
						pub output_dir: String,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl Repository {
 | 
					impl Repository {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,3 +1,6 @@
 | 
				
			|||||||
 | 
					use std::path::Path;
 | 
				
			||||||
 | 
					use std::process;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use crate::config::Config;
 | 
					use crate::config::Config;
 | 
				
			||||||
use crate::repository::Repository;
 | 
					use crate::repository::Repository;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -25,10 +28,34 @@ impl Transcoder {
 | 
				
			|||||||
			self.repository.archive_file(&i);
 | 
								self.repository.archive_file(&i);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			// perform the video transcode
 | 
								// perform the video transcode
 | 
				
			||||||
			// TODO - self.transcode(i);
 | 
								self.transcode(&i);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			// remove the source file
 | 
								// remove the source file
 | 
				
			||||||
			self.repository.cleanup_file(&i);
 | 
								self.repository.cleanup_file(&i);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						fn transcode(&self, file: &str) {
 | 
				
			||||||
 | 
							let ingest_file = Path::new(&self.repository.ingest_dir).join(file);
 | 
				
			||||||
 | 
							let output_file = Path::new(&self.repository.output_dir).join(file);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							let cmd_output = process::Command::new("/usr/bin/ffmpeg")
 | 
				
			||||||
 | 
								.arg("-i")        .arg(&*ingest_file.to_string_lossy())
 | 
				
			||||||
 | 
								.arg("-y")
 | 
				
			||||||
 | 
								.arg("-f")        .arg(&self.config.transcoder.video_format)
 | 
				
			||||||
 | 
								.arg("-c:v")      .arg(&self.config.transcoder.video_codec)
 | 
				
			||||||
 | 
								.arg("-s")        .arg(&self.config.transcoder.video_resolution)
 | 
				
			||||||
 | 
								.arg("-r")        .arg(format!("{}", self.config.transcoder.video_framerate))
 | 
				
			||||||
 | 
								.arg("-vf")       .arg(format!("'format={}'", &self.config.transcoder.video_color))
 | 
				
			||||||
 | 
								.arg("-profile:v").arg(&self.config.transcoder.video_profile)
 | 
				
			||||||
 | 
								.arg("-c:a")      .arg(&self.config.transcoder.audio_codec)
 | 
				
			||||||
 | 
								.arg(&*output_file.to_string_lossy())
 | 
				
			||||||
 | 
								.output()
 | 
				
			||||||
 | 
								.expect("Failed to execute command");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							//assert!(cmd_output.status.success());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							let results_raw = &String::from_utf8_lossy(&cmd_output.stderr);
 | 
				
			||||||
 | 
							println!("{}", results_raw);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user