首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ffmpeg加速部分视频

使用ffmpeg加速部分视频
EN

Stack Overflow用户
提问于 2015-01-21 18:50:07
回答 2查看 13.3K关注 0票数 25

我正在录制屏幕和部分录制的屏幕,我想加快使用命令行工具,如ffmpeg。

我知道可以使用ffmpeg命令(来源)来加速整个视频。

代码语言:javascript
复制
ffmpeg -i input.mkv -filter:v "setpts=0.5*PTS" output.mkv

是否可以只在视频中的某些区域应用加速比。例如:从10秒到15秒,再从50秒到60秒?类似的东西似乎可以使用程序slowmoVideo

EN

回答 2

Stack Overflow用户

发布于 2015-10-01 02:12:11

我想加快我的视频的前4秒。

剪掉你的视频

代码语言:javascript
复制
ffmpeg -i input.mp4 -t 4 slow.mp4
代码语言:javascript
复制
ffmpeg -i input.mp4 -ss 00:00:04 part-2.mp4

加速零件

代码语言:javascript
复制
ffmpeg -i slow.mp4 -filter:v "setpts=0.5*PTS" part-1.mp4

级联

代码语言:javascript
复制
ffmpeg -f concat -i <(for f in ./part-*.mp4; do echo "file '$PWD/$f'"; done) -c copy output.mp4

来自ffmpeg文件的资源:

票数 29
EN

Stack Overflow用户

发布于 2016-12-19 02:17:31

音频和视频的

总之,这个(作为一个例子)对我来说很好(它使从00:00:12.5开始的4秒段变成一个斜线,同时将代码转换为mp4):

代码语言:javascript
复制
ffmpeg -loglevel error \
  -ss 12.5 -t 4.0 \
  -i orig.MOV \
  -filter_complex \
    "[0:v]setpts=8.0*PTS[v];[0:a]asetrate=5512.5,aresample=44100[a]" \
  -map "[v]" -map "[a]" \
  -r 30 -strict -2 \
  out.mp4

我发现组合体asetrate=...,aresample=...atempo工作得更好,特别是因为后者仅限于[0.5;2.0]。还请注意最后的-r 30,它将帧速率设置为30 the。在我处理的一些视频中,由于一些奇怪的原因,如果没有它,结果将是一个2400 for的巨大文件!它还确保了我的剪辑的所有片段以相同的帧速率(见下文)。

其他参数和往常一样:-ss设置剪辑的开头;因为它在-i之前,所以它工作得很快,而且也正确(在原始的时间线中)。-t是持续时间,也在原始时间线中。

背景和详细信息:

好吧,我也有一个类似的问题,因为我的新iPhone7+ (我只编辑了一部分内容)的视频似乎没有被Google、iPhoto等所识别/理解。

在花了一些时间(在更多的问题和漂亮的ffmpeg文档的帮助下)之后,我把它简化为下面的bash脚本。它所做的比最初的问题要多一点,因为我也想从.MOV转换到.mp4,并且在开始/结束时也会修剪一些时间。有了这个,我就可以批量处理剪辑&将大量的.MOV文件从iPhone处理到我可以上传、共享或播放的剪辑中。其中一个命令行的示例:

./slo-part.sh IMG_0067.MOV clip_0067.mp4 14.0 23.0 25.5 27.67

方便脚本:

下面是slo-part.sh脚本:

代码语言:javascript
复制
#!/usr/bin/env bash

# Slow down a portion of a movie clip

_usage="Usage : $0 file_in file_out start start_slo stop_slo stop"

function log {
  local msg=$1
  local t=$(date +"%Y-%m-%d %H:%M:%S")
  echo "$t $msg"
}

function calc {
  printf "%g" $(bc<<<"$1")
}

IN=$1
OUT=$2
A=$3
B=$4
C=$5
D=$6

: ${IN:?$_usage}
: ${OUT:?$_usage}
: ${A:?$_usage}
: ${B:?$_usage}
: ${C:?$_usage}
: ${D:?$_usage}

RATE=30

AB=$(calc "$B-$A")
BC=$(calc "$C-$B")
CD=$(calc "$D-$C")

# scratch dir
scratch=tmp.$$
mkdir -p $scratch

if (( $(bc <<< "$AB > 0.0") )); then
  log "Extracting part-1: from $A to $B ($AB)"
  ffmpeg -loglevel error -ss $A -t $AB -i $IN -r $RATE -strict -2 $scratch/part-1.mp4
fi

if (( $(bc <<< "$BC > 0.0") )); then
  log "Extracting part-2: from $B to $C ($BC) and slow it down 8x"
  ffmpeg -loglevel error -ss $B -t $BC -i $IN -filter_complex "[0:v]setpts=8.0*PTS[v];[0:a]asetrate=5512.5,aresample=44100[a]" -map "[v]" -map "[a]" -r $RATE -strict -2 $scratch/part-2.mp4
fi

if (( $(bc <<< "$CD > 0.0") )); then
  log "Extracting part-3: from $C to $D ($CD)"
  ffmpeg -loglevel error -ss $C -t $CD -i $IN -r $RATE -strict -2 $scratch/part-3.mp4
fi

log "Concat all parts, output to $OUT"
ffmpeg -loglevel error -y -f concat -i <(for f in $scratch/part-*.mp4; do echo "file '$PWD/$f'"; done) -c copy $OUT

rm -rf $scratch
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28074613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档