smart-edit-assistant / pipelines /video_process.py
mgbam's picture
Update pipelines/video_process.py
a5cec01 verified
raw
history blame
2.05 kB
import subprocess
import os
def extract_audio_ffmpeg(in_video, out_audio="temp_audio.wav"):
"""
Extracts the audio track from the given video file using FFmpeg.
Saves it to the specified WAV file.
:param in_video: Path to the input video file (e.g., MP4).
:param out_audio: Path to the output WAV file.
:return: The path to the output WAV file (same as out_audio).
:raises RuntimeError: If the ffmpeg command fails.
"""
cmd = [
"ffmpeg", "-y",
"-i", in_video,
"-vn", # disable video
"-acodec", "pcm_s16le",
"-ar", "16000", # sample rate
"-ac", "1", # mono
out_audio
]
result = subprocess.run(cmd, capture_output=True)
if result.returncode != 0:
raise RuntimeError(f"FFmpeg audio extraction failed: {result.stderr.decode()}")
return out_audio
def apply_edits(original_video, edit_instructions):
"""
Applies editing instructions (e.g., cut segments, transitions) to the original video
and produces a final edited video file named 'edited_video.mp4'.
:param original_video: Path to the original video file.
:param edit_instructions: JSON/dict specifying which segments to keep,
transitions, or other advanced edits.
:return: Path to the newly created 'edited_video.mp4'.
:raises RuntimeError: If ffmpeg or any editing command fails.
"""
# In a real implementation, you'd parse 'edit_instructions' to build an ffmpeg
# filter or a concat script. For now, we'll just return a placeholder path.
out_path = "edited_video.mp4"
# Example placeholder: direct copy (no edits).
# cmd = ["ffmpeg", "-y", "-i", original_video, "-c", "copy", out_path]
# result = subprocess.run(cmd, capture_output=True)
# if result.returncode != 0:
# raise RuntimeError(f"FFmpeg editing error: {result.stderr.decode()}")
# Return the output path (in a real scenario, ensure the final file is actually created).
return out_path