diff --git a/src/application/Console.java b/src/application/Console.java index c2e0d331..7b2fcca9 100644 --- a/src/application/Console.java +++ b/src/application/Console.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/application/Donate.java b/src/application/Donate.java new file mode 100644 index 00000000..639453ff --- /dev/null +++ b/src/application/Donate.java @@ -0,0 +1,213 @@ +/******************************************************************************************* +* Copyright (C) 2025 PACIFICO PAUL +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program 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. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License along +* with this program; if not, write to the Free Software Foundation, Inc., +* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +* +********************************************************************************************/ + +package application; + +import java.awt.Color; +import java.awt.Cursor; +import java.awt.Desktop; +import java.awt.Font; +import java.awt.MouseInfo; +import java.awt.Rectangle; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.awt.event.MouseMotionListener; +import java.awt.geom.Area; +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; + +import javax.swing.BorderFactory; +import javax.swing.ImageIcon; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.SwingConstants; +import javax.swing.border.MatteBorder; + +import com.formdev.flatlaf.extras.FlatSVGIcon; + +public class Donate { + + private static int MousePositionX; + private static int MousePositionY; + + public Donate() { + + JFrame frame = new JFrame(); + frame.getContentPane().setBackground(new Color(30,30,35)); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.setTitle("Thanks!"); + frame.setBackground(new Color(30,30,35)); + frame.setForeground(Color.WHITE); + frame.getContentPane().setLayout(null); + frame.setSize(280, 305); + frame.setResizable(false); + frame.setUndecorated(true); + frame.getRootPane().setBorder(BorderFactory.createMatteBorder(0, 1, 1, 1, new Color(100, 100, 100))); + Area shape1 = new Area(new AntiAliasedRoundRectangle(0, 0, frame.getWidth(), frame.getHeight(), 15, 15)); + Area shape2 = new Area(new Rectangle(0, frame.getHeight()-15, frame.getWidth(), 15)); + shape1.add(shape2); + frame.setShape(shape1); + frame.setAlwaysOnTop(true); + + frame.setIconImage(new ImageIcon(getClass().getClassLoader().getResource("contents/icon.png")).getImage()); + frame.setLocation(Shutter.frame.getX() + (Shutter.frame.getWidth() - frame.getWidth()) / 2, frame.getHeight() + (Shutter.frame.getHeight() / 2 - frame.getHeight())); + + JPanel topPanel = new JPanel(); + topPanel.setLayout(null); + topPanel.setBackground(new Color(30,30,35)); + topPanel.setBounds(0, 0, frame.getWidth(), 28); + + JLabel quit = new JLabel(new FlatSVGIcon("contents/quit.svg", 15, 15)); + quit.setHorizontalAlignment(SwingConstants.CENTER); + quit.setBounds(frame.getSize().width - 20, 4, 15, 15); + topPanel.add(quit); + + quit.addMouseListener(new MouseListener() { + + private boolean accept = false; + + @Override + public void mouseClicked(MouseEvent e) { + } + + @Override + public void mousePressed(MouseEvent e) { + + quit.setIcon(new FlatSVGIcon("contents/quit_pressed.svg", 15, 15)); + + accept = true; + } + + @Override + public void mouseReleased(MouseEvent e) { + + if (accept) + { + System.exit(0); + } + } + + @Override + public void mouseEntered(MouseEvent e) { + quit.setIcon(new FlatSVGIcon("contents/quit_hover.svg", 15, 15)); + } + + @Override + public void mouseExited(MouseEvent e) { + quit.setIcon(new FlatSVGIcon("contents/quit.svg", 15, 15)); + accept = false; + } + + }); + + JLabel title = new JLabel(frame.getTitle()); + title.setHorizontalAlignment(JLabel.CENTER); + title.setBounds(0, 1, frame.getWidth(), 24); + title.setFont(new Font(Shutter.freeSansFont, Font.PLAIN, 17)); + topPanel.add(title); + + JLabel topImage = new JLabel(); + topImage.setBackground(new Color(35,35,40)); + topImage.setOpaque(true); + topImage.setBorder(new MatteBorder(1, 0, 1, 0, new Color(65, 65, 65))); + topImage.setBounds(0, 0, topPanel.getWidth(), 24); + topPanel.add(topImage); + + topImage.addMouseListener(new MouseListener() { + + @Override + public void mouseClicked(MouseEvent down) { + } + + @Override + public void mousePressed(MouseEvent down) { + MousePositionX = down.getPoint().x; + MousePositionY = down.getPoint().y; + } + + @Override + public void mouseReleased(MouseEvent e) { + } + + @Override + public void mouseEntered(MouseEvent e) { + } + + @Override + public void mouseExited(MouseEvent e) { + } + + }); + + topImage.addMouseMotionListener(new MouseMotionListener(){ + + @Override + public void mouseDragged(MouseEvent e) { + frame.setLocation(MouseInfo.getPointerInfo().getLocation().x - MousePositionX, MouseInfo.getPointerInfo().getLocation().y - MousePositionY); + } + + @Override + public void mouseMoved(MouseEvent e) { + } + + }); + + frame.getContentPane().add(topPanel); + + JLabel qrcode = new JLabel(); + qrcode.setIcon(new ImageIcon(getClass().getClassLoader().getResource("contents/qrcode.png"))); + qrcode.setHorizontalAlignment(SwingConstants.CENTER); + qrcode.setBounds((frame.getWidth() - 250) / 2, topPanel.getHeight() + 10, 250, 250); + frame.getContentPane().add(qrcode); + + qrcode.addMouseListener(new MouseListener() { + + @Override + public void mouseClicked(MouseEvent arg0) { + try { + Desktop.getDesktop().browse(new URI("https://donate.stripe.com/28o29m0QwfRZ4U0cMM")); + } catch (IOException | URISyntaxException e) {} + } + + @Override + public void mouseEntered(MouseEvent arg0) { + frame.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + } + + @Override + public void mouseExited(MouseEvent arg0) { + frame.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + } + + + @Override + public void mousePressed(MouseEvent arg0) { + } + + @Override + public void mouseReleased(MouseEvent arg0) { + } + + }); + + frame.setVisible(true); + } +} diff --git a/src/application/Ftp.java b/src/application/Ftp.java index f0f6437a..76d55395 100644 --- a/src/application/Ftp.java +++ b/src/application/Ftp.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/application/Functions.java b/src/application/Functions.java index 1fb477a4..d893bde5 100644 --- a/src/application/Functions.java +++ b/src/application/Functions.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/application/GOP.java b/src/application/GOP.java index ec91989e..c079ef54 100644 --- a/src/application/GOP.java +++ b/src/application/GOP.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/application/HashGenerator.java b/src/application/HashGenerator.java index b6286bd8..cb7878b5 100644 --- a/src/application/HashGenerator.java +++ b/src/application/HashGenerator.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -594,6 +594,8 @@ private void digestFile(File file, MessageDigest digest) throws IOException { if (Shutter.cancelled) break; } + + dis.close(); } diff --git a/src/application/Informations.java b/src/application/Informations.java index 5770909c..b64a7260 100644 --- a/src/application/Informations.java +++ b/src/application/Informations.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/application/RecordInputDevice.java b/src/application/RecordInputDevice.java index 4d459d13..d3e6c268 100644 --- a/src/application/RecordInputDevice.java +++ b/src/application/RecordInputDevice.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/application/ReducedWindow.java b/src/application/ReducedWindow.java index 097b34de..60b46b38 100644 --- a/src/application/ReducedWindow.java +++ b/src/application/ReducedWindow.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/application/Renamer.java b/src/application/Renamer.java index 91377d75..0013ba7e 100644 --- a/src/application/Renamer.java +++ b/src/application/Renamer.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/application/RenderQueue.java b/src/application/RenderQueue.java index 24475361..00fb35a3 100644 --- a/src/application/RenderQueue.java +++ b/src/application/RenderQueue.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/application/SceneDetection.java b/src/application/SceneDetection.java index 2fc3b482..0942ef66 100644 --- a/src/application/SceneDetection.java +++ b/src/application/SceneDetection.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/application/Settings.java b/src/application/Settings.java index ada1353f..25c819ec 100644 --- a/src/application/Settings.java +++ b/src/application/Settings.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/application/Shutter.java b/src/application/Shutter.java index 253c6b1f..af651b0b 100644 --- a/src/application/Shutter.java +++ b/src/application/Shutter.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -625,7 +625,7 @@ public class Shutter { public static JTextField TC2; public static JTextField TC3; public static JTextField TC4; - public static JTextField text; + public static JTextField overlayText; public static long textTime = System.currentTimeMillis(); public static Thread changeText; public static JCheckBox caseShowTimecode; @@ -792,14 +792,14 @@ else if (System.getProperty("os.name").contains("Linux")) if (new File("Functions").exists() == false) documents.mkdirs(); } - + new Shutter(); ImageIO.setUseCache(false); //IMPORTANT use RAM instead of HDD cache } public Shutter() { - + Desktop desktop = Desktop.getDesktop(); if( desktop.isSupported( Desktop.Action.APP_ABOUT ) ) { desktop.setAboutHandler( e -> { @@ -1116,6 +1116,7 @@ else if (Shutter.comboFonctions.getSelectedItem().toString().equals(Shutter.lang } } }); + Splash.increment(); frame.addMouseListener(new MouseListener() { @@ -1463,7 +1464,7 @@ else if (grpSetAudio.isVisible()) Splash.increment(); YOUTUBEDL.update(); - EXIFTOOL.run(""); //Preload the binary + EXIFTOOL.run('"' + "" + '"'); //Preload the binary Splash.increment(); //Right_to_left @@ -1632,8 +1633,8 @@ public void mouseReleased(MouseEvent e) { { VideoPlayer.waveform = null; } - - System.exit(0); + + new Donate(); } } @@ -3382,15 +3383,21 @@ public void actionPerformed(ActionEvent e) { if (comboFonctions.getEditor().getItem().toString().contains("ffmpeg")) { if (comboFilter.getEditor().getItem().toString().equals(language.getProperty("aucun")) - || comboFilter.getEditor().getItem().toString().equals("") - || comboFilter.getEditor().getItem().toString().equals(" ") - || comboFilter.getEditor().getItem().toString().contains(".") == false) + || comboFilter.getEditor().getItem().toString().equals("") + || comboFilter.getEditor().getItem().toString().equals(" ") + || comboFilter.getEditor().getItem().toString().contains(".") == false) + { JOptionPane.showMessageDialog(frame, language.getProperty("chooseExtension"), language.getProperty("extensionError"), JOptionPane.INFORMATION_MESSAGE); + } else Command.main(); } + else if (comboFonctions.getEditor().getItem().toString().contains("exiftool")) + { + Command.main(); + } else { //Scan Folder @@ -3919,7 +3926,7 @@ else if (comboFonctions.getSelectedItem().equals(language.getProperty("itemDownl @Override public void keyReleased(KeyEvent e) { - if (comboFonctions.getEditor().getItem().toString().contains("ffmpeg")) + if (comboFonctions.getEditor().getItem().toString().contains("ffmpeg") || comboFonctions.getEditor().getItem().toString().contains("exiftool")) { changeFilters(); changeWidth(false); @@ -6626,84 +6633,87 @@ else if (comboAudioCodec.getSelectedItem().toString().equals(language.getPropert lblAudioMapping.setLocation(comboAudioCodec.getLocation().x + comboAudioCodec.getWidth() + 7, comboAudioCodec.getLocation().y); lblAudioMapping.setSize(lblKbs.getLocation().x + lblKbs.getSize().width - 5 - 7 - (comboAudioCodec.getLocation().x + comboAudioCodec.getWidth() + 7) , 16); grpSetAudio.add(lblAudioMapping); - + lblAudioMapping.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent arg0) { - if (lblAudioMapping.getSelectedItem().toString().equals("Multi")) - { - grpSetAudio.add(lblAudio1); - grpSetAudio.add(comboAudio1); - grpSetAudio.add(lblAudio2); - grpSetAudio.add(comboAudio2); - grpSetAudio.add(lblAudio3); - grpSetAudio.add(comboAudio3); - grpSetAudio.add(lblAudio4); - grpSetAudio.add(comboAudio4); - grpSetAudio.add(lblAudio5); - grpSetAudio.add(comboAudio5); - grpSetAudio.add(lblAudio6); - grpSetAudio.add(comboAudio6); - grpSetAudio.add(lblAudio7); - grpSetAudio.add(comboAudio7); - grpSetAudio.add(lblAudio8); - grpSetAudio.add(comboAudio8); - - if (grpSetAudio.getHeight() != 146) - extendSections(grpSetAudio, 146); - } - else if (lblAudioMapping.getSelectedItem().toString().equals("Mix")) - { - if (grpSetAudio.getHeight() != 68) - extendSections(grpSetAudio, 68); - - grpSetAudio.remove(lblAudio1); - grpSetAudio.remove(comboAudio1); - grpSetAudio.remove(lblAudio2); - grpSetAudio.remove(comboAudio2); - grpSetAudio.remove(lblAudio3); - grpSetAudio.remove(comboAudio3); - grpSetAudio.remove(lblAudio4); - grpSetAudio.remove(comboAudio4); - grpSetAudio.remove(lblAudio5); - grpSetAudio.remove(comboAudio5); - grpSetAudio.remove(lblAudio6); - grpSetAudio.remove(comboAudio6); - grpSetAudio.remove(lblAudio7); - grpSetAudio.remove(comboAudio7); - grpSetAudio.remove(lblAudio8); - grpSetAudio.remove(comboAudio8); + if (lblAudioMapping.isFocusOwner()) + { + if (lblAudioMapping.getSelectedItem().toString().equals("Multi")) + { + grpSetAudio.add(lblAudio1); + grpSetAudio.add(comboAudio1); + grpSetAudio.add(lblAudio2); + grpSetAudio.add(comboAudio2); + grpSetAudio.add(lblAudio3); + grpSetAudio.add(comboAudio3); + grpSetAudio.add(lblAudio4); + grpSetAudio.add(comboAudio4); + grpSetAudio.add(lblAudio5); + grpSetAudio.add(comboAudio5); + grpSetAudio.add(lblAudio6); + grpSetAudio.add(comboAudio6); + grpSetAudio.add(lblAudio7); + grpSetAudio.add(comboAudio7); + grpSetAudio.add(lblAudio8); + grpSetAudio.add(comboAudio8); + + if (grpSetAudio.getHeight() != 146) + extendSections(grpSetAudio, 146); + } + else if (lblAudioMapping.getSelectedItem().toString().equals("Mix")) + { + if (grpSetAudio.getHeight() != 68) + extendSections(grpSetAudio, 68); + + grpSetAudio.remove(lblAudio1); + grpSetAudio.remove(comboAudio1); + grpSetAudio.remove(lblAudio2); + grpSetAudio.remove(comboAudio2); + grpSetAudio.remove(lblAudio3); + grpSetAudio.remove(comboAudio3); + grpSetAudio.remove(lblAudio4); + grpSetAudio.remove(comboAudio4); + grpSetAudio.remove(lblAudio5); + grpSetAudio.remove(comboAudio5); + grpSetAudio.remove(lblAudio6); + grpSetAudio.remove(comboAudio6); + grpSetAudio.remove(lblAudio7); + grpSetAudio.remove(comboAudio7); + grpSetAudio.remove(lblAudio8); + grpSetAudio.remove(comboAudio8); + } + else + { + if (grpSetAudio.getHeight() != 92) + extendSections(grpSetAudio, 92); + + grpSetAudio.add(lblAudio1); + grpSetAudio.add(comboAudio1); + grpSetAudio.add(lblAudio2); + grpSetAudio.add(comboAudio2); + grpSetAudio.remove(lblAudio3); + grpSetAudio.remove(comboAudio3); + grpSetAudio.remove(lblAudio4); + grpSetAudio.remove(comboAudio4); + grpSetAudio.remove(lblAudio5); + grpSetAudio.remove(comboAudio5); + grpSetAudio.remove(lblAudio6); + grpSetAudio.remove(comboAudio6); + grpSetAudio.remove(lblAudio7); + grpSetAudio.remove(comboAudio7); + grpSetAudio.remove(lblAudio8); + grpSetAudio.remove(comboAudio8); + } + + grpSetAudio.repaint(); + + try { + FFPROBE.setFilesize(); + } catch (Exception e1) {} } - else - { - if (grpSetAudio.getHeight() != 92) - extendSections(grpSetAudio, 92); - - grpSetAudio.add(lblAudio1); - grpSetAudio.add(comboAudio1); - grpSetAudio.add(lblAudio2); - grpSetAudio.add(comboAudio2); - grpSetAudio.remove(lblAudio3); - grpSetAudio.remove(comboAudio3); - grpSetAudio.remove(lblAudio4); - grpSetAudio.remove(comboAudio4); - grpSetAudio.remove(lblAudio5); - grpSetAudio.remove(comboAudio5); - grpSetAudio.remove(lblAudio6); - grpSetAudio.remove(comboAudio6); - grpSetAudio.remove(lblAudio7); - grpSetAudio.remove(comboAudio7); - grpSetAudio.remove(lblAudio8); - grpSetAudio.remove(comboAudio8); - } - - grpSetAudio.repaint(); - - try { - FFPROBE.setFilesize(); - } catch (Exception e1) {} } }); @@ -7737,7 +7747,7 @@ else if (outputRatio == 2.33f) height = VideoPlayer.player.getHeight(); selection.setBounds(x, y, width, height); - + } catch (Exception er) {} } } @@ -8079,7 +8089,7 @@ else if (selection.getLocation().x <= 0) else if (selection.getLocation().y <= 0) { selection.setLocation(selection.getLocation().x, 0); - } + } } }); @@ -8946,7 +8956,7 @@ else if (System.getProperty("os.name").contains("Windows")) if (lblTcBackground.getText().equals(language.getProperty("aucun"))) { - g2.setColor(new Color(foregroundColor.getRed(),foregroundColor.getGreen(),foregroundColor.getBlue(), (int) ( (float) (Integer.parseInt(textNameOpacity.getText()) * 255) / 100))); + g2.setColor(new Color(foregroundColor.getRed(),foregroundColor.getGreen(),foregroundColor.getBlue(), (int) ( (float) (Integer.parseInt(textTcOpacity.getText()) * 255) / 100))); } else g2.setColor(foregroundColor); @@ -9659,17 +9669,17 @@ public void mouseMoved(MouseEvent e) { caseAddText.setLocation(caseAddTimecode.getX(), lblSizeTC.getY() + lblSizeTC.getHeight() + 8); grpOverlay.add(caseAddText); - text = new JTextField(""); - text.setName("text"); - text.setEnabled(false); - text.setLocation(caseAddText.getLocation().x + caseAddText.getWidth() + 7, caseAddText.getLocation().y + 1); - text.setSize(grpOverlay.getWidth() - text.getX() - 10, 21); - text.setHorizontalAlignment(SwingConstants.LEFT); - text.setFont(new Font("SansSerif", Font.PLAIN, 12)); - text.setToolTipText("{codec/function}
{preset}
{resolution/scale}
{width}
{height}
{ratio/aspect}
{framerate/fps}
{bitrate}
{timecode}
{duration/time}
{date}"); - grpOverlay.add(text); + overlayText = new JTextField(""); + overlayText.setName("overlayText"); + overlayText.setEnabled(false); + overlayText.setLocation(caseAddText.getLocation().x + caseAddText.getWidth() + 7, caseAddText.getLocation().y + 1); + overlayText.setSize(grpOverlay.getWidth() - overlayText.getX() - 10, 21); + overlayText.setHorizontalAlignment(SwingConstants.LEFT); + overlayText.setFont(new Font("SansSerif", Font.PLAIN, 12)); + overlayText.setToolTipText("{codec/function}
{preset}
{resolution/scale}
{width}
{height}
{ratio/aspect}
{framerate/fps}
{bitrate}
{timecode}
{duration/time}
{date}"); + grpOverlay.add(overlayText); - text.addKeyListener(new KeyListener(){ + overlayText.addKeyListener(new KeyListener(){ @Override public void keyPressed(KeyEvent e) { @@ -9737,7 +9747,7 @@ public void run() { @Override protected void paintComponent(Graphics g) { - if ((caseShowFileName.isSelected() || caseAddText.isSelected() && text.getText().length() > 0) && liste.getSize() > 0 && VideoPlayer.videoPath != null) + if ((caseShowFileName.isSelected() || caseAddText.isSelected() && overlayText.getText().length() > 0) && liste.getSize() > 0 && VideoPlayer.videoPath != null) { super.paintComponent(g); @@ -9779,7 +9789,7 @@ protected void paintComponent(Graphics g) if (caseAddText.isSelected()) { - str = FunctionUtils.setSuffix(text.getText(), true); + str = FunctionUtils.setSuffix(overlayText.getText(), true); } Rectangle bounds = getStringBounds(g2, str, 0 ,0); @@ -10542,9 +10552,9 @@ public void actionPerformed(ActionEvent arg0) { percent4.setEnabled(true); caseShowFileName.setSelected(false); - text.setEnabled(true); + overlayText.setEnabled(true); - if (text.getText().length() > 0) + if (overlayText.getText().length() > 0) { VideoPlayer.player.add(fileName); @@ -10573,7 +10583,7 @@ public void actionPerformed(ActionEvent arg0) { textNameOpacity.setEnabled(false); percent4.setEnabled(false); - text.setEnabled(false); + overlayText.setEnabled(false); VideoPlayer.player.remove(fileName); } @@ -10605,7 +10615,7 @@ public void actionPerformed(ActionEvent arg0) { percent4.setEnabled(true); caseAddText.setSelected(false); - text.setEnabled(false); + overlayText.setEnabled(false); VideoPlayer.player.add(fileName); //Overimage need to be the last component added @@ -15700,7 +15710,7 @@ else if (lblTFF.getText().equals("BFF")) @Override public void actionPerformed(ActionEvent arg0) { - if (comboForcerDesentrelacement.getSelectedItem().toString().equals("detelecine") && lblTFF.getText().equals("x2")) + if (comboForcerDesentrelacement.getSelectedItem().toString().equals("detelecine") && lblTFF.getText().contains("x2")) { lblTFF.setText("TFF"); if (caseForcerDesentrelacement.isSelected()) @@ -15726,12 +15736,21 @@ public void actionPerformed(ActionEvent arg0) { @Override public void mouseClicked(MouseEvent e) { - if (lblTFF.getText().equals("TFF")) { + if (lblTFF.getText().equals("TFF")) + { lblTFF.setText("BFF"); if (caseForcerDesentrelacement.isSelected()) FFPROBE.fieldOrder = "1"; - } else if (lblTFF.getText().equals("BFF") && comboForcerDesentrelacement.getSelectedItem().toString().equals("detelecine") == false) { - lblTFF.setText("x2"); + } + else if (lblTFF.getText().equals("BFF") && comboForcerDesentrelacement.getSelectedItem().toString().equals("detelecine") == false) + { + lblTFF.setText("x2 T"); + if (caseForcerDesentrelacement.isSelected()) + FFPROBE.fieldOrder = "0"; + } + else if (lblTFF.getText().equals("x2 T") && comboForcerDesentrelacement.getSelectedItem().toString().equals("detelecine") == false) + { + lblTFF.setText("x2 B"); if (caseForcerDesentrelacement.isSelected()) FFPROBE.fieldOrder = "0"; } @@ -17017,10 +17036,10 @@ public void actionPerformed(ActionEvent ac) { @Override public void keyTyped(KeyEvent e) { char caracter = e.getKeyChar(); - if (String.valueOf(caracter).matches("[0-9]+") == false && caracter != '￿' - || bitrateSize.getText().length() >= 5 - || String.valueOf(caracter).matches("[éèçàù]") - || lblVBR.getText().equals("CQ") && lblVBR.isVisible()) + if (String.valueOf(caracter).matches("[0-9]+") == false && caracter != '.' && caracter != ',' && caracter != '￿' + || bitrateSize.getText().length() >= 5 + || String.valueOf(caracter).matches("[éèçàù]") + || lblVBR.getText().equals("CQ") && lblVBR.isVisible()) e.consume(); } @@ -17046,7 +17065,7 @@ public void keyReleased(KeyEvent e) { int sec = Integer.parseInt(textS.getText()); int frames = Integer.parseInt(textF.getText()); int audio = Integer.parseInt(debitAudio.getSelectedItem().toString()); - int tailleFinale = Integer.parseInt(bitrateSize.getText()); + float tailleFinale = Float.parseFloat(bitrateSize.getText().replace(",", ".")); float result = (float) tailleFinale / ((h * 3600) + (min * 60) + sec + (frames * ((float) 1 / FFPROBE.currentFPS))); float resultAudio = (float) audio / 8 / 1024; float resultatdebit = (result - resultAudio) * 8 * 1024; @@ -17461,31 +17480,30 @@ public void mouseReleased(MouseEvent arg0) { caseNormalizeAudio.doClick(); comboNormalizeAudio.setSelectedIndex(23); } + if (comboFonctions.getSelectedItem().toString().equals("DNxHD") || comboFonctions.getSelectedItem().toString().equals("DNxHR") || comboFonctions.getSelectedItem().toString().equals("Apple ProRes") || comboFonctions.getSelectedItem().toString().equals("QT Animation") || comboFonctions.getSelectedItem().toString().equals("GoPro CineForm") - || comboFonctions.getSelectedItem().toString().equals("Uncompressed") - || comboFonctions.getSelectedItem().toString().contains("XDCAM") - || comboFonctions.getSelectedItem().toString().equals("AVC-Intra 100") - || comboFonctions.getSelectedItem().toString().equals("XAVC") - || comboFonctions.getSelectedItem().toString().equals("HAP") - || comboFonctions.getSelectedItem().toString().equals("FFV1")) + || comboFonctions.getSelectedItem().toString().equals("Uncompressed") ) { - if (lblAudioMapping.getItemCount() > 1) - { - lblAudioMapping.setModel(new DefaultComboBoxModel(new String[] {"Multi"})); - lblAudioMapping.setSelectedItem("Multi"); - } + lblAudioMapping.setModel(new DefaultComboBoxModel(new String[] { language.getProperty("stereo"), "Multi", language.getProperty("mono"), "Mix" })); + lblAudioMapping.setSelectedItem("Multi"); + } + else if (comboFonctions.getSelectedItem().toString().contains("XDCAM") + || comboFonctions.getSelectedItem().toString().equals("AVC-Intra 100") + || comboFonctions.getSelectedItem().toString().equals("XAVC") + || comboFonctions.getSelectedItem().toString().equals("HAP") + || comboFonctions.getSelectedItem().toString().equals("FFV1")) + { + lblAudioMapping.setModel(new DefaultComboBoxModel(new String[] { "Multi" })); + lblAudioMapping.setSelectedItem("Multi"); } else { - if (lblAudioMapping.getItemCount() != 4) - { - lblAudioMapping.setModel(new DefaultComboBoxModel(new String[] { language.getProperty("stereo"), "Multi", language.getProperty("mono"), "Mix" })); - lblAudioMapping.setSelectedItem(language.getProperty("stereo")); - } + lblAudioMapping.setModel(new DefaultComboBoxModel(new String[] { language.getProperty("stereo"), "Multi", language.getProperty("mono"), "Mix" })); + lblAudioMapping.setSelectedItem(language.getProperty("stereo")); } lbl48k.setSelectedIndex(2); @@ -17495,9 +17513,14 @@ public void mouseReleased(MouseEvent arg0) { comboAudio1.setSelectedIndex(0); comboAudio2.setSelectedIndex(1); - comboAudio3.setSelectedIndex(2); - comboAudio4.setSelectedIndex(3); - if (comboFonctions.getSelectedItem().toString().contains("XDCAM") || comboFonctions.getSelectedItem().toString().equals("AVC-Intra 100") || comboFonctions.getSelectedItem().toString().equals("XAVC")) + comboAudio3.setSelectedIndex(2); + comboAudio4.setSelectedIndex(3); + + if (comboFonctions.getSelectedItem().toString().contains("XDCAM") + || comboFonctions.getSelectedItem().toString().equals("AVC-Intra 100") + || comboFonctions.getSelectedItem().toString().equals("XAVC") + || comboFonctions.getSelectedItem().toString().equals("HAP") + || comboFonctions.getSelectedItem().toString().equals("FFV1")) { comboAudio5.setSelectedIndex(16); comboAudio6.setSelectedIndex(16); @@ -17589,7 +17612,7 @@ else if ("MJPEG".equals(comboFonctions.getSelectedItem().toString())) lbl48k.setLocation(lblKbs.getLocation().x + lblKbs.getSize().width - 5, lblKbs.getLocation().y); grpSetAudio.add(lblAudioMapping); - if (grpSetAudio.getHeight() > 92) + if (grpSetAudio.getHeight() > 92 || grpSetAudio.getHeight() == 68) extendSections(grpSetAudio, 92); } else if (comboFonctions.getSelectedItem().toString().contains("H.26")) @@ -17608,7 +17631,7 @@ else if (comboFonctions.getSelectedItem().toString().contains("H.26")) lbl48k.setLocation(lblKbs.getLocation().x + lblKbs.getSize().width - 5, lblKbs.getLocation().y); grpSetAudio.add(lblAudioMapping); - if (grpSetAudio.getHeight() > 92) + if (grpSetAudio.getHeight() > 92 || grpSetAudio.getHeight() == 68) extendSections(grpSetAudio, 92); } else if ("WMV".equals(comboFonctions.getSelectedItem().toString())) @@ -17626,7 +17649,7 @@ else if ("WMV".equals(comboFonctions.getSelectedItem().toString())) lbl48k.setLocation(lblKbs.getLocation().x + lblKbs.getSize().width - 5, lblKbs.getLocation().y); grpSetAudio.add(lblAudioMapping); - if (grpSetAudio.getHeight() > 92) + if (grpSetAudio.getHeight() > 92 || grpSetAudio.getHeight() == 68) extendSections(grpSetAudio, 92); } else if ("MPEG-1".equals(comboFonctions.getSelectedItem().toString()) || "MPEG-2".equals(comboFonctions.getSelectedItem().toString())) @@ -17645,7 +17668,7 @@ else if ("MPEG-1".equals(comboFonctions.getSelectedItem().toString()) || "MPEG-2 lbl48k.setLocation(lblKbs.getLocation().x + lblKbs.getSize().width - 5, lblKbs.getLocation().y); grpSetAudio.add(lblAudioMapping); - if (grpSetAudio.getHeight() > 92) + if (grpSetAudio.getHeight() > 92 || grpSetAudio.getHeight() == 68) extendSections(grpSetAudio, 92); } else if ("VP8".equals(comboFonctions.getSelectedItem().toString()) || "VP9".equals(comboFonctions.getSelectedItem().toString())) @@ -17664,7 +17687,7 @@ else if ("VP8".equals(comboFonctions.getSelectedItem().toString()) || "VP9".equa lbl48k.setLocation(lblKbs.getLocation().x + lblKbs.getSize().width - 5, lblKbs.getLocation().y); grpSetAudio.add(lblAudioMapping); - if (grpSetAudio.getHeight() > 92) + if (grpSetAudio.getHeight() > 92 || grpSetAudio.getHeight() == 68) extendSections(grpSetAudio, 92); } else if ("AV1".equals(comboFonctions.getSelectedItem().toString())) @@ -17683,7 +17706,7 @@ else if ("AV1".equals(comboFonctions.getSelectedItem().toString())) lbl48k.setLocation(lblKbs.getLocation().x + lblKbs.getSize().width - 5, lblKbs.getLocation().y); grpSetAudio.add(lblAudioMapping); - if (grpSetAudio.getHeight() > 92) + if (grpSetAudio.getHeight() > 92 || grpSetAudio.getHeight() == 68) extendSections(grpSetAudio, 92); } else if ("Theora".equals(comboFonctions.getSelectedItem().toString())) @@ -17702,7 +17725,7 @@ else if ("Theora".equals(comboFonctions.getSelectedItem().toString())) lbl48k.setLocation(lblKbs.getLocation().x + lblKbs.getSize().width - 5, lblKbs.getLocation().y); grpSetAudio.add(lblAudioMapping); - if (grpSetAudio.getHeight() > 92) + if (grpSetAudio.getHeight() > 92 || grpSetAudio.getHeight() == 68) extendSections(grpSetAudio, 92); } else if ("Xvid".equals(comboFonctions.getSelectedItem().toString())) @@ -17721,7 +17744,7 @@ else if ("Xvid".equals(comboFonctions.getSelectedItem().toString())) lbl48k.setLocation(lblKbs.getLocation().x + lblKbs.getSize().width - 5, lblKbs.getLocation().y); grpSetAudio.add(lblAudioMapping); - if (grpSetAudio.getHeight() > 92) + if (grpSetAudio.getHeight() > 92 || grpSetAudio.getHeight() == 68) extendSections(grpSetAudio, 92); } else if (comboFonctions.getSelectedItem().toString().equals("DVD") || comboFonctions.getSelectedItem().toString().equals("Blu-ray")) @@ -17746,7 +17769,7 @@ else if (comboFonctions.getSelectedItem().toString().equals("DVD") || comboFonct lbl48k.setLocation(lblKbs.getLocation().x + lblKbs.getSize().width - 5, lblKbs.getLocation().y); grpSetAudio.add(lblAudioMapping); - if (grpSetAudio.getHeight() > 92) + if (grpSetAudio.getHeight() > 92 || grpSetAudio.getHeight() == 68) extendSections(grpSetAudio, 92); } else if (comboFonctions.getSelectedItem().toString().equals("WAV") @@ -17820,8 +17843,7 @@ else if (comboFonctions.getSelectedItem().toString().equals("WAV") || comboFonctions.getSelectedItem().toString().equals("FFV1")) { lblPad.setVisible(true); - } - + } // grpAudio caseSampleRate.setSelected(false); @@ -18574,7 +18596,7 @@ public void mouseReleased(MouseEvent arg0) { }); - lblYears = new JLabel("2013-2024"); + lblYears = new JLabel("2013-2025"); lblYears.setHorizontalAlignment(SwingConstants.RIGHT); lblYears.setForeground(Color.WHITE); lblYears.setFont(new Font(freeSansFont, Font.PLAIN, 12)); @@ -19826,8 +19848,9 @@ else if (language.getProperty("functionMerge").equals(function)) if (lblAudioMapping.getItemCount() != 4) { lblAudioMapping.setModel(new DefaultComboBoxModel(new String[] { language.getProperty("stereo"), "Multi", language.getProperty("mono"), "Mix" })); - lblAudioMapping.setSelectedItem(language.getProperty("stereo")); - } + } + lblAudioMapping.setSelectedItem(language.getProperty("stereo")); + comboAudioCodec.setModel(new DefaultComboBoxModel(new String[] { "PCM 32Float", "PCM 32Bits", "PCM 24Bits", "PCM 16Bits", "AAC", "MP3", "AC3", "Opus", "Vorbis", "Dolby Digital Plus", language.getProperty("noAudio") })); comboAudioCodec.setSelectedIndex(3); caseNormalizeAudio.setEnabled(false); @@ -19932,8 +19955,9 @@ else if (language.getProperty("functionMerge").equals(function)) if (lblAudioMapping.getItemCount() != 4) { lblAudioMapping.setModel(new DefaultComboBoxModel(new String[] { language.getProperty("stereo"), "Multi", language.getProperty("mono"), "Mix" })); - lblAudioMapping.setSelectedItem(language.getProperty("stereo")); - } + } + lblAudioMapping.setSelectedItem(language.getProperty("stereo")); + comboAudioCodec.setModel(new DefaultComboBoxModel(new String[] { "PCM 32Float", "PCM 32Bits", "PCM 24Bits", "PCM 16Bits", "AAC", "MP3", "AC3", "Opus", "Vorbis", "Dolby Digital Plus", language.getProperty("noAudio") })); comboAudioCodec.setSelectedIndex(3); caseNormalizeAudio.setEnabled(false); @@ -20188,9 +20212,10 @@ public void run() { { if (lblAudioMapping.getItemCount() > 1) { - lblAudioMapping.setModel(new DefaultComboBoxModel(new String[] {"Multi"})); - lblAudioMapping.setSelectedItem("Multi"); - } + lblAudioMapping.setModel(new DefaultComboBoxModel(new String[] {"Multi"})); + } + lblAudioMapping.setSelectedItem("Multi"); + comboAudioCodec.setModel(new DefaultComboBoxModel(new String[] { "PCM 16Bits", "PCM 24Bits", "PCM 32Bits", language.getProperty("codecCopy"), language.getProperty("noAudio") })); caseChangeAudioCodec.setSelected(true); comboAudioCodec.setEnabled(true); @@ -20287,7 +20312,8 @@ else if (comboAudio1.getSelectedIndex() == 0 // Ajout partie résolution grpResolution.removeAll(); - grpResolution.setVisible(true); + grpResolution.setVisible(true); + grpResolution.setLocation(grpResolution.getX(), 30); grpResolution.add(lblImageSize); grpResolution.add(comboResolution); grpResolution.add(lblPad); @@ -20354,8 +20380,9 @@ else if (comboAudio1.getSelectedIndex() == 0 if (lblAudioMapping.getItemCount() > 1) { lblAudioMapping.setModel(new DefaultComboBoxModel(new String[] {"Multi"})); - lblAudioMapping.setSelectedItem("Multi"); } + lblAudioMapping.setSelectedItem("Multi"); + grpSetAudio.setSize(312, 146); } else if (action) @@ -20562,6 +20589,7 @@ public void run() { grpResolution.removeAll(); grpResolution.setVisible(true); + grpResolution.setLocation(grpResolution.getX(), 30); grpResolution.add(lblImageSize); grpResolution.add(comboResolution); grpResolution.add(lblPad); @@ -20672,11 +20700,12 @@ public void run() { grpSetAudio.add(caseChangeAudioCodec); if (comboAudioCodec.getItemCount() != 5 || comboAudioCodec.getModel().getElementAt(0).equals("PCM 16Bits") == false) { - if (lblAudioMapping.getItemCount() > 1) + if (lblAudioMapping.getItemCount() != 4) { - lblAudioMapping.setModel(new DefaultComboBoxModel(new String[] {"Multi"})); - lblAudioMapping.setSelectedItem("Multi"); - } + lblAudioMapping.setModel(new DefaultComboBoxModel(new String[] { language.getProperty("stereo"), "Multi", language.getProperty("mono"), "Mix" })); + } + lblAudioMapping.setSelectedItem("Multi"); + comboAudioCodec.setModel(new DefaultComboBoxModel(new String[] { "PCM 16Bits", "PCM 24Bits", "PCM 32Bits", language.getProperty("codecCopy"), language.getProperty("noAudio") })); caseChangeAudioCodec.setSelected(true); comboAudioCodec.setEnabled(true); @@ -20693,12 +20722,18 @@ public void run() { lblAudio1.setLocation(12, caseNormalizeAudio.getY() + caseNormalizeAudio.getHeight() + 2); comboAudio1.setLocation(lblAudio1.getX() + lblAudio1.getWidth() + 7, lblAudio1.getLocation().y + 1); - grpSetAudio.add(lblAudio1); - grpSetAudio.add(comboAudio1); + if (lblAudioMapping.getSelectedItem().toString().equals("Mix") == false) + { + grpSetAudio.add(lblAudio1); + grpSetAudio.add(comboAudio1); + } lblAudio2.setLocation(comboAudio1.getX() + comboAudio1.getWidth() + 12, lblAudio1.getLocation().y); comboAudio2.setLocation(lblAudio2.getX() + lblAudio2.getWidth() + 7, lblAudio2.getLocation().y + 1); - grpSetAudio.add(lblAudio2); - grpSetAudio.add(comboAudio2); + if (lblAudioMapping.getSelectedItem().toString().equals("Mix") == false) + { + grpSetAudio.add(lblAudio2); + grpSetAudio.add(comboAudio2); + } lblAudio3.setLocation(lblAudio1.getX(), lblAudio1.getLocation().y + lblAudio1.getHeight() + 2); comboAudio3.setLocation(lblAudio3.getX() + lblAudio3.getWidth() + 7, lblAudio3.getLocation().y + 1); @@ -21044,8 +21079,8 @@ else if ("H.266".equals(function) && comboForcePreset.getModel().getSize() != 5) // Ajout partie résolution grpResolution.removeAll(); - grpResolution.setVisible(true); + grpResolution.setLocation(grpResolution.getX(), 30); grpResolution.add(lblImageSize); grpResolution.add(comboResolution); grpResolution.add(lblPad); @@ -21112,9 +21147,10 @@ else if ("H.266".equals(function) && comboForcePreset.getModel().getSize() != 5) { if (lblAudioMapping.getItemCount() != 4) { - lblAudioMapping.setModel(new DefaultComboBoxModel(new String[] { language.getProperty("stereo"), "Multi", language.getProperty("mono"), "Mix" })); - lblAudioMapping.setSelectedItem(language.getProperty("stereo")); - } + lblAudioMapping.setModel(new DefaultComboBoxModel(new String[] { language.getProperty("stereo"), "Multi", language.getProperty("mono"), "Mix" })); + } + lblAudioMapping.setSelectedItem(language.getProperty("stereo")); + comboAudioCodec.setModel(new DefaultComboBoxModel(new String[] {"AAC", "MP3", "AC3", "Opus", "FLAC", "PCM 16Bits", "PCM 24Bits", "PCM 32Bits", "ALAC 16Bits", "ALAC 24Bits", "Dolby Digital Plus", language.getProperty("codecCopy"), language.getProperty("noAudio") })); comboAudioCodec.setSelectedIndex(0); caseChangeAudioCodec.setSelected(true); @@ -21490,6 +21526,7 @@ else if (System.getProperty("os.name").contains("Mac")) grpResolution.removeAll(); grpResolution.setVisible(true); + grpResolution.setLocation(grpResolution.getX(), 30); grpResolution.add(lblImageSize); grpResolution.add(comboResolution); grpResolution.add(lblPad); @@ -21609,8 +21646,9 @@ else if (System.getProperty("os.name").contains("Mac")) if (lblAudioMapping.getItemCount() != 4) { lblAudioMapping.setModel(new DefaultComboBoxModel(new String[] { language.getProperty("stereo"), "Multi", language.getProperty("mono"), "Mix" })); - lblAudioMapping.setSelectedItem(language.getProperty("stereo")); } + lblAudioMapping.setSelectedItem(language.getProperty("stereo")); + comboAudioCodec.setModel(new DefaultComboBoxModel(new String[] { "PCM 16Bits", "PCM 24Bits", "PCM 32Bits", language.getProperty("codecCopy"), language.getProperty("noAudio") })); comboAudioCodec.setSelectedIndex(0); debitAudio.setModel(comboAudioBitrate.getModel()); @@ -21621,8 +21659,8 @@ else if ("MJPEG".equals(function) == false) if (lblAudioMapping.getItemCount() != 4) { lblAudioMapping.setModel(new DefaultComboBoxModel(new String[] { language.getProperty("stereo"), "Multi", language.getProperty("mono"), "Mix" })); - lblAudioMapping.setSelectedItem(language.getProperty("stereo")); } + lblAudioMapping.setSelectedItem(language.getProperty("stereo")); if (comboAudioCodec.getModel().getElementAt(0).equals("WMA") == false && "WMV".equals(function)) { @@ -22004,7 +22042,8 @@ else if ("MPEG-1".equals(function) || "MPEG-2".equals(function)) // Ajout partie résolution grpResolution.removeAll(); - grpResolution.setVisible(true); + grpResolution.setVisible(true); + grpResolution.setLocation(grpResolution.getX(), 30); grpResolution.add(lblImageSize); grpResolution.add(comboResolution); grpResolution.add(lblPad); @@ -22085,8 +22124,9 @@ else if ("MPEG-1".equals(function) || "MPEG-2".equals(function)) if (lblAudioMapping.getItemCount() != 4) { lblAudioMapping.setModel(new DefaultComboBoxModel(new String[] { language.getProperty("stereo"), "Multi", language.getProperty("mono"), "Mix" })); - lblAudioMapping.setSelectedItem(language.getProperty("stereo")); } + lblAudioMapping.setSelectedItem(language.getProperty("stereo")); + comboAudioCodec.setModel(new DefaultComboBoxModel(new String[] {"AC3", "Dolby Digital Plus", language.getProperty("codecCopy"), language.getProperty("noAudio") })); comboAudioCodec.setSelectedIndex(0); debitAudio.setModel(comboAudioBitrate.getModel()); @@ -22100,8 +22140,9 @@ else if ("MPEG-1".equals(function) || "MPEG-2".equals(function)) if (lblAudioMapping.getItemCount() != 4) { lblAudioMapping.setModel(new DefaultComboBoxModel(new String[] { language.getProperty("stereo"), "Multi", language.getProperty("mono"), "Mix" })); - lblAudioMapping.setSelectedItem(language.getProperty("stereo")); } + lblAudioMapping.setSelectedItem(language.getProperty("stereo")); + comboAudioCodec.setModel(new DefaultComboBoxModel(new String[] {"AC3", language.getProperty("codecCopy"), language.getProperty("noAudio") })); comboAudioCodec.setSelectedIndex(0); debitAudio.setModel(comboAudioBitrate.getModel()); @@ -22227,7 +22268,8 @@ else if ("MPEG-1".equals(function) || "MPEG-2".equals(function)) // Ajout partie résolution grpResolution.removeAll(); - grpResolution.setVisible(true); + grpResolution.setVisible(true); + grpResolution.setLocation(grpResolution.getX(), 30); grpResolution.add(lblImageSize); grpResolution.add(comboResolution); grpResolution.add(caseRotate); @@ -22510,8 +22552,7 @@ else if (comboFonctions.getEditor().getItem().toString().isEmpty()) VideoPlayer.setMedia(); } - } catch (Exception e1) { - } + } catch (Exception e1) {} } } }); @@ -23737,7 +23778,7 @@ public static void enableAll() { if (caseAddText.isSelected() == false) { - text.setEnabled(false); + overlayText.setEnabled(false); } diff --git a/src/application/Splash.java b/src/application/Splash.java index e86c0061..7b90bfe9 100644 --- a/src/application/Splash.java +++ b/src/application/Splash.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/application/SubtitlesEdit.java b/src/application/SubtitlesEdit.java index e88a8188..235091e3 100644 --- a/src/application/SubtitlesEdit.java +++ b/src/application/SubtitlesEdit.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/application/SubtitlesEmbed.java b/src/application/SubtitlesEmbed.java index bdf8d62a..4c80a476 100644 --- a/src/application/SubtitlesEmbed.java +++ b/src/application/SubtitlesEmbed.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/application/SubtitlesHelp.java b/src/application/SubtitlesHelp.java index 7dfefac0..a8a0ec30 100644 --- a/src/application/SubtitlesHelp.java +++ b/src/application/SubtitlesHelp.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/application/SubtitlesTimeline.java b/src/application/SubtitlesTimeline.java index a3425965..cb3886c1 100644 --- a/src/application/SubtitlesTimeline.java +++ b/src/application/SubtitlesTimeline.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/application/Update.java b/src/application/Update.java index 4e2aea9d..64f3df77 100644 --- a/src/application/Update.java +++ b/src/application/Update.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/application/Utils.java b/src/application/Utils.java index 3a11e1a6..9cfc8ff4 100644 --- a/src/application/Utils.java +++ b/src/application/Utils.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -1650,7 +1650,7 @@ else if (p instanceof JTextField) timecode.setLocation(timecode.getLocation().x, (int) Math.round(Integer.valueOf(textTcPosY.getText()) / Shutter.playerRatio)); if (p.getName().equals("textTcPosX")) - timecode.setLocation((int) Math.round(Integer.valueOf(textTcPosX.getText()) / Shutter.playerRatio), timecode.getLocation().y); + timecode.setLocation((int) Math.round(Integer.valueOf(textTcPosX.getText()) / Shutter.playerRatio), timecode.getLocation().y); } else if (p instanceof JSlider) { @@ -1859,6 +1859,19 @@ else if (p.getName().equals("panelSubsColor2")) fileLocX = fileName.getLocation().x; fileLocY = fileName.getLocation().y; fileName.setSize(10,10); //Workaround to not reset the location + + VideoPlayer.player.add(fileName); + + //Overimage need to be the last component added + if (caseEnableCrop.isSelected()) + { + VideoPlayer.player.remove(selection); + VideoPlayer.player.remove(overImage); + VideoPlayer.player.add(selection); + VideoPlayer.player.add(overImage); + } + + fileName.repaint(); } //grpSubtitles diff --git a/src/application/VideoPlayer.java b/src/application/VideoPlayer.java index a51f591e..42a5bcaf 100644 --- a/src/application/VideoPlayer.java +++ b/src/application/VideoPlayer.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -2195,20 +2195,20 @@ public void run() { { if (comboAudioTrack.getSelectedItem() != null && comboAudioTrack.getSelectedItem().equals("Mix")) { - FFMPEG.playerWaveform(start + " -v quiet -hide_banner -i " + '"' + videoPath + '"' + " -f lavfi -i color=s=" + size + "x360:c=0x202025" + FFMPEG.playerWaveform(start + " -v quiet -hide_banner -i " + '"' + videoPath + '"' + " -f lavfi -i color=s=" + size + "x360:c=0x202024" + " -filter_complex " + '"' + "[0:a]amerge=inputs=" + FFPROBE.channels + "," + duration + "aformat=channel_layouts=mono,compand,showwavespic=size=" + size + "x360:colors=green|green[fg];[1:v][fg]overlay=format=rgb" + '"' + " -vn -frames:v 1 -c:v bmp -f image2pipe -"); } else { - FFMPEG.playerWaveform(start + " -v quiet -hide_banner -i " + '"' + videoPath + '"' + " -f lavfi -i color=s=" + size + "x360:c=0x202025" + FFMPEG.playerWaveform(start + " -v quiet -hide_banner -i " + '"' + videoPath + '"' + " -f lavfi -i color=s=" + size + "x360:c=0x202024" + " -filter_complex " + '"' + "[0:a:" + comboAudioTrack.getSelectedIndex() + "]" + duration + "aformat=channel_layouts=mono,compand,showwavespic=size=" + size + "x360:colors=green|green[fg];[1:v][fg]overlay=format=rgb" + '"' + " -vn -frames:v 1 -c:v bmp -f image2pipe -"); } } else { - FFMPEG.playerWaveform(start + " -v quiet -hide_banner -i " + '"' + videoPath + '"' + " -f lavfi -i color=s=" + size + "x360:c=0x202025" + FFMPEG.playerWaveform(start + " -v quiet -hide_banner -i " + '"' + videoPath + '"' + " -f lavfi -i color=s=" + size + "x360:c=0x202024" + " -filter_complex " + '"' + "[0:a]" + duration + "aformat=channel_layouts=mono,compand,showwavespic=size=" + size + "x360:colors=green|green[fg];[1:v][fg]overlay=format=rgb" + '"' + " -vn -frames:v 1 -c:v bmp -f image2pipe -"); } @@ -4567,15 +4567,6 @@ public static void checkSelection() { { Shutter.textCropWidth.setText(String.valueOf(outW)); Shutter.textCropHeight.setText(String.valueOf(outH)); - } - - if (Shutter.caseEnableCrop.isSelected()) - { - Shutter.comboPreset.getEditor().setItem((double) Math.round((double) ((double) outW / outH) * 100.0) / 100.0); - } - else - { - Shutter.comboPreset.getEditor().setItem(Shutter.language.getProperty("aucun")); } } @@ -5061,7 +5052,7 @@ public void run() { String alpha = ""; if (FFPROBE.hasAlpha && deinterlace == "") { - alpha = " -vf " + '"' + "split=2[bg][fg];[bg]drawbox=c=0x202025:replace=1:t=fill[bg];[bg][fg]overlay=0:0,format=rgb24" + '"'; + alpha = " -vf " + '"' + "split=2[bg][fg];[bg]drawbox=c=0x202024:replace=1:t=fill[bg];[bg][fg]overlay=0:0,format=rgb24" + '"'; } //Creating preview file @@ -5402,7 +5393,7 @@ else if (FFMPEG.vulkanAvailable && yadif == "") //Alpha channel if (FFPROBE.hasAlpha) { - filter += ",split=2[bg][fg];[bg]drawbox=c=0x202025:replace=1:t=fill[bg];[bg][fg]overlay=0:0,format=rgb24"; + filter += ",split=2[bg][fg];[bg]drawbox=c=0x202024:replace=1:t=fill[bg];[bg][fg]overlay=0:0,format=rgb24"; } //Speed diff --git a/src/application/VideoWeb.java b/src/application/VideoWeb.java index 39ae6186..e79921f9 100644 --- a/src/application/VideoWeb.java +++ b/src/application/VideoWeb.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/functions/AudioEncoders.java b/src/functions/AudioEncoders.java index a1680984..57cbe6c8 100644 --- a/src/functions/AudioEncoders.java +++ b/src/functions/AudioEncoders.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/functions/AudioNormalization.java b/src/functions/AudioNormalization.java index 3f99f943..e6dfaf00 100644 --- a/src/functions/AudioNormalization.java +++ b/src/functions/AudioNormalization.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/functions/BlackDetection.java b/src/functions/BlackDetection.java index 9e172871..1e54f357 100644 --- a/src/functions/BlackDetection.java +++ b/src/functions/BlackDetection.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/functions/Command.java b/src/functions/Command.java index c8086367..8ba53318 100644 --- a/src/functions/Command.java +++ b/src/functions/Command.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -23,6 +23,7 @@ import application.Ftp; import application.Shutter; +import library.EXIFTOOL; import library.FFMPEG; import settings.FunctionUtils; @@ -106,26 +107,42 @@ public void run() { cmd = " " + comboFonctions.getEditor().getItem().toString().replace("ffmpeg", "").replace("-passlogfile " + '"' + passlogfile[1] + '"', "-passlogfile " + '"' + fileOut + '"') + " -y " ; } else - cmd = " " + comboFonctions.getEditor().getItem().toString().replace("ffmpeg", "") + " -y " ; + cmd = " " + comboFonctions.getEditor().getItem().toString().replace("exiftool", "").replace("ffmpeg", ""); - FFMPEG.run(" -i " + '"' + file.toString() + '"' + cmd + '"' + fileOut + '"'); - - do + if (comboFonctions.getEditor().getItem().toString().contains("ffmpeg")) { - Thread.sleep(100); + cmd += " -y "; + + FFMPEG.run(" -i " + '"' + file.toString() + '"' + cmd + '"' + fileOut + '"'); + + do + { + Thread.sleep(100); + } while(FFMPEG.runProcess.isAlive()); + + if (cmd.contains("-pass")) + { + FFMPEG.run(" -i " + '"' + file.toString() + '"' + cmd.replace("-pass 1", "-pass 2") + '"' + fileOut + '"'); + } + + do + { + Thread.sleep(100); + } while(FFMPEG.runProcess.isAlive()); } - while(FFMPEG.runProcess.isAlive()); - - if (cmd.contains("-pass")) - { - FFMPEG.run(" -i " + '"' + file.toString() + '"' + cmd.replace("-pass 1", "-pass 2") + '"' + fileOut + '"'); - } - - do + else if (comboFonctions.getEditor().getItem().toString().contains("exiftool")) { - Thread.sleep(100); + btnStart.setEnabled(false); + + EXIFTOOL.run(" -tagsfromfile " + '"' + file.toString() + '"' + cmd + " " + '"' + file.toString() + '"'); + + do + { + Thread.sleep(100); + } while (EXIFTOOL.isRunning); + + btnStart.setEnabled(true); } - while(FFMPEG.runProcess.isAlive()); //Removing temporary files final File folder = new File(fileOut.getParent()); diff --git a/src/functions/Conform.java b/src/functions/Conform.java index 41c188ba..ec2bc653 100644 --- a/src/functions/Conform.java +++ b/src/functions/Conform.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/functions/DVDRIP.java b/src/functions/DVDRIP.java index d5e4aeff..06968860 100644 --- a/src/functions/DVDRIP.java +++ b/src/functions/DVDRIP.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/functions/Extract.java b/src/functions/Extract.java index e6adda4c..97788e6e 100644 --- a/src/functions/Extract.java +++ b/src/functions/Extract.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/functions/FrameMD5.java b/src/functions/FrameMD5.java index cd15c1d5..e61a4302 100644 --- a/src/functions/FrameMD5.java +++ b/src/functions/FrameMD5.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/functions/LoudnessTruePeak.java b/src/functions/LoudnessTruePeak.java index 24172fc1..74fc9a34 100644 --- a/src/functions/LoudnessTruePeak.java +++ b/src/functions/LoudnessTruePeak.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/functions/Merge.java b/src/functions/Merge.java index 5aff4023..df5a1386 100644 --- a/src/functions/Merge.java +++ b/src/functions/Merge.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/functions/OfflineDetection.java b/src/functions/OfflineDetection.java index aa08f973..23b9c9a7 100644 --- a/src/functions/OfflineDetection.java +++ b/src/functions/OfflineDetection.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/functions/Picture.java b/src/functions/Picture.java index 21812eb0..42e13b17 100644 --- a/src/functions/Picture.java +++ b/src/functions/Picture.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -130,12 +130,12 @@ public void run() { //Date filter if (Filter.dateFilter(file) == false) continue; - - //Framerate - String frameRate = setFramerate(); - + //Deinterlace String filterComplex = setDeinterlace(extension, isRaw); + + //Framerate + filterComplex = setFramerate(filterComplex); //No GPU acceleration when using this function FFMPEG.isGPUCompatible = false; @@ -343,7 +343,7 @@ else if (comboResolution.getSelectedItem().toString().contains("AI")) String ext = fileOut.getName().substring(fileOut.getName().lastIndexOf(".")); fileOut = new File(upscaleFolder + "/" + fileOut.getName().replace(ext, ".png")); - FFMPEG.run(InputAndOutput.inPoint + frameRate + inputCodec + " -i " + '"' + file.toString() + '"' + logo + InputAndOutput.outPoint + filterComplex + singleFrame + colorspace + " -an -y " + '"' + fileOut + '"'); + FFMPEG.run(InputAndOutput.inPoint + inputCodec + " -i " + '"' + file.toString() + '"' + logo + InputAndOutput.outPoint + filterComplex + singleFrame + colorspace + " -an -y " + '"' + fileOut + '"'); do { Thread.sleep(10); @@ -366,7 +366,7 @@ else if (comboResolution.getSelectedItem().toString().contains("AI")) } else { - FFMPEG.run(InputAndOutput.inPoint + frameRate + inputCodec + " -i " + '"' + file.toString() + '"' + logo + InputAndOutput.outPoint + cmd + '"' + fileOut + '"'); + FFMPEG.run(InputAndOutput.inPoint + inputCodec + " -i " + '"' + file.toString() + '"' + logo + InputAndOutput.outPoint + cmd + '"' + fileOut + '"'); } if (isRaw) @@ -404,19 +404,16 @@ else if (comboResolution.getSelectedItem().toString().contains("AI")) } - private static String setFramerate() { + private static String setFramerate(String filterComplex) { if (caseCreateSequence.isSelected()) - { - Float f = (float) FFPROBE.currentFPS / Float.parseFloat(comboInterpret.getSelectedItem().toString().replace(",", ".")); - - if (f != 1.0f) - { - return " -r " + f; - } + { + if (filterComplex != "") filterComplex += ","; + + filterComplex += "fps=" + Float.parseFloat(comboInterpret.getSelectedItem().toString().replace(",", ".")); } - - return ""; + + return filterComplex; } private static String setDeinterlace(String extension, boolean isRaw) { @@ -512,7 +509,7 @@ else if (comboFonctions.getSelectedItem().equals("JPEG") && caseCreateSequence.i private static String setFrame() { if (caseCreateSequence.isSelected()) - { + { return ""; } else if (comboFilter.getSelectedItem().toString().equals(".gif")) diff --git a/src/functions/ReplaceAudio.java b/src/functions/ReplaceAudio.java index 11ee4c9b..db064b7e 100644 --- a/src/functions/ReplaceAudio.java +++ b/src/functions/ReplaceAudio.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -260,8 +260,14 @@ else if (caseChangeAudioCodec.isSelected()) } else { - videoFile = new File(liste.getElementAt(0)); - audioFiles = " -i " + '"' + liste.getElementAt(1) + '"'; + videoFile = new File(liste.getElementAt(0)); + + if (liste.getElementAt(1).contains("lavfi")) //Mute track + { + audioFiles = liste.getElementAt(1); + } + else + audioFiles = " -i " + '"' + liste.getElementAt(1) + '"'; //Ignore mute tracks if (liste.getElementAt(1).contains("lavfi") == false) @@ -269,7 +275,7 @@ else if (caseChangeAudioCodec.isSelected()) audioExt = liste.getElementAt(1).substring(liste.getElementAt(1).lastIndexOf(".")); } } - + float offset = 0; if (caseAudioOffset.isSelected()) diff --git a/src/functions/Rewrap.java b/src/functions/Rewrap.java index 417450e0..4d34999e 100644 --- a/src/functions/Rewrap.java +++ b/src/functions/Rewrap.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/functions/VMAF.java b/src/functions/VMAF.java index 84a6d4aa..62f83047 100644 --- a/src/functions/VMAF.java +++ b/src/functions/VMAF.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/functions/VideoEncoders.java b/src/functions/VideoEncoders.java index 2dfdb121..94e40b28 100644 --- a/src/functions/VideoEncoders.java +++ b/src/functions/VideoEncoders.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -663,7 +663,7 @@ else if (comboFonctions.getSelectedItem().toString().equals("DVD")) //Interlace50p filterComplex = AdvancedFeatures.setInterlace50p(filterComplex); - + //Force TFF filterComplex = AdvancedFeatures.setForceTFF(filterComplex); diff --git a/src/functions/VideoInserts.java b/src/functions/VideoInserts.java index 570f6dc1..d78e2b98 100644 --- a/src/functions/VideoInserts.java +++ b/src/functions/VideoInserts.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/library/BMXTRANSWRAP.java b/src/library/BMXTRANSWRAP.java index 5b9f7a76..fa040bd7 100644 --- a/src/library/BMXTRANSWRAP.java +++ b/src/library/BMXTRANSWRAP.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/library/DCRAW.java b/src/library/DCRAW.java index 52d5897c..a1d2a2b9 100644 --- a/src/library/DCRAW.java +++ b/src/library/DCRAW.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/library/DVDAUTHOR.java b/src/library/DVDAUTHOR.java index e355c33d..c4233023 100644 --- a/src/library/DVDAUTHOR.java +++ b/src/library/DVDAUTHOR.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/library/EXIFTOOL.java b/src/library/EXIFTOOL.java index 42d375f1..7e867cba 100644 --- a/src/library/EXIFTOOL.java +++ b/src/library/EXIFTOOL.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -39,7 +39,7 @@ public class EXIFTOOL extends Shutter { private static boolean scanOrientation = true; private static Boolean horizontal = true; - public static void run(final String file) { + public static void run(final String cmd) { error = false; scanOrientation = true; @@ -50,6 +50,12 @@ public static void run(final String file) { creationHours = "00:00:00"; exifWidth = ""; exifHeight = ""; + + if (cmd != '"' + "" + '"') + { + Console.consoleEXIFTOOL.append(System.lineSeparator()); + Console.consoleEXIFTOOL.append(Shutter.language.getProperty("command") + " " + cmd); + } //Watermark scaling FFPROBE.previousImageWidth = FFPROBE.imageWidth; @@ -67,14 +73,14 @@ public void run() { PathToEXIFTOOL = Shutter.class.getProtectionDomain().getCodeSource().getLocation().getPath(); PathToEXIFTOOL = PathToEXIFTOOL.substring(1,PathToEXIFTOOL.length()-1); PathToEXIFTOOL = '"' + PathToEXIFTOOL.substring(0,(int) (PathToEXIFTOOL.lastIndexOf("/"))).replace("%20", " ") + "/Library/exiftool.exe" + '"'; - processEXIFTOOL = new ProcessBuilder(PathToEXIFTOOL + " " + '"' + file + '"'); + processEXIFTOOL = new ProcessBuilder(PathToEXIFTOOL + " " + cmd); } else { PathToEXIFTOOL = Shutter.class.getProtectionDomain().getCodeSource().getLocation().getPath(); PathToEXIFTOOL = PathToEXIFTOOL.substring(0,PathToEXIFTOOL.length()-1); PathToEXIFTOOL = PathToEXIFTOOL.substring(0,(int) (PathToEXIFTOOL.lastIndexOf("/"))).replace("%20", "\\ ") + "/Library/exiftool"; - processEXIFTOOL = new ProcessBuilder("/bin/bash", "-c" , PathToEXIFTOOL + " " + '"' + file + '"'); + processEXIFTOOL = new ProcessBuilder("/bin/bash", "-c" , PathToEXIFTOOL + " " + cmd); } isRunning = true; @@ -85,7 +91,10 @@ public void run() { String line; - Console.consoleEXIFTOOL.append(System.lineSeparator()); + if (cmd != '"' + "" + '"') + { + Console.consoleEXIFTOOL.append(System.lineSeparator()); + } //Analyse des données while ((line = br.readLine()) != null) { @@ -134,8 +143,6 @@ public void run() { } process.waitFor(); - Console.consoleEXIFTOOL.append(System.lineSeparator()); - //Si il n'y a pas d'exif on lit la date de création système if (exifDate == "" && exifHours == "") { diff --git a/src/library/FFMPEG.java b/src/library/FFMPEG.java index f98a5bed..6c723ce4 100644 --- a/src/library/FFMPEG.java +++ b/src/library/FFMPEG.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -210,6 +210,7 @@ else if (caseChangeFolder2.isSelected()) runProcess = new Thread(new Runnable() { + @SuppressWarnings("resource") @Override public void run() { diff --git a/src/library/FFPROBE.java b/src/library/FFPROBE.java index ff2a3289..d911435d 100644 --- a/src/library/FFPROBE.java +++ b/src/library/FFPROBE.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -114,7 +114,7 @@ public static void Data(final String file) { } interlaced = null; - if (caseForcerDesentrelacement.isSelected() == false || caseForcerDesentrelacement.isSelected() && lblTFF.getText().equals("x2")) + if (caseForcerDesentrelacement.isSelected() == false || caseForcerDesentrelacement.isSelected() && lblTFF.getText().contains("x2")) { fieldOrder = null; } @@ -254,13 +254,13 @@ else if (file.equals("Capture.input.device") && RecordInputDevice.videoDeviceInd if (line.contains("top first") || line.contains("top coded first")) { interlaced = "1"; - if (caseForcerDesentrelacement.isSelected() == false || caseForcerDesentrelacement.isSelected() && lblTFF.getText().equals("x2")) + if (caseForcerDesentrelacement.isSelected() == false || caseForcerDesentrelacement.isSelected() && lblTFF.getText().contains("x2")) fieldOrder = "0"; } else if (line.contains("bottom first") || line.contains("bottom coded first")) { interlaced = "1"; - if (caseForcerDesentrelacement.isSelected() == false || caseForcerDesentrelacement.isSelected() && lblTFF.getText().equals("x2")) + if (caseForcerDesentrelacement.isSelected() == false || caseForcerDesentrelacement.isSelected() && lblTFF.getText().contains("x2")) fieldOrder = "1"; } @@ -718,7 +718,7 @@ public void run() { { String field = line.substring(line.indexOf("top_field_first") + 16); - if (caseForcerDesentrelacement.isSelected() == false || caseForcerDesentrelacement.isSelected() && lblTFF.getText().equals("x2")) + if (caseForcerDesentrelacement.isSelected() == false || caseForcerDesentrelacement.isSelected() && lblTFF.getText().contains("x2")) { if (field.equals("1")) fieldOrder = "0"; @@ -1234,7 +1234,7 @@ public static void setFilesize() { int min = Integer.parseInt(textM.getText()); int sec = Integer.parseInt(textS.getText()); int audio = Integer.parseInt(debitAudio.getSelectedItem().toString()); - int tailleFinale = Integer.parseInt(bitrateSize.getText()); + float tailleFinale = Float.parseFloat(bitrateSize.getText().replace(",", ".")); float result = (float) tailleFinale / ((h * 3600) + (min * 60) + sec); float resultAudio = (float) (audio*multi) / 8 / 1024; float resultatdebit = (result - resultAudio) * 8 * 1024; @@ -1256,7 +1256,13 @@ public static void setFilesize() { float resultVideo = (float) videoBitrate / 8 / 1024; float resultAudio = (float) (audio*multi) / 8 / 1024; float resultatdebit = (resultVideo + resultAudio) * ( (h * 3600)+(min * 60)+sec); - bitrateSize.setText(String.valueOf((int)resultatdebit)); + + if (resultatdebit < 10) + { + bitrateSize.setText(String.valueOf((double) Math.round(resultatdebit * 100.0) / 100.0)); + } + else + bitrateSize.setText(String.valueOf((int) resultatdebit)); } } else diff --git a/src/library/MEDIAINFO.java b/src/library/MEDIAINFO.java index 4e967a86..8005e6fb 100644 --- a/src/library/MEDIAINFO.java +++ b/src/library/MEDIAINFO.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/library/NCNN.java b/src/library/NCNN.java index 87763f13..6f853fa5 100644 --- a/src/library/NCNN.java +++ b/src/library/NCNN.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/library/PDF.java b/src/library/PDF.java index 80a87d6f..6631e697 100644 --- a/src/library/PDF.java +++ b/src/library/PDF.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/library/SEVENZIP.java b/src/library/SEVENZIP.java index 1fbe69eb..e0634b63 100644 --- a/src/library/SEVENZIP.java +++ b/src/library/SEVENZIP.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/library/TSMUXER.java b/src/library/TSMUXER.java index 577927a2..6058f44d 100644 --- a/src/library/TSMUXER.java +++ b/src/library/TSMUXER.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/library/YOUTUBEDL.java b/src/library/YOUTUBEDL.java index 853e1f5d..e720160e 100644 --- a/src/library/YOUTUBEDL.java +++ b/src/library/YOUTUBEDL.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/settings/AdvancedFeatures.java b/src/settings/AdvancedFeatures.java index 088ef1ce..d51e5c09 100644 --- a/src/settings/AdvancedFeatures.java +++ b/src/settings/AdvancedFeatures.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -40,10 +40,22 @@ else if (FFPROBE.interlaced != null && FFPROBE.interlaced.equals("1") && caseFor || caseForcerDesentrelacement.isSelected()) { int doubler = 0; - if (lblTFF.getText().equals("x2") && caseForcerDesentrelacement.isSelected()) + String field = FFPROBE.fieldOrder; + if (lblTFF.getText().contains("x2") && caseForcerDesentrelacement.isSelected()) + { doubler = 1; + + if (lblTFF.getText().equals("x2 T")) + { + field = "0"; + } + else if (lblTFF.getText().equals("x2 B")) + { + field = "1"; + } + } - return comboForcerDesentrelacement.getSelectedItem().toString() + "=" + doubler + ":" + FFPROBE.fieldOrder + ":0"; + return comboForcerDesentrelacement.getSelectedItem().toString() + "=" + doubler + ":" + field + ":0"; } return ""; @@ -275,7 +287,7 @@ else if (comboResolution.getSelectedItem().toString().contains(":")) int width = Integer.parseInt(s[0]); int height = Integer.parseInt(s[1]); - if (width > 1920 || height > 1080) + if (width > 1920 || height > 1080 || FFPROBE.currentFPS >= 120.0f) return " -profile:v " + profile; //level is auto selected by ffmpeg else return " -profile:v " + profile + " -level 5.1"; @@ -621,7 +633,7 @@ else if (inputDeviceIsRunning) return " -vsync vfr"; } - if (caseForcerDesentrelacement.isSelected() && (lblTFF.getText().equals("x2") || comboForcerDesentrelacement.getSelectedItem().toString().equals("detelecine"))) + if (caseForcerDesentrelacement.isSelected() && (lblTFF.getText().contains("x2") || comboForcerDesentrelacement.getSelectedItem().toString().equals("detelecine"))) { //Null } @@ -646,10 +658,11 @@ else if (FFPROBE.currentFPS == 23.98f) public static String setForceTFF(String filterComplex) { - if (comboFonctions.getSelectedItem().toString().contains("XDCAM") && caseForcerEntrelacement.isSelected()) + if (caseForcerEntrelacement.isSelected()) { if (filterComplex != "") filterComplex += ","; - filterComplex += "setfield=tff"; + + filterComplex += "setfield=tff"; } return filterComplex; diff --git a/src/settings/AudioSettings.java b/src/settings/AudioSettings.java index bfb97305..a1c0ac1e 100644 --- a/src/settings/AudioSettings.java +++ b/src/settings/AudioSettings.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/settings/BitratesAdjustement.java b/src/settings/BitratesAdjustement.java index b9ab2825..dc994610 100644 --- a/src/settings/BitratesAdjustement.java +++ b/src/settings/BitratesAdjustement.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/settings/Colorimetry.java b/src/settings/Colorimetry.java index cf7be7be..079dca14 100644 --- a/src/settings/Colorimetry.java +++ b/src/settings/Colorimetry.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/settings/Corrections.java b/src/settings/Corrections.java index a31acac9..78b23a91 100644 --- a/src/settings/Corrections.java +++ b/src/settings/Corrections.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/settings/Filter.java b/src/settings/Filter.java index 6391b6ef..8a61016f 100644 --- a/src/settings/Filter.java +++ b/src/settings/Filter.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/settings/FunctionUtils.java b/src/settings/FunctionUtils.java index 8a83d340..91e4dfa2 100644 --- a/src/settings/FunctionUtils.java +++ b/src/settings/FunctionUtils.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -87,7 +87,7 @@ public static boolean analyze(File file, boolean isRaw) throws InterruptedExcept || comboFonctions.getSelectedItem().toString().equals("JPEG") || comboFonctions.getSelectedItem().toString().equals(language.getProperty("functionPicture"))) { - EXIFTOOL.run(file.toString()); + EXIFTOOL.run('"' + file.toString() + '"'); do { Thread.sleep(100); @@ -1101,14 +1101,19 @@ public static String setMetadatas() { { if (FFPROBE.audioOnly == false) { - metadata = " -map_metadata 0 -map_metadata:s:v 0:s:v"; + metadata = " -map_metadata 0"; - if (FFPROBE.hasAudio) + if (casePreserveSubs.isSelected() == false) + { + metadata += " -map_metadata:s:v 0:s:v"; + } + + if (FFPROBE.hasAudio && casePreserveSubs.isSelected() == false) { metadata += " -map_metadata:s:a 0:s:a"; } } - else + else if (casePreserveSubs.isSelected() == false) { metadata = " -map_metadata:s:a 0:s:a"; } diff --git a/src/settings/Image.java b/src/settings/Image.java index a45064ff..68f9e168 100644 --- a/src/settings/Image.java +++ b/src/settings/Image.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/settings/ImageSequence.java b/src/settings/ImageSequence.java index 538023e0..ce87317c 100644 --- a/src/settings/ImageSequence.java +++ b/src/settings/ImageSequence.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/settings/InputAndOutput.java b/src/settings/InputAndOutput.java index 26e27e3a..f664aeff 100644 --- a/src/settings/InputAndOutput.java +++ b/src/settings/InputAndOutput.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/settings/Overlay.java b/src/settings/Overlay.java index a0020794..af7c7225 100644 --- a/src/settings/Overlay.java +++ b/src/settings/Overlay.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -146,7 +146,7 @@ else if (Shutter.caseShowTimecode.isSelected() && FFPROBE.timecode1.equals("") = { rate = comboFPS.getSelectedItem().toString().replace(",", "."); } - else if (caseForcerDesentrelacement.isSelected() && lblTFF.getText().equals("x2")) + else if (caseForcerDesentrelacement.isSelected() && lblTFF.getText().contains("x2")) { rate = String.valueOf(FFPROBE.currentFPS * 2); } @@ -368,7 +368,7 @@ else if (s[1].equals("auto")) if (Shutter.caseAddText.isSelected()) { - String text = FunctionUtils.setSuffix(Shutter.text.getText(), true); + String text = FunctionUtils.setSuffix(Shutter.overlayText.getText(), true); if (filterComplex != "") filterComplex += ","; filterComplex += "drawtext=" + overlayFont + ":text='" + text + "':r=" + rate + ":x=" + Math.round(Integer.parseInt(Shutter.textNamePosX.getText()) / imageRatio) + ":y=" + Math.round(Integer.parseInt(Shutter.textNamePosY.getText()) / imageRatio) + ":fontcolor=0x" + Shutter.foregroundHex + Shutter.foregroundNameAlpha + ":fontsize=" + Math.round(Integer.parseInt(Shutter.textNameSize.getText()) / imageRatio) + ":box=1:boxcolor=0x" + Shutter.backgroundHex + Shutter.backgroundNameAlpha; diff --git a/src/settings/Timecode.java b/src/settings/Timecode.java index 34188d5f..5bde07a6 100644 --- a/src/settings/Timecode.java +++ b/src/settings/Timecode.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/settings/Transitions.java b/src/settings/Transitions.java index 11549e72..719bb507 100644 --- a/src/settings/Transitions.java +++ b/src/settings/Transitions.java @@ -1,5 +1,5 @@ /******************************************************************************************* -* Copyright (C) 2024 PACIFICO PAUL +* Copyright (C) 2025 PACIFICO PAUL * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by