Kal*_*lai 457 linux video ffmpeg video-editing
我尝试使用以下命令使用视频的开始和结束时间剪切视频
ffmpeg -ss 00:00:03 -t 00:00:08 -i movie.mp4 -acodec copy -vcodec copy -async 1 cut.mp4
通过使用上面的命令,我想将视频剪切00:00:03为00:00:08.但它并没有在这些时间之间切断视频,而是在前11秒内切断视频.任何人都可以帮我解决这个问题吗?
编辑1:
ffmpeg -i movie.mp4 -ss 00:00:03 -t 00:00:08 -async 1 cut.mp4
但它显示以下错误.
编码器'aac'是实验性的,但未启用实验编解码器
所以我添加-strict -2到命令,即,
ffmpeg -i movie.mp4 -ss 00:00:03 -t 00:00:08 -async 1 -strict -2 cut.mp4
现在工作正常.
mar*_*k4o 507
您可能在3秒标记处没有关键帧.由于非关键帧编码与其他帧的差异,因此它们需要从前一个关键帧开始的所有数据.
使用mp4容器,可以在非关键帧处进行剪切,而无需使用编辑列表进行重新编码.换句话说,如果3s之前的最近的关键帧是0,则它将从0开始复制视频并使用编辑列表告诉玩家开始播放3秒.
如果您使用的是来自git master 的最新ffmpeg,则在使用您提供的命令调用时,将使用编辑列表执行此操作.如果这不适合您,那么您可能要么使用较旧版本的ffmpeg,要么您的播放器不支持编辑列表.有些玩家会忽略编辑列表,并始终从头到尾播放文件中的所有媒体.
如果你想精确地从非关键帧开始剪切并希望它从不支持编辑列表的播放器上的所需点开始播放,或者想要确保剪切部分实际上不在输出文件中(例如如果它包含机密信息),那么你可以通过重新编码来做到这一点,以便在所需的开始时间精确地存在一个关键帧.如果未指定,则重新编码是默认值copy.例如:
ffmpeg -i movie.mp4 -ss 00:00:03 -t 00:00:08 -async 1 cut.mp4
重新编码时,您可能还希望包含其他与质量相关的选项或特定的AAC编码器.有关详细信息,请参阅ffmpeg的用于视频的x264编码指南和用于音频的AAC编码指南.
此外,该-t选项指定持续时间,而不是结束时间.上面的命令将编码从3s开始的8s视频.从3s开始到8s结束使用-t 5.如果您使用的是当前版本的ffmpeg,您也可以在上面的命令中替换-t为-to在指定时间结束.
Geo*_*oub 341
试试这个.这是我发现的最快,最好的方式:
 ffmpeg -ss 00:01:00 -i input.mp4 -to 00:02:00 -c copy output.mp4
此命令可在几秒钟内修剪您的视频!
我在我的博客上解释过:
-i:指定输入文件.在这种情况下,它是(input.mp4).
-ss:与-i一起使用,它在输入文件(input.mp4)中寻找位置.
00:01:00:这是您的剪辑视频开始的时间.
-to:指定从开始(00:01:40)到结束(00:02:12)的持续时间.
00:02:00:这是您的剪裁视频结束的时间.
-c copy:这是一个通过流复制修剪的选项.(NB:非常快)
时间格式为:hh:mm:ss
请注意,目前高度响应的答案已经过时,修剪速度非常慢.有关更多信息,请查看此官方ffmpeg 文章.
Vla*_*sky 82
ffmpeg -i movie.mp4 -ss 00:00:03 -t 00:00:08 -async 1 -c copy cut.mp4 
立即使用-c copy for make.在这种情况下,ffmpeg不会重新编码视频,只会根据大小进行切割.
小智 27
    ffmpeg -i movie.mp4 -vf trim=3:8 cut.mp4
删除除第二个3到第二个8之外的所有内容.
alp*_*per 24
这是我使用的,只需几秒钟即可运行:
ffmpeg -i input.mp4 -ss 01:19:27 -to 02:18:51 -c:v copy -c:a copy output.mp4
参考:https : //www.arj.no/2018/05/18/trimvideo
生成的mp4文件也可以在iMovie. 有关使用get_duration(input_video)模型获取完整持续时间的更多信息。
如果要连接多个过场动画,可以使用以下 Python 脚本:
#!/usr/bin/env python3
import subprocess
def get_duration(input_video):
    cmd = ["ffprobe", "-i", input_video, "-show_entries", "format=duration",
           "-v", "quiet", "-sexagesimal", "-of", "csv=p=0"]
    return subprocess.check_output(cmd).decode("utf-8").strip()
if __name__ == "__main__":
    name = "input.mkv"
    times = []
    times.append(["00:00:00", "00:00:10"])
    times.append(["00:06:00", "00:07:00"])
    # times = [["00:00:00", get_duration(name)]]
    if len(times) == 1:
        time = times[0]
        cmd = ["ffmpeg", "-i", name, "-ss", time[0], "-to", time[1], "-c:v", "copy", "-c:a", "copy", "output.mp4"]
        subprocess.check_output(cmd)
    else:
        open('concatenate.txt', 'w').close()
        for idx, time in enumerate(times):
            output_filename = f"output{idx}.mp4"
            cmd = ["ffmpeg", "-i", name, "-ss", time[0], "-to", time[1], "-c:v", "copy", "-c:a", "copy", output_filename]
            subprocess.check_output(cmd)
            with open("concatenate.txt", "a") as myfile:
                myfile.write(f"file {output_filename}\n")
        cmd = ["ffmpeg", "-f", "concat", "-i", "concatenate.txt", "-c", "copy", "output.mp4"]
        output = subprocess.check_output(cmd).decode("utf-8").strip()
示例脚本将剪切和合并00:00:00 - 00:00:10和之间的场景00:06:00 - 00:07:00。
如果您想剪切完整的视频(如果您想将mkv格式转换为mp4),只需取消注释以下行:
# times = [["00:00:00", get_duration(name)]]
Rya*_*efi 16
要基于源视频的开始时间和结束时间进行剪切并且避免进行数学运算,请指定结束时间作为输入选项,并指定开始时间作为输出选项。
ffmpeg -t 1:00 -i input.mpg -ss 45 output.mpg
这将在0:45到1:00之间产生15秒的切换。
这是因为,当将when -ss用作输出选项时,丢弃的时间仍包含在从输入读取的总时间中,该时间-t用来知道何时停止。而如果-ss将其作为输入选项,则会寻找开始时间而不是开始时间,这是造成混乱的原因。
这比查找要慢,因为省略的段在丢弃之前仍会进行处理,但是据我所知,这是唯一的方法。如果要从一个大文件中深切,则最好进行数学运算并将其-ss用于输入。
| 归档时间: | 
 | 
| 查看次数: | 371825 次 | 
| 最近记录: |