lipsync/trunk/LipSync/Editor/AviOutput.cs

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;
}
}
}