У меня есть скрипт Python, который автоматизирует обрезку большого видео (2 часа) на более мелкие сегменты, а затем объединяет их без повторного кодирования, чтобы ускорить процесс. Скрипт выполняет следующие команды ffmpeg:
import subprocess
# Extract chunks
segments = [(0, 300), (300, 600), (600, 900)] # example segments in seconds
for i, (start, length) in enumerate(segments):
subprocess.run([
"ffmpeg", "-i", "input.mp4", "-ss", str(start), "-t", str(length),
"-c", "copy", "-reset_timestamps", "1", "-y", f"chunk_{i}.mp4"
], check=True)
# Create concat list
with open("list.txt", "w") as f:
for i in range(len(segments)):
f.write(f"file 'chunk_{i}.mp4'\n")
# Concatenate
subprocess.run([
"ffmpeg", "-f", "concat", "-safe", "0",
"-i", "list.txt", "-c", "copy", "-y", "merged_output.mp4"
], check=True)
Все фрагменты взяты из одного и того же исходного видео с одинаковыми кодеками, разрешением и битрейтом. Несмотря на это, в финальном файле merged_output.mp4 иногда звук не синхронизирован, особенно после первого фрагмента.
Я пробовал использовать -ss перед -i для вырезания ключевых кадров, но проблема сохраняется. Вопрос: Как я могу обеспечить правильную синхронизацию A/V в окончательном объединенном видео при программном сегментировании и объединении через ffmpeg без полного перекодирования? Есть ли способ настроить команды или процесс ffmpeg, чтобы избежать десинхронизации звука?
У меня есть скрипт Python, который автоматизирует обрезку большого видео (2 часа) на более мелкие сегменты, а затем объединяет их без повторного кодирования, чтобы ускорить процесс. Скрипт выполняет следующие команды ffmpeg: [code]import subprocess
# Extract chunks segments = [(0, 300), (300, 600), (600, 900)] # example segments in seconds for i, (start, length) in enumerate(segments): subprocess.run([ "ffmpeg", "-i", "input.mp4", "-ss", str(start), "-t", str(length), "-c", "copy", "-reset_timestamps", "1", "-y", f"chunk_{i}.mp4" ], check=True)
# Create concat list with open("list.txt", "w") as f: for i in range(len(segments)): f.write(f"file 'chunk_{i}.mp4'\n")
# Concatenate subprocess.run([ "ffmpeg", "-f", "concat", "-safe", "0", "-i", "list.txt", "-c", "copy", "-y", "merged_output.mp4" ], check=True) [/code] Все фрагменты взяты из одного и того же исходного видео с одинаковыми кодеками, разрешением и битрейтом. Несмотря на это, в финальном файле merged_output.mp4 иногда звук не синхронизирован, особенно после первого фрагмента. Я пробовал использовать -ss перед -i для вырезания ключевых кадров, но проблема сохраняется. [b]Вопрос[/b]: Как я могу обеспечить правильную синхронизацию A/V в окончательном объединенном видео при программном сегментировании и объединении через ffmpeg без полного перекодирования? Есть ли способ настроить команды или процесс ffmpeg, чтобы избежать десинхронизации звука?