Skip to content

Commit

Permalink
fixed #2
Browse files Browse the repository at this point in the history
  • Loading branch information
zyzsdy committed Nov 18, 2018
1 parent 7585f32 commit 6d33ee9
Show file tree
Hide file tree
Showing 4 changed files with 130 additions and 10 deletions.
14 changes: 14 additions & 0 deletions NegativeEncoder/EncodingQueue.cs
Original file line number Diff line number Diff line change
Expand Up @@ -298,6 +298,20 @@ internal EncodingTask AddFFPEncodingTask(string baseDir, string input, string ou

return newTask;
}

internal EncodingTask AddFFPWithAudioVideoEncodingTask(string baseDir, string input, string output, Config config)
{
var name = System.IO.Path.GetFileName(output);
var newTask = new EncodingTask(name, EncodingType.SimpleWithAudio);
newTask.Destroyed += NewTask_Destroyed;

var fileargs = TaskBuilder.FFPWithAudioVideoEncodingTaskBuilder(baseDir, input, output, config);
newTask.Start(fileargs.Item1, fileargs.Item2);
newTask.RunLog += fileargs.Item1 + " " + fileargs.Item2 + "\n";
Add(newTask);

return newTask;
}
}

public static class ProcessEx
Expand Down
6 changes: 5 additions & 1 deletion NegativeEncoder/MainWindow.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,11 @@
<TabItem Header="常用">
<Grid>
<GroupBox Header="FFmpeg Pipe" Height="58" VerticalAlignment="Top" Margin="10,10,10,0">
<Button x:Name="startFFPEncodingButton" Content="开始压制" Margin="0,10,10,0" VerticalAlignment="Top" HorizontalAlignment="Right" Width="74" Height="22" Click="startFFPEncodingButton_Click"/>
<Grid>
<Button x:Name="startFFPEncodingButton" Content="无音频" Margin="10,10,0,0" VerticalAlignment="Top" Height="22" Click="startFFPEncodingButton_Click" HorizontalAlignment="Left" Width="74"/>
<Button x:Name="startFFPAudioEncodingButton" Content="复制音频" Margin="89,10,0,0" VerticalAlignment="Top" Height="22" HorizontalAlignment="Left" Width="74" Click="startFFPAudioEncodingButton_Click"/>
<Button x:Name="startFFPAVEncodingButton" Content="处理音频与视频" Margin="168,10,0,0" VerticalAlignment="Top" Height="22" HorizontalAlignment="Left" Width="100" Click="startFFPAVEncodingButton_Click"/>
</Grid>
</GroupBox>
</Grid>
</TabItem>
Expand Down
59 changes: 50 additions & 9 deletions NegativeEncoder/MainWindow.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -763,14 +763,7 @@ private void startFFPEncodingButton_Click(object sender, RoutedEventArgs e)
return;
}
EncodingTask t;
if (isAudioEncodeCheckBox.IsChecked == true)
{
t = encodingQueue.AddFFPWithAudioEncodingTask(baseDir, videoInputTextBox.Text, videoSaveTextBox.Text, config);
}
else
{
t = encodingQueue.AddFFPEncodingTask(baseDir, videoInputTextBox.Text, videoSaveTextBox.Text, config);
}
t = encodingQueue.AddFFPEncodingTask(baseDir, videoInputTextBox.Text, videoSaveTextBox.Text, config);
startFFPEncodingButton.IsEnabled = false;
startFFPEncodingButton.Content = "请等待...";
Task.Run(() =>
Expand All @@ -779,7 +772,7 @@ private void startFFPEncodingButton_Click(object sender, RoutedEventArgs e)
Dispatcher.Invoke(() =>
{
startFFPEncodingButton.IsEnabled = true;
startFFPEncodingButton.Content = "开始压制";
startFFPEncodingButton.Content = "无音频";
OpenTaskDetailWindow(t);
});
});
Expand Down Expand Up @@ -905,5 +898,53 @@ private void deletePreset_Click(object sender, RoutedEventArgs e)
presetSelecter.SelectedIndex = 0;
}
}

private void startFFPAudioEncodingButton_Click(object sender, RoutedEventArgs e)
{
if (videoInputTextBox.Text == "" || videoSaveTextBox.Text == "")
{
MessageBox.Show("输入和输出都不能为空");
return;
}
EncodingTask t;
t = encodingQueue.AddFFPWithAudioEncodingTask(baseDir, videoInputTextBox.Text, videoSaveTextBox.Text, config);

startFFPAudioEncodingButton.IsEnabled = false;
startFFPAudioEncodingButton.Content = "请等待...";
Task.Run(() =>
{
Thread.Sleep(3000);
Dispatcher.Invoke(() =>
{
startFFPAudioEncodingButton.IsEnabled = true;
startFFPAudioEncodingButton.Content = "复制音频";
OpenTaskDetailWindow(t);
});
});
}

private void startFFPAVEncodingButton_Click(object sender, RoutedEventArgs e)
{
if (videoInputTextBox.Text == "" || videoSaveTextBox.Text == "")
{
MessageBox.Show("输入和输出都不能为空");
return;
}
EncodingTask t;
t = encodingQueue.AddFFPWithAudioVideoEncodingTask(baseDir, videoInputTextBox.Text, videoSaveTextBox.Text, config);

startFFPAVEncodingButton.IsEnabled = false;
startFFPAVEncodingButton.Content = "请等待...";
Task.Run(() =>
{
Thread.Sleep(3000);
Dispatcher.Invoke(() =>
{
startFFPAVEncodingButton.IsEnabled = true;
startFFPAVEncodingButton.Content = "处理音频与视频";
OpenTaskDetailWindow(t);
});
});
}
}
}
61 changes: 61 additions & 0 deletions NegativeEncoder/TaskBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -359,6 +359,67 @@ internal static Tuple<string, string> FFPWithAudioEncodingTaskBuilder(string bas
return new Tuple<string, string>(batFullname, "");
}

internal static Tuple<string, string> FFPWithAudioVideoEncodingTaskBuilder(string baseDir, string input, string output, Config config)
{
//temp work dir
string workDir = System.IO.Path.GetDirectoryName(output);
string videoName = System.IO.Path.GetFileNameWithoutExtension(output) + "_videoTemp.mp4";
string videoFullname = System.IO.Path.Combine(workDir, videoName);
string aacName = System.IO.Path.GetFileNameWithoutExtension(output) + "_aacTemp.aac";
string aacFullname = System.IO.Path.Combine(workDir, aacName);
//build bat
string batName = System.IO.Path.GetFileNameWithoutExtension(output) + "_ffpWithAudioVideoBatTemp.bat";
string batFullname = System.IO.Path.Combine(workDir, batName);

var batSb = new StringBuilder();
batSb.Append("@echo off\n");

var ffmpegFile = System.IO.Path.Combine(baseDir, "Lib\\ffmpeg.exe");
var neroaacFile = System.IO.Path.Combine(baseDir, "Lib\\neroAacEnc.exe");
var mp4boxFile = System.IO.Path.Combine(baseDir, "Lib\\MP4Box.exe");
var executableEncodingFileName = GetBaseEncoderFile(baseDir, config);
var bitrate = (int.Parse(config.BitrateValue ?? "128") * 1000).ToString();
string gargs = GenericArgumentBuilder(config);

var addArgList = new List<string>();

if (config.IsSetResize)
{
addArgList.Add("--output-res");
addArgList.Add(String.Format("{0}x{1}", config.ResizeXValue ?? "1920", config.ResizeYValue ?? "1080"));
}

string addargs = String.Join(" ", addArgList);

batSb.AppendFormat("\"{0}\" -y -i \"{1}\" -an -pix_fmt yuv420p -f yuv4mpegpipe - | \"{2}\" --y4m -i - -o \"{3}\" {4} {5}\n",
ffmpegFile,
input,
executableEncodingFileName,
videoFullname,
gargs,
addargs);
batSb.AppendFormat("\"{0}\" -y -i \"{1}\" -vn -sn -v 0 -c:a pcm_s16le -af aresample=async=1 -f wav pipe: | \"{2}\" -ignorelength -lc -br {3} -if - -of \"{4}\"\n",
ffmpegFile,
input,
neroaacFile,
bitrate,
aacFullname);
batSb.AppendFormat("\"{0}\" -add \"{1}#trackID=1:par=1:1:name=\" -add \"{2}:name=\" -new \"{3}\"\n",
mp4boxFile,
videoFullname,
aacFullname,
output);

batSb.AppendFormat("@del \"{0}\"\n", videoFullname);
batSb.AppendFormat("@del \"{0}\"\n", aacFullname);
batSb.AppendFormat("@del \"{0}\"\n", batFullname);

//save bat
TempFileHelper(batFullname, batSb.ToString());

return new Tuple<string, string>(batFullname, "");
}

internal static Tuple<string, string> FFPEncodingTaskBuilder(string baseDir, string input, string output, Config config)
{
//temp work dir
Expand Down

0 comments on commit 6d33ee9

Please sign in to comment.