Spaces:
Sleeping
Sleeping
Update pipelines/video_process.py
Browse files- pipelines/video_process.py +33 -8
pipelines/video_process.py
CHANGED
@@ -1,13 +1,23 @@
|
|
1 |
import subprocess
|
|
|
2 |
|
3 |
def extract_audio_ffmpeg(in_video, out_audio="temp_audio.wav"):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4 |
cmd = [
|
5 |
"ffmpeg", "-y",
|
6 |
"-i", in_video,
|
7 |
-
"-vn",
|
8 |
"-acodec", "pcm_s16le",
|
9 |
-
"-ar", "16000",
|
10 |
-
"-ac", "1",
|
11 |
out_audio
|
12 |
]
|
13 |
result = subprocess.run(cmd, capture_output=True)
|
@@ -15,13 +25,28 @@ def extract_audio_ffmpeg(in_video, out_audio="temp_audio.wav"):
|
|
15 |
raise RuntimeError(f"FFmpeg audio extraction failed: {result.stderr.decode()}")
|
16 |
return out_audio
|
17 |
|
|
|
18 |
def apply_edits(original_video, edit_instructions):
|
19 |
"""
|
20 |
-
|
21 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
22 |
"""
|
23 |
-
# parse
|
24 |
-
#
|
|
|
25 |
out_path = "edited_video.mp4"
|
26 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
27 |
return out_path
|
|
|
1 |
import subprocess
|
2 |
+
import os
|
3 |
|
4 |
def extract_audio_ffmpeg(in_video, out_audio="temp_audio.wav"):
|
5 |
+
"""
|
6 |
+
Extracts the audio track from the given video file using FFmpeg.
|
7 |
+
Saves it to the specified WAV file.
|
8 |
+
|
9 |
+
:param in_video: Path to the input video file (e.g., MP4).
|
10 |
+
:param out_audio: Path to the output WAV file.
|
11 |
+
:return: The path to the output WAV file (same as out_audio).
|
12 |
+
:raises RuntimeError: If the ffmpeg command fails.
|
13 |
+
"""
|
14 |
cmd = [
|
15 |
"ffmpeg", "-y",
|
16 |
"-i", in_video,
|
17 |
+
"-vn", # disable video
|
18 |
"-acodec", "pcm_s16le",
|
19 |
+
"-ar", "16000", # sample rate
|
20 |
+
"-ac", "1", # mono
|
21 |
out_audio
|
22 |
]
|
23 |
result = subprocess.run(cmd, capture_output=True)
|
|
|
25 |
raise RuntimeError(f"FFmpeg audio extraction failed: {result.stderr.decode()}")
|
26 |
return out_audio
|
27 |
|
28 |
+
|
29 |
def apply_edits(original_video, edit_instructions):
|
30 |
"""
|
31 |
+
Applies editing instructions (e.g., cut segments, transitions) to the original video
|
32 |
+
and produces a final edited video file named 'edited_video.mp4'.
|
33 |
+
|
34 |
+
:param original_video: Path to the original video file.
|
35 |
+
:param edit_instructions: JSON/dict specifying which segments to keep,
|
36 |
+
transitions, or other advanced edits.
|
37 |
+
:return: Path to the newly created 'edited_video.mp4'.
|
38 |
+
:raises RuntimeError: If ffmpeg or any editing command fails.
|
39 |
"""
|
40 |
+
# In a real implementation, you'd parse 'edit_instructions' to build an ffmpeg
|
41 |
+
# filter or a concat script. For now, we'll just return a placeholder path.
|
42 |
+
|
43 |
out_path = "edited_video.mp4"
|
44 |
+
|
45 |
+
# Example placeholder: direct copy (no edits).
|
46 |
+
# cmd = ["ffmpeg", "-y", "-i", original_video, "-c", "copy", out_path]
|
47 |
+
# result = subprocess.run(cmd, capture_output=True)
|
48 |
+
# if result.returncode != 0:
|
49 |
+
# raise RuntimeError(f"FFmpeg editing error: {result.stderr.decode()}")
|
50 |
+
|
51 |
+
# Return the output path (in a real scenario, ensure the final file is actually created).
|
52 |
return out_path
|