首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从大型视频bash中选择子剪辑并创建输出文件名。

从大型视频bash中选择子剪辑并创建输出文件名。
EN

Stack Overflow用户
提问于 2018-06-29 17:13:19
回答 1查看 214关注 0票数 0

我在Mac终端上使用bash命令。对于目录中的250个.mp4文件,我需要创建一个新的输出文件,该文件从每个输入文件中提取4个子剪辑:第一个子剪辑(从第二个子剪辑(从第二个子剪辑到第二个)、第二个子剪辑(在输入文件的33%阶段上的10秒)、第三个子剪辑(在输入文件的66%上的10秒)和第四个子剪辑(从输入文件结束前30秒开始的10秒)。每个输入文件的长度不同,大约为10-15分钟。

我尝试使用一个inputfile,下面的bash脚本可以工作:

代码语言:javascript
复制
#!/bin/bash
for file in *.mp4; do ffmpeg -i "$file" -vf "select='between(t, 10, 20) + between(t, 197, 207) + between(t, 393, 403) + between(t, 570,580)',
setpts=N/FRAME_RATE/TB" -qscale 0 -af "aselect='between(t, 10, 20) + 
between(t, 197, 207) + between(t, 393, 403) + between(t, 570, 580)', 
asetpts=N/SR/TB" outputfile.mp4; done

但是,我不知道如何在250个mp4文件上循环它。具体来说,我有两个问题:

  1. 上面的代码显示了我从用于测试代码的inputfile中手动检查的特定秒。我需要根据上面的时间自动化代码。
  2. 将输出文件命名为inputfile,但添加"_1“后缀

总之,我有一个包含10-15分钟长的inputfile的目录:

代码语言:javascript
复制
inputfile1.mp4
inputfile2.mp4
inputfile3.mp4
.......
inputfile250.mp4

我希望将inputfile和outputfile放在一起的目录:

代码语言:javascript
复制
inputfile1.mp4
inputfile1_1.mp4 #this is 40 seconds long
inputfile2.mp4
inputfile2_1.mp4 #this is 40 seconds long
inputfile3.mp4
inputfile3_1.mp4 #this is 40 seconds long
.......
inputfile250.mp4
inputfile250_1.mp4 #this is 40 seconds long

先谢谢你。

EN

回答 1

Stack Overflow用户

发布于 2018-06-29 20:11:40

制造是一条单线线,不能提高可读性.

所以,你要做的是:

代码语言:javascript
复制
#!/bin/bash
for file in *.mp4; do
    ffmpeg -i "$file" \
        -vf "select='between(t, 10, 20) \
        + between(t, 197, 207) + between(t, 393, 403) \
        + between(t, 570,580)', \
        setpts=N/FRAME_RATE/TB" \
        -qscale 0 \ 
        -af "aselect='between(t, 10, 20) \
        + between(t, 197, 207) \
        + between(t, 393, 403) \
        + between(t, 570, 580)', \
        asetpts=N/SR/TB" \
        outputfile.mp4
done

详细说明:

代码语言:javascript
复制
for file in *.mp4; do

这意味着您将对目录中的每个文件执行ffmpeg。正如Shelter所指出的,这实际上是遍历所有不同的文件。但是,由于您正在写入一个固定的文件名(outputfile.mp4),所以只剩下一个输出文件:循环中最后一个mp4的缩短版本。

因此,如果您将输出写入不同的文件,您将看到,实际上,对所有输入文件都执行了ffmpeg

如果您对循环不确定,请尝试插入echos来告诉您发生了什么。

至于输出文件的变量:${file%.mp4}_1.mp4可能可以。

因此,这意味着:

代码语言:javascript
复制
#!/bin/bash
for file in *.mp4; do
    outputfile=${file%.mp4}_1.mp4
    echo "Doing $file -> $outputfile"
    # the ffmpeg command
done
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51106599

复制
相关文章

相似问题

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