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


81

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

Answers:


114

可以使用mencoder和来完成ffmpeg

编码器

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

mencoder -ss 00:30:00 -endpos 00:00:05 -oac copy -ovc copy originalfile -o newfile

你必须更换orginalfile,并newfile用实际文件名,后面是创建的用于保存切出部分文件的名称。

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

你必须更换orginalfile,并newfile用实际文件名,后面是创建的用于保存切出部分文件的名称。


有关参考,请参见http://lazyxiong-tech.blogspot.com/2007/05/using-mencoder-to-cut-out-pieces-of.htmlhttp://中的 “ 7.仅复制视频的一部分”。segfault.in/2010/10/ffmpeg-技巧,您应该了解/


我尝试过但失败了。您能告诉我使用avi,flv和mpg的典型编解码器为您提供的命令是什么吗?我列出了编解码器,但意义不大。
Strapakowsky's

@strapakowsky这取决于输入文件和您安装的编解码器。也许您应该为此提出一个新问题,并添加有关您拥有的文件和尝试的命令的信息。
NN

@strapakowsky我也不能使它与ffmpeg一起使用,但是所有有关使用ffmpeg剪切部分的指南都建议它应该以某种方式起作用,因此我将其保留在我的回答中。但是,我还添加了一个Mencoder行,我可以开始工作。
NN

刚刚使用了这个版本。它对您不起作用,因为-ss ... -t ...需要先-i infile选项。请参阅此答案以获得真正的单线。您几乎得到了,只是没有得到订单……
Hendy 2012年

1
@Hendy编辑相应
NN

25

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

简介: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

使用FFmpeg剪辑的mp4视频进行重新编码

Example:
ffmpeg -i source.mp4 -ss 00:00:05 -t 00:00:10 -async 1 -strict -2 cut_video.mp4

如果要从一开始就删节,只需-t 00:00:10从命令中删除


0

medipack是一个非常简单的命令行应用程序,可以作为包装ffmpeg

您可以使用以下命令来修剪视频:

medipack trim input.mp4 -s 01:04 -e 14:08 -o output.mp4
medipack trim input.mp4 -s 01:04 -t 13:04 -o output.mp4

您可以按以下方式查看trim子命令的选项:

srb@srb-pc:$ medipack trim -h
usage: medipack trim [-h] [-s START] [-e END | -t TIME] [-o OUTPUT] [inp]

positional arguments:
  inp                   input video file ex: input.mp4

optional arguments:
  -h, --help            show this help message and exit
  -s START, --start START
                        start time for cuting in format hh:mm:ss or mm:ss
  -e END, --end END     end time for cuting in format hh:mm:ss or mm:ss
  -t TIME, --time TIME  clip duration in format hh:mm:ss or mm:ss
  -o OUTPUT, --output OUTPUT

您也可以使用 medipack -h

srb@srb-pc:$ medipack --help
usage: medipack.py [-h] [-v] {trim,crop,resize,extract} ...

positional arguments:
  {trim,crop,resize,extract}

optional arguments:
  -h, --help            show this help message and exit
  -v, --version         Display version number

您可以访问https://github.com/srbcheema1/medipack并在README中查看示例。


-1

更精确地说,您可以:手动在媒体播放器中打开文件,该播放器将逐帧前进(我最喜欢的potplayer是播放器,但MPC-HC可以工作),并播放具有以下数据的AVISynth文件:

DirectShowSource(("C:\Downloads\Video\Do you want him.flv"), Pixel_Type="yuy2").Crop(0,0,-0,-0)
Subtitle("C:\Downloads\Video\Do you want him.flv", font="Arial", size=24, text_color=$ff0000, align=3)
ShowFrameNumber(scroll=true, x=336, y=27, font="Arial", size=24, text_color=$ff0000)

ShowTime(x=398, y=44, font="Arial", size=24, text_color=$ff0000)

然后以精确时间格式剪切:

ffmpeg -i "Path\do you want him.flv" -ss 00:00:05.240 -to 00:00:08.360 -vcodec libx264 -acodec libvo_aacenc "Path\Do you want him1.flv"

ffmpeg -i "Path\do you want him.flv" -ss 00:00:10.240 -to 00:00:14.360 -vcodec libx264 -acodec libvo_aacenc "Path\Do you want him2.flv"

如果您想加入,请使用视频文件制作一个txt文件,其内容如下:

file 'C:\Downloads\Video\Do you want him1.flv'

file 'C:\Downloads\Video\Do you want him2.flv'

运行ffmpeg

ffmpeg -f concat -i FileList.txt -c copy "Path\NewName_joined.flv"

我在编程上编写了一个程序,但是没有10级的程序可以显示,对不起

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.