FFMPEG 输出视频播放从 10 秒开始

FFMPEG Output Video Playback Starts at 10 Seconds

我制作了一个 Python 脚本,其任务是获取一个视频文件并将其拆分为多个单独的视频,每个视频 60 秒。 这是代码。

import os
import datetime
import subprocess

FILENAME = "SomeFile.mp4"
SECS_PER_VIDEO = 60

def add_secs(time, secs):
    dummy_datetime = datetime.datetime(1, 1, 1, time.hour, time.minute, time.second)
    dummy_datetime += datetime.timedelta(seconds = secs)
    return dummy_datetime.time()

def get_duration(filename):
    duration = subprocess.run(f"ffprobe -i \"{filename}\" -show_entries format=duration -v quiet -of csv=\"p=0\"", stdout=subprocess.PIPE)
    duration = duration.stdout
    duration = duration.decode("utf-8")[:len(duration)-2]
    duration = float(duration)
    return duration


num_of_videos = int(get_duration(FILENAME) // SECS_PER_VIDEO)
init = datetime.time(hour=0, minute=0, second=0)
folder_name = FILENAME[:len(FILENAME)-4]
if not os.path.isdir(folder_name):
    os.mkdir(folder_name)

for i in range(num_of_videos):
    print(f"Part {i}")
    os.system(f"ffmpeg -i \"{FILENAME}\" -ss {str(init)} -codec copy -t {SECS_PER_VIDEO} \"{folder_name}/{str(i+1)}_{FILENAME}\"")
    print("")
    init = add_secs(init, SECS_PER_VIDEO)

print(f"Split Into: {num_of_videos}")

示例 ffmpeg 调用:

ffmpeg -i "SomeFile.mp4" -ss 01:49:00 -codec copy -t 60 "SomeFile/110_SomeFile.mp4"

脚本工作正常,但是当我播放任何输出文件时,VLC 在第一个 10 秒内跳过所有帧并从 00:00:10.

开始播放

脚本有什么问题?

@Harshit 这会奏效:下一个视频的参数顺序为 60 秒:

ffmpeg -i "SomeFile.mp4" -ss 01:49:00.000   -t 60.000 -c copy  -dn -map_metadata -1 -map_chapters -1 "video_60seconds.mp4"
  • dn 文件中没有复制数据
  • map_metadata -1 从元数据中删除所有数据,这可能是问题的负责人,因此删除所有数据是个好主意
  • ss 01:49:00.000 t 60.000(为毫秒添加 000 个零)