mirror of
https://git.femboyfinancial.jp/james/lipsync.git
synced 2025-02-18 00:19:02 -08:00
221 lines
8.7 KiB
C#
221 lines
8.7 KiB
C#
/*
|
|
* AviOutput.cs
|
|
* Copyright (c) 2007-2009 kbinani
|
|
*
|
|
* This file is part of LipSync.
|
|
*
|
|
* LipSync is free software; you can redistribute it and/or
|
|
* modify it under the terms of the BSD License.
|
|
*
|
|
* LipSync is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
*/
|
|
using System;
|
|
using System.IO;
|
|
using System.Windows.Forms;
|
|
using System.Drawing;
|
|
|
|
using Boare.Lib.AppUtil;
|
|
|
|
namespace LipSync {
|
|
|
|
public partial class AviOutput : Form, IMultiLanguageControl {
|
|
private bool m_raw_mode = false;
|
|
private float m_start = 0f;
|
|
private float m_end = 0f;
|
|
|
|
public AviOutput( bool raw_mode ) {
|
|
InitializeComponent();
|
|
ApplyLanguage();
|
|
ApplyFont( AppManager.Config.Font.GetFont() );
|
|
m_raw_mode = raw_mode;
|
|
if ( groupAudio.Enabled ) {
|
|
if ( File.Exists( AppManager.SaveData.m_audioFile ) ) {
|
|
this.chkMergeAudio.Enabled = true;
|
|
} else {
|
|
this.chkMergeAudio.Enabled = false;
|
|
}
|
|
}
|
|
if ( m_raw_mode ) {
|
|
btnVideoCompression.Enabled = false;
|
|
txtDescription.Enabled = false;
|
|
} else {
|
|
btnVideoCompression.Enabled = true;
|
|
txtDescription.Enabled = true;
|
|
}
|
|
txtFile.Text = AppManager.Config.LastAviPath;
|
|
JudgeWritable();
|
|
}
|
|
|
|
public void ApplyFont( Font font ) {
|
|
this.Font = font;
|
|
foreach ( Control c in this.Controls ) {
|
|
Boare.Lib.AppUtil.Misc.ApplyFontRecurse( c, font );
|
|
}
|
|
}
|
|
|
|
public void ApplyLanguage() {
|
|
btnCancel.Text = _( "Cancel" );
|
|
btnOK.Text = _( "Save" );
|
|
lblFileName.Text = _( "File Name" );
|
|
if ( AppManager.Config.PathFFmpeg != "" && File.Exists( AppManager.Config.PathFFmpeg ) ) {
|
|
groupAudio.Text = _( "Audio" );
|
|
groupAudio.Enabled = true;
|
|
} else {
|
|
groupAudio.Text = _( "Audio" ) + " (" + _( "Set the path of ffmpeg to enable this option" ) + ")";
|
|
groupAudio.Enabled = false;
|
|
}
|
|
if ( AppManager.Config.PathMEncoder != "" && File.Exists( AppManager.Config.PathMEncoder ) ) {
|
|
groupFlv.Text = _( "FLV and MP4" );
|
|
groupFlv.Enabled = true;
|
|
} else {
|
|
groupFlv.Text = _( "FLV and MP4" ) + " (" + _( "Set the path of mencoder and ffmpeg to enable this option" ) + ")";
|
|
groupFlv.Enabled = false;
|
|
}
|
|
chkFLV.Text = _( "Convert to FLV" );
|
|
chkMP4.Text = _( "Convert to MP4" );
|
|
chkMergeAudio.Text = _( "Merge WAVE to AVI" );
|
|
chkDeleteIntermediate.Text = _( "Delete Intermediate File" );
|
|
btnVideoCompression.Text = _( "Video Compression" );
|
|
groupStartEnd.Text = _( "Specify Output Range" );
|
|
chkStart.Text = _( "Start" );
|
|
chkEnd.Text = _( "End" );
|
|
checkContainsAlpha.Text = _( "Add Alpha" );
|
|
}
|
|
|
|
public static string _( string s ) {
|
|
return Messaging.GetMessage( s );
|
|
}
|
|
|
|
public AviOutputArguments Arguments {
|
|
get {
|
|
AviOutputArguments aoa = new AviOutputArguments();
|
|
aoa.AviFile = this.FileName;
|
|
aoa.End = m_end;
|
|
aoa.EndSpecified = chkEnd.Checked;
|
|
aoa.FileNameParser = "";
|
|
aoa.ImageFormat = null;
|
|
aoa.IsDeleteIntermediateRequired = chkDeleteIntermediate.Checked;
|
|
aoa.IsFlvEncodeRequired = chkFLV.Checked;
|
|
aoa.IsMp4EncodeRequired = chkMP4.Checked;
|
|
if ( aoa.IsMp4EncodeRequired && aoa.IsFlvEncodeRequired ) {
|
|
aoa.IsFlvEncodeRequired = false;
|
|
}
|
|
aoa.IsTransparent = checkContainsAlpha.Checked;
|
|
aoa.IsWaveMergeRequired = chkMergeAudio.Checked;
|
|
aoa.Start = m_start;
|
|
aoa.StartSpecified = chkStart.Checked;
|
|
aoa.UseVfwEncoder = radioVfw.Checked;
|
|
return aoa;
|
|
}
|
|
}
|
|
|
|
private void btnOK_Click( object sender, EventArgs e ) {
|
|
//ディレクトリが存在するかどうかを確認
|
|
string name = FileName;
|
|
if ( !Directory.Exists( Path.GetDirectoryName( name ) ) ) {
|
|
MessageBox.Show( string.Format( _( "Directory {0} does not exist." ), Path.GetDirectoryName( name ) ),
|
|
_( "Error" ),
|
|
MessageBoxButtons.OK,
|
|
MessageBoxIcon.Exclamation );
|
|
return;
|
|
}
|
|
|
|
//既にファイルが存在することを警告
|
|
if ( File.Exists( name ) ) {
|
|
if ( MessageBox.Show( string.Format( _( "{0} already exists.\nDo you want to replace it?" ), name ),
|
|
"LipSync",
|
|
MessageBoxButtons.YesNo,
|
|
MessageBoxIcon.Exclamation ) == DialogResult.No ) {
|
|
return;
|
|
}
|
|
}
|
|
try {
|
|
m_start = float.Parse( txtStart.Text );
|
|
m_end = float.Parse( txtEnd.Text );
|
|
this.DialogResult = DialogResult.OK;
|
|
} catch ( Exception ex ) {
|
|
MessageBox.Show( _( "Invalid value has been entered" ),
|
|
_( "Error" ),
|
|
MessageBoxButtons.OK,
|
|
MessageBoxIcon.Exclamation );
|
|
Common.LogPush( ex );
|
|
}
|
|
}
|
|
|
|
private string FileName {
|
|
get {
|
|
if ( Path.GetExtension( txtFile.Text ).ToLower() != ".avi" ) {
|
|
string name = txtFile.Text;
|
|
txtFile.Text = Path.Combine( Path.GetDirectoryName( name ), Path.GetFileNameWithoutExtension( name ) + ".avi" );
|
|
}
|
|
return txtFile.Text;
|
|
}
|
|
}
|
|
|
|
private void btnFile_Click( object sender, EventArgs e ) {
|
|
using ( SaveFileDialog dlg = new SaveFileDialog() ) {
|
|
if ( AppManager.Config.LastAviPath != "" ) {
|
|
try {
|
|
dlg.InitialDirectory = Path.GetDirectoryName( AppManager.Config.LastAviPath );
|
|
} catch {
|
|
}
|
|
}
|
|
try {
|
|
dlg.Filter = _( "Avi file(*.avi)|*.avi" ) + "|" + _( "All Files(*.*)|*.*" );
|
|
} catch {
|
|
dlg.Filter = "Avi file(*.avi)|*.avi|All Files(*.*)|*.*";
|
|
}
|
|
dlg.OverwritePrompt = false;
|
|
if ( dlg.ShowDialog() == DialogResult.OK ) {
|
|
AppManager.Config.LastAviPath = dlg.FileName;
|
|
txtFile.Text = dlg.FileName;
|
|
JudgeWritable();
|
|
}
|
|
}
|
|
}
|
|
|
|
private void JudgeWritable() {
|
|
if ( txtFile.Text != "" ) {
|
|
btnOK.Enabled = true;
|
|
} else {
|
|
btnOK.Enabled = false;
|
|
}
|
|
}
|
|
|
|
private void chkStart_CheckedChanged( object sender, EventArgs e ) {
|
|
txtStart.Enabled = chkStart.Checked;
|
|
if ( txtStart.Enabled ) {
|
|
txtStart.Focus();
|
|
}
|
|
}
|
|
|
|
private void checkBox1_CheckedChanged( object sender, EventArgs e ) {
|
|
txtEnd.Enabled = chkEnd.Checked;
|
|
if ( txtEnd.Enabled ) {
|
|
txtEnd.Focus();
|
|
}
|
|
}
|
|
|
|
private void chkFLV_CheckedChanged( object sender, EventArgs e ) {
|
|
if ( chkFLV.Checked && chkMP4.Checked ) {
|
|
chkMP4.Checked = false;
|
|
}
|
|
this.chkDeleteIntermediate.Enabled = chkFLV.Checked | chkMP4.Checked | chkMergeAudio.Checked;
|
|
}
|
|
|
|
private void chkMP4_CheckedChanged( object sender, EventArgs e ) {
|
|
if ( chkMP4.Checked && chkFLV.Checked ) {
|
|
chkFLV.Checked = false;
|
|
}
|
|
this.chkDeleteIntermediate.Enabled = chkFLV.Checked | chkMP4.Checked | chkMergeAudio.Checked;
|
|
}
|
|
|
|
private void chkMergeAudio_CheckedChanged( object sender, EventArgs e ) {
|
|
this.chkDeleteIntermediate.Enabled = chkFLV.Checked | chkMP4.Checked | chkMergeAudio.Checked;
|
|
}
|
|
}
|
|
|
|
}
|