private void buttonOpenVideo_Click(object sender, EventArgs e) { if (openFileDialog1.ShowDialog(this) == DialogResult.OK) { VideoFileName = openFileDialog1.FileName; labelVideoFileName.Text = VideoFileName; DateTime start; double durationInSeconds; string ext = Path.GetExtension(VideoFileName).ToLower(); if (ext == ".mp4" || ext == ".m4v" || ext == ".3gp") { Logic.Mp4.MP4Parser mp4Parser = new Logic.Mp4.MP4Parser(VideoFileName); start = mp4Parser.CreationDate; durationInSeconds = mp4Parser.Duration.TotalSeconds; } else { var fi = new FileInfo(VideoFileName); start = fi.CreationTime; VideoInfo vi = Utilities.GetVideoInfo(VideoFileName); durationInSeconds = vi.TotalMilliseconds / 1000.0; if (durationInSeconds < 1) { MessageBox.Show("Unable to get duration"); durationInSeconds = 60 * 60; } } dateTimePicker1.Value = start; timeUpDownStartTime.TimeCode = new TimeCode(start.Hour, start.Minute, start.Second, start.Millisecond); timeUpDownDuration.TimeCode = TimeCode.FromSeconds(durationInSeconds); } }
private bool ImportSubtitleFromMp4(string fileName) { var mp4Parser = new Logic.Mp4.MP4Parser(fileName); var mp4SubtitleTracks = mp4Parser.GetSubtitleTracks(); if (mp4SubtitleTracks.Count == 0) { MessageBox.Show(_language.NoSubtitlesFound); return false; } else if (mp4SubtitleTracks.Count == 1) { LoadMp4Subtitle(fileName, mp4SubtitleTracks[0]); return true; } else { var subtitleChooser = new MatroskaSubtitleChooser(); subtitleChooser.Initialize(mp4SubtitleTracks); if (subtitleChooser.ShowDialog(this) == DialogResult.OK) { LoadMp4Subtitle(fileName, mp4SubtitleTracks[subtitleChooser.SelectedIndex]); return true; } return false; } }
private void pointSyncViaOtherSubtitleToolStripMenuItem_Click(object sender, EventArgs e) { SyncPointsSync pointSync = new SyncPointsSync(); openFileDialog1.Title = _language.OpenOtherSubtitle; openFileDialog1.FileName = string.Empty; openFileDialog1.Filter = Utilities.GetOpenDialogFilter(); if (openFileDialog1.ShowDialog() == DialogResult.OK && File.Exists(openFileDialog1.FileName)) { Subtitle sub = new Subtitle(); Encoding enc; string fileName = openFileDialog1.FileName; //TODO: Check for mkv etc if (Path.GetExtension(fileName).ToLower() == ".sub" && IsVobSubFile(fileName, false)) { MessageBox.Show("VobSub files not supported here"); return; } if (Path.GetExtension(fileName).ToLower() == ".sup") { if (IsBluRaySupFile(fileName)) { MessageBox.Show("Bluray sup files not supported here"); return; } else if (IsSpDvdSupFile(fileName)) { MessageBox.Show("Dvd sup files not supported here"); return; } } if (Path.GetExtension(fileName).ToLower() == ".mkv" || Path.GetExtension(fileName).ToLower() == ".mks") { Matroska mkv = new Matroska(); bool isValid = false; bool hasConstantFrameRate = false; double frameRate = 0; int width = 0; int height = 0; double milliseconds = 0; string videoCodec = string.Empty; mkv.GetMatroskaInfo(fileName, ref isValid, ref hasConstantFrameRate, ref frameRate, ref width, ref height, ref milliseconds, ref videoCodec); if (isValid) { var subtitleList = mkv.GetMatroskaSubtitleTracks(fileName, out isValid); if (isValid) { if (subtitleList.Count == 0) { MessageBox.Show(_language.NoSubtitlesFound); return; } else { if (subtitleList.Count > 1) { MatroskaSubtitleChooser subtitleChooser = new MatroskaSubtitleChooser(); subtitleChooser.Initialize(subtitleList); if (_loading) { subtitleChooser.Icon = (Icon)this.Icon.Clone(); subtitleChooser.ShowInTaskbar = true; subtitleChooser.ShowIcon = true; } if (subtitleChooser.ShowDialog(this) == DialogResult.OK) { sub = LoadMatroskaSubtitleForSync(subtitleList[subtitleChooser.SelectedIndex], fileName); } } else { sub = LoadMatroskaSubtitleForSync(subtitleList[0], fileName); } } } } } if (Path.GetExtension(fileName).ToLower() == ".divx" || Path.GetExtension(fileName).ToLower() == ".avi") { MessageBox.Show("Divx files not supported here"); return; } var fi = new FileInfo(fileName); if ((Path.GetExtension(fileName).ToLower() == ".mp4" || Path.GetExtension(fileName).ToLower() == ".m4v" || Path.GetExtension(fileName).ToLower() == ".3gp") && fi.Length > 10000) { var mp4Parser = new Logic.Mp4.MP4Parser(fileName); var mp4SubtitleTracks = mp4Parser.GetSubtitleTracks(); if (mp4SubtitleTracks.Count == 0) { MessageBox.Show(_language.NoSubtitlesFound); return; } else if (mp4SubtitleTracks.Count == 1) { sub = LoadMp4SubtitleForSync(mp4SubtitleTracks[0]); } else { var subtitleChooser = new MatroskaSubtitleChooser(); subtitleChooser.Initialize(mp4SubtitleTracks); if (subtitleChooser.ShowDialog(this) == DialogResult.OK) { sub = LoadMp4SubtitleForSync(mp4SubtitleTracks[0]); } } } if (fi.Length > 1024 * 1024 * 10 && sub.Paragraphs.Count == 0) // max 10 mb { if (MessageBox.Show(this, string.Format(_language.FileXIsLargerThan10MB + Environment.NewLine + Environment.NewLine + _language.ContinueAnyway, fileName), Title, MessageBoxButtons.YesNoCancel) != DialogResult.Yes) return; } sub.Renumber(1); if (sub.Paragraphs.Count == 0) { SubtitleFormat f = sub.LoadSubtitle(fileName, out enc, null); if (f == null) { ShowUnknownSubtitle(); return; } } pointSync.Initialize(_subtitle, _fileName, _videoFileName, _videoAudioTrackNumber, fileName, sub); mediaPlayer.Pause(); if (pointSync.ShowDialog(this) == DialogResult.OK) { _subtitleListViewIndex = -1; MakeHistoryForUndo(_language.BeforePointSynchronization); _subtitle.Paragraphs.Clear(); foreach (Paragraph p in pointSync.FixedSubtitle.Paragraphs) _subtitle.Paragraphs.Add(p); _subtitle.CalculateFrameNumbersFromTimeCodesNoCheck(CurrentFrameRate); ShowStatus(_language.PointSynchronizationDone); ShowSource(); SubtitleListview1.Fill(_subtitle, _subtitleAlternate); } _videoFileName = pointSync.VideoFileName; } }
private void AddWareForm_Shown(object sender, EventArgs e) { Refresh(); var audioTrackNames = new List <string>(); var mkvAudioTrackNumbers = new Dictionary <int, int>(); int numberOfAudioTracks = 0; if (labelVideoFileName.Text.Length > 1 && File.Exists(labelVideoFileName.Text)) { if (labelVideoFileName.Text.EndsWith(".mkv", StringComparison.OrdinalIgnoreCase)) { // Choose for number of audio tracks in matroska files MatroskaFile matroska = null; try { matroska = new MatroskaFile(labelVideoFileName.Text); if (matroska.IsValid) { foreach (var track in matroska.GetTracks()) { if (track.IsAudio) { numberOfAudioTracks++; if (track.CodecId != null && track.Language != null) { audioTrackNames.Add("#" + track.TrackNumber + ": " + track.CodecId.Replace("\0", string.Empty) + " - " + track.Language.Replace("\0", string.Empty)); } else { audioTrackNames.Add("#" + track.TrackNumber); } mkvAudioTrackNumbers.Add(mkvAudioTrackNumbers.Count, track.TrackNumber); } } } } catch { } finally { if (matroska != null) { matroska.Dispose(); } } } else if (labelVideoFileName.Text.EndsWith(".mp4", StringComparison.OrdinalIgnoreCase) || labelVideoFileName.Text.EndsWith(".m4v", StringComparison.OrdinalIgnoreCase)) { // Choose for number of audio tracks in mp4 files try { var mp4 = new Logic.Mp4.MP4Parser(labelVideoFileName.Text); var tracks = mp4.GetAudioTracks(); int i = 0; foreach (var track in tracks) { i++; if (track.Name != null && track.Mdia != null && track.Mdia.Mdhd != null && track.Mdia.Mdhd.LanguageString != null) { audioTrackNames.Add(i + ": " + track.Name + " - " + track.Mdia.Mdhd.LanguageString); } else if (track.Name != null) { audioTrackNames.Add(i + ": " + track.Name); } else { audioTrackNames.Add(i.ToString(CultureInfo.InvariantCulture)); } } numberOfAudioTracks = tracks.Count; } catch { } } if (Configuration.Settings.General.UseFFmpegForWaveExtraction) { // don't know how to extract audio number x via FFmpeg... numberOfAudioTracks = 1; _audioTrackNumber = 0; } // Choose audio track if (numberOfAudioTracks > 1) { using (var form = new ChooseAudioTrack(audioTrackNames, _audioTrackNumber)) { if (form.ShowDialog(this) == DialogResult.OK) { _audioTrackNumber = form.SelectedTrack; } else { DialogResult = DialogResult.Cancel; return; } } } // check for delay in matroska files if (labelVideoFileName.Text.EndsWith(".mkv", StringComparison.OrdinalIgnoreCase)) { MatroskaFile matroska = null; try { matroska = new MatroskaFile(labelVideoFileName.Text); if (matroska.IsValid) { _delayInMilliseconds = (int)matroska.GetTrackStartTime(mkvAudioTrackNumbers[_audioTrackNumber]); } } catch { _delayInMilliseconds = 0; } finally { if (matroska != null) { matroska.Dispose(); } } } buttonRipWave_Click(null, null); } else if (_wavFileName != null) { FixWaveOnly(); } }