【问题标题】:What is the correct way to reverse a video using java?使用java反转视频的正确方法是什么?
【发布时间】:2020-03-09 23:47:21
【问题描述】:

我写了一个程序,反转一个视频。但是当我试图打开视频文件时,它显示了一个错误。文件已损坏。当我尝试反转文本文件时,它可以工作,但视频已损坏。我通过从文件中读取字节并将其以相反的顺序存储到另一个文件中来实现这一点。 请参阅下面的代码..

// The beginning of the program
    package IO;

import java.io.*;

public class Reverse {
    public static void main(String[] args) {
        // videoName is the video file to be reversed**
        String videoName = "/Users/Noah/Videos/362f42d24752447aacb3f263c58472ba.mp4";

        // pathName is the output folder path**
        String pathName = "/Users/Noah/Desktop/video file.mp4";
        File vFile = new File(videoName);

        if (vFile.exists()) {
            FileInputStream fIn = null;
            FileOutputStream fOut = null;
            try {
                fIn = new FileInputStream(vFile);
                fOut = new FileOutputStream(pathName);

                int availableData = fIn.available();
                byte[] buffer = new byte[availableData];

                // read all data into buffer**
                int readData = fIn.read(buffer);

                // write data to output folder path in reverse
                // using a countdown**
                if (readData != -1) {
                    for (int i = buffer.length - 1; i >= 0; i--) {
                        fOut.write(buffer[i]);
                        System.out.println('*'); // not necessary
                    }  // end for

                } else System.out.println("The file was not read properly, try again");
                // end if
            } catch (IOException ignored) {
            } finally {
                try {
                    if (fIn != null && fOut != null) {
                        fIn.close(); // close input stream
                        fOut.close(); // close output stream
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        } else System.out.println("File does not exists");
        System.out.println("File read successfully");
    }
}

【问题讨论】:

  • 我认为这是因为您需要保留表示视频标头的初始 X 个字节,并且只反转作为视频的有效负载。
  • 你的意思是,把它倒过来让它倒着播放?您需要了解视频格式。
  • @Jason,我不明白你说的保留最初的 X 字节是什么意思。
  • @user241802 大多数(如果不是全部)文件不仅包含构成文件内容的原始字节。它们还包含一个字节的信息,告诉解码器(即媒体播放器)如何读取文件。即文件的版本、数据、上次修改时间等。因此,您不能简单地反转所有字节并希望它有效,因为现在标头信息现在位于文件末尾。您需要保留构成标头的字节,并且只反转有效负载(视频本身)。调查一下; en.wikipedia.org/wiki/MPEG-4_Part_14
  • @user241802 反转视频意味着以相反的顺序放置帧;这更像是反转字符串中的单词,而不是反转整个字符串:“foo bar baz”反转为“baz bar foo”,而不是“zab rab oof”。您需要了解数据的结构才能正确反转它。

标签: java file-handling


【解决方案1】:

在文本文件中反转文本相对简单。

处理视频文件等文件格式更复杂。

除了构成视频图像的位和字节之外,视频文件中还有元数据。头信息、文件结构、数据压缩等...

通过简单地反转所有字节,您已经破坏了文件格式并使其无法读取。

您需要研究正在编辑的任何类型的视频文件的文件格式,以便将视频文件重建为可读的文件。甚至可能在某个地方有一个 JAVA 库来进行视频保留。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多