Fix: Resolve NameError in utils.py; Refactor: Switch to subprocess calls and update spec file; Docs: Mark packaging complete
This commit is contained in:
@@ -79,7 +79,7 @@ Based on the "DaVinci Resolve 18 Supported Codec List.pdf" and web search result
|
|||||||
5. **`ffmpeg` Execution:** Use `subprocess.run()` to execute the `ffmpeg` command, capturing stdout/stderr for logging.
|
5. **`ffmpeg` Execution:** Use `subprocess.run()` to execute the `ffmpeg` command, capturing stdout/stderr for logging.
|
||||||
6. **Error Handling:** Add `try-except` blocks for file operations, `subprocess` calls, and `ffprobe` parsing.
|
6. **Error Handling:** Add `try-except` blocks for file operations, `subprocess` calls, and `ffprobe` parsing.
|
||||||
7. **Basic Testing:** Test with a few sample video files (e.g., H.264/AAC MP4) to ensure conversion to DNxHR/PCM MOV works.
|
7. **Basic Testing:** Test with a few sample video files (e.g., H.264/AAC MP4) to ensure conversion to DNxHR/PCM MOV works.
|
||||||
8. **Packaging and Bundling:** Use PyInstaller (or similar) to create standalone executables for target operating systems. This step will involve bundling the Python script, its dependencies, and the `ffmpeg`/`ffprobe` binaries. Note that packaging will be OS-specific (e.g., a Linux executable must be built on Linux).
|
8. **Packaging and Bundling:** (Completed) Used PyInstaller to create a standalone executable, bundling `ffmpeg` and `ffprobe` binaries. This involved switching from `ffmpeg-python` to direct `subprocess` calls to resolve bundling issues. The executable is now functional.
|
||||||
9. **Error Handling for Bundled Tools:** Implement checks to ensure bundled `ffmpeg`/`ffprobe` are accessible and provide clear error messages if not.
|
9. **Error Handling for Bundled Tools:** Implement checks to ensure bundled `ffmpeg`/`ffprobe` are accessible and provide clear error messages if not.
|
||||||
|
|
||||||
## 6. Directory and File Structure
|
## 6. Directory and File Structure
|
||||||
|
|||||||
11
src/utils.py
11
src/utils.py
@@ -3,10 +3,11 @@ import json
|
|||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
from src import config # Import config module
|
||||||
|
|
||||||
def get_video_info(file_path):
|
def get_video_info(file_path):
|
||||||
"""Uses ffprobe to get detailed information about a video file."""
|
|
||||||
command = [
|
command = [
|
||||||
'ffprobe',
|
config.FFPROBE_PATH,
|
||||||
'-v', 'error',
|
'-v', 'error',
|
||||||
'-select_streams', 'v:0',
|
'-select_streams', 'v:0',
|
||||||
'-show_entries', 'stream=codec_name,width,height,avg_frame_rate,duration_ts,bit_rate,pix_fmt',
|
'-show_entries', 'stream=codec_name,width,height,avg_frame_rate,duration_ts,bit_rate,pix_fmt',
|
||||||
@@ -33,10 +34,10 @@ def get_video_info(file_path):
|
|||||||
def get_audio_info(file_path):
|
def get_audio_info(file_path):
|
||||||
"""Uses ffprobe to get detailed information about an audio stream in a video file."""
|
"""Uses ffprobe to get detailed information about an audio stream in a video file."""
|
||||||
command = [
|
command = [
|
||||||
'ffprobe',
|
config.FFPROBE_PATH,
|
||||||
'-v', 'error',
|
'-v', 'error',
|
||||||
'-select_streams', 'v:0',
|
'-select_streams', 'a:0',
|
||||||
'-show_entries', 'stream=codec_name,width,height,avg_frame_rate,duration_ts,bit_rate,pix_fmt',
|
'-show_entries', 'stream=codec_name,sample_rate,channels,bit_rate',
|
||||||
'-of', 'json',
|
'-of', 'json',
|
||||||
file_path
|
file_path
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -6,12 +6,11 @@ a = Analysis(['src/main.py'],
|
|||||||
pathex=['/home/joe/Cloud9/Documents/Obisdian/projects/Video Converter'],
|
pathex=['/home/joe/Cloud9/Documents/Obisdian/projects/Video Converter'],
|
||||||
binaries=[('/usr/bin/ffmpeg', '.'), ('/usr/bin/ffprobe', '.')],
|
binaries=[('/usr/bin/ffmpeg', '.'), ('/usr/bin/ffprobe', '.')],
|
||||||
datas=[],
|
datas=[],
|
||||||
hiddenimports=['ffmpeg.nodes', 'ffmpeg._utils', 'ffmpeg._run'],
|
hiddenimports=[],
|
||||||
hookspath=[],
|
hookspath=[],
|
||||||
hooksconfig={},
|
hooksconfig={},
|
||||||
runtime_hooks=[],
|
runtime_hooks=[],
|
||||||
excludes=[],
|
excludes=[],
|
||||||
collect_submodules=['ffmpeg'],
|
|
||||||
win_no_prefer_redirects=False,
|
win_no_prefer_redirects=False,
|
||||||
win_private_assemblies=False,
|
win_private_assemblies=False,
|
||||||
cipher=block_cipher,
|
cipher=block_cipher,
|
||||||
|
|||||||
Reference in New Issue
Block a user