使用单行命令提取视频的一部分

Str*_*sky 114 command-line video extract

如果我有一个视频,通常是 avi,但可以是任何视频,并且我想创建另一个格式相同但只是一部分的视频,在视频中的位置i秒到f秒,要执行的单行命令是什么这个?

N.N*_*.N. 152

这可以使用mencoder或来完成ffmpeg

编码器

假设您想将 00:00:30 开始的部分剪切到原始文件中,长度为 5 秒,并且不应重新编码(如果您想重新编码它,则必须copy用音频替换和视频编解码器,对于可用音频编解码器问题mencoder -oac help列表,对于可用视频编解码器问题列表mencoder -ovc help),然后您发出:

mencoder -ss 00:30:00 -endpos 00:00:05 -oac pcm -ovc copy originalfile -o newfile
Run Code Online (Sandbox Code Playgroud)

您必须使用实际文件名替换orginalfilenewfile,后者是为保存剪切部分而创建的文件的名称。

ffmpeg

假设您想将 00:00:30 开始的部分剪切到原始文件中,长度为 5 秒,并且不应重新编码(如果您想重新编码它,则必须替换copy使用音频和视频编解码器,获取可用编解码器问题列表ffmpeg -formats -E),然后您发出:

ffmpeg -ss 00:00:30 -i orginalfile -t 00:00:05 -vcodec copy -acodec copy newfile
Run Code Online (Sandbox Code Playgroud)

您必须使用实际文件名替换orginalfilenewfile,后者是为保存剪切部分而创建的文件的名称。


如需参考,请参阅http://lazyxiong-tech.blogspot.com/2007/05/using-mencoder-to-cut-out-pieces-of.htmlhttp:// 中的“7. 仅复制视频的一部分” segfault.in/2010/10/ffmpeg-tricks-you-should-know-about/


小智 39

您是否需要使用重新编码或不使用重新编码模式来剪切视频?您可以尝试遵循以下命令。

概要:ffmpeg -i [input_file] -ss [start_seconds] -t [duration_seconds] [output_file]

使用 FFmpeg 剪切 mp4 视频而无需重新编码

Example:
ffmpeg -i source.mp4 -ss 00:00:05 -t 00:00:10 -c copy cut_video.mp4
Run Code Online (Sandbox Code Playgroud)

使用 FFmpeg 剪切 mp4 视频并重新编码

Example:
ffmpeg -i source.mp4 -ss 00:00:05 -t 00:00:10 -async 1 -strict -2 cut_video.mp4
Run Code Online (Sandbox Code Playgroud)

如果你想从头开始截断部分,只需-t 00:00:10从命令中删除

  • 需要考虑的事情:“使用 -ss 作为输入选项和 -c:v 复制可能不准确,因为 ffmpeg 被迫仅在 i 帧上使用/分割。尽管它会(如果可能)调整流的开始时间到一个负值来补偿这一点。基本上,如果您指定“第二个 157”并且直到第二个 159 为止没有关键帧,它将在开始时包含两秒的音频(没有视频),然后将从第一个开始关键帧。因此在分割和进行编解码器复制时要小心。” https://trac.ffmpeg.org/wiki/Seeking 我通过省略 `-c copy` 获得了更准确的剪切 (2认同)