File size: 1,546 Bytes
c6abe34
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44

import os
import subprocess
import glob

def fix_videos():
    annotated_dir = "output_videos/annotated"
    if not os.path.exists(annotated_dir):
        print("No annotated videos directory found.")
        return

    videos = glob.glob(os.path.join(annotated_dir, "*.mp4"))
    print(f"Found {len(videos)} annotated videos. Checking codecs...")

    for video_path in videos:
        try:
            # Check codec with ffprobe
            cmd_check = [
                'ffprobe', '-v', 'error', '-select_streams', 'v:0',
                '-show_entries', 'stream=codec_name', '-of',
                'default=noprint_wrappers=1:nokey=1', video_path
            ]
            codec = subprocess.check_output(cmd_check).decode().strip()
            
            if codec == 'mpeg4':
                print(f"Fixing {video_path} (codec: {codec})...")
                temp_path = video_path + ".fix.mp4"
                cmd_fix = [
                    'ffmpeg', '-y', '-i', video_path,
                    '-c:v', 'libx264', '-pix_fmt', 'yuv420p',
                    '-preset', 'ultrafast', '-crf', '23',
                    temp_path
                ]
                subprocess.run(cmd_fix, capture_output=True, check=True)
                os.replace(temp_path, video_path)
                print(f"✅ Fixed {video_path}")
            else:
                print(f"Skipping {video_path} (codec: {codec})")
        except Exception as e:
            print(f"❌ Failed to process {video_path}: {e}")

if __name__ == "__main__":
    fix_videos()