I have a site that allows people to upload large video files in various formats (avi, mp4, mkv and flv). I need to generate a 1 minute "sample" from the larger file that has been uploaded, and the sample needs to be in the same format, have the same frame dimensions and bit-rate as the original file. Is there a way to simply cut out a section of the file into a new file? Preferably in ffmpeg (or any other tool if ffmpeg is impossible).
4 回答
首先,您需要了解视频文件的实际工作方式。这里有一组教程解释了这一点:互联网视频过于简单的指南。
然后,您可以尝试各种可能有助于切片的工具。一个是 flvtool (如果您的输入是 FLV)或FFmpeg。使用 FFmpeg,您可以指定开始时间和停止时间,它会尝试剪切您要求的内容(但它必须找到最近的关键帧才能开始切片)。
这是 FFmpeg 命令,用于读取名为 input.flv 的文件,开始 15 秒进入视频,然后剪切接下来的 60 秒,否则保持音频代码和视频编解码器的相同参数,并将其写入输出文件:
ffmpeg -i input.flv -ss 15 -t 60 -acodec 复制 -vcodec 复制 output.flv
最后,如果您愿意,您可以使用 C 或 C++(使用 FFmpeg 的 libav 库)或 Java(使用Xuggler)编写计算机代码以编程方式执行此操作,但这对于您的用例来说非常先进。
如果您像我一样在保持自动和视频同步时遇到问题,以下可能会有所帮助(在另一个网站上找到):
ffmpeg -sameq -i file.flv -ss 00:01:00 -t 00:00:30 -ac 2 -r 25 -copyts output.flv
正如 Evan 所指出的,接受的答案中的方法可能会导致 A/V 同步丢失。但是他的解决方案不正确,因为-sameq
被删除了。
如https://trac.ffmpeg.org/wiki/Seeking中所述,该-ss
选项应该在之前-i
而不是之后。这为我解决了这个问题。
下一个选项是使用-fs
开关。例子:
ff -i ip.mkv -fs 500M -c copy ~/Movies/reservoir/carbohydrates.mkv
从选定的源中提取 500 兆字节(500×1000×1000 字节 + '复用开销')。– 如您所知,基于文件大小
唯一的爱。和尊重。