Commit 0ca06e49 by mohammed.shibili

first

parents
# Default ignored files
/shelf/
/workspace.xml
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/venv" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
\ No newline at end of file
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="PyPep8NamingInspection" enabled="true" level="WEAK WARNING" enabled_by_default="true">
<option name="ignoredErrors">
<list>
<option value="N801" />
</list>
</option>
</inspection_tool>
</profile>
</component>
\ No newline at end of file
<component name="InspectionProjectProfileManager">
<settings>
<option name="USE_PROJECT_PROFILE" value="false" />
<version value="1.0" />
</settings>
</component>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.9 (designPatterns)" project-jdk-type="Python SDK" />
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/designPatterns.iml" filepath="$PROJECT_DIR$/.idea/designPatterns.iml" />
</modules>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>
\ No newline at end of file
import pathlib
from abc import ABC, abstractmethod
class VideoExporter(ABC):
@abstractmethod
def prepare_export(self, video_data):
@abstractmethod
def do_export(self, folder: pathlib.Path):
"""Exports the video data to a folder."""
class LosslessVideoExporter(VideoExporter):
def prepare_export(self, video_data):
print("Preparing video data for lossless export.")
def do_export(self, folder: pathlib.Path):
print(f"Exporting video data in lossless format to {folder}.")
class H264BPVideoExporter(VideoExporter):
def prepare_export(self, video_data):
print("Preparing video data for H.264 (Baseline) export.")
def do_export(self, folder: pathlib.Path):
print(f"Exporting video data in H.264 (Baseline) format to {folder}.")
class H264Hi422PVideoExporter(VideoExporter):
def prepare_export(self, video_data):
print("Preparing video data for H.264 (Hi422P) export.")
def do_export(self, folder: pathlib.Path):
print(f"Exporting video data in H.264 (Hi422P) format to {folder}.")
class AudioExporter(ABC):
@abstractmethod
def prepare_export(self, audio_data):
@abstractmethod
def do_export(self, folder: pathlib.Path):
class AACAudioExporter(AudioExporter):
def prepare_export(self, audio_data):
print("Preparing audio data for AAC export.")
def do_export(self, folder: pathlib.Path):
print(f"Exporting audio data in AAC format to {folder}.")
class WAVAudioExporter(AudioExporter):
def prepare_export(self, audio_data):
print("Preparing audio data for WAV export.")
def do_export(self, folder: pathlib.Path):
print(f"Exporting audio data in WAV format to {folder}.")
class ExporterFactory(ABC):
@abstractmethod
def get_video_exporter(self) -> VideoExporter:
@abstractmethod
def get_audio_exporter(self) -> AudioExporter:
class FastExporter(ExporterFactory):
def get_video_exporter(self) -> VideoExporter:
return H264BPVideoExporter()
def get_audio_exporter(self) -> AudioExporter:
return AACAudioExporter()
class HighQualityExporter(ExporterFactory):
def get_video_exporter(self) -> VideoExporter:
return H264Hi422PVideoExporter()
def get_audio_exporter(self) -> AudioExporter:
return AACAudioExporter()
class MasterQualityExporter(ExporterFactory):
def get_video_exporter(self) -> VideoExporter:
return LosslessVideoExporter()
def get_audio_exporter(self) -> AudioExporter:
return WAVAudioExporter()
def read_factory() -> ExporterFactory:
factories = {
"low": FastExporter(),
"high": HighQualityExporter(),
"master": MasterQualityExporter(),
}
while True:
export_quality = input("Enter desired output quality (low, high, master): ")
if export_quality in factories:
return factories[export_quality]
print(f"Unknown output quality option: {export_quality}.")
def main(fac: ExporterFactory) -> None:
# retrieve the exporters
video_exporter = fac.get_video_exporter()
audio_exporter = fac.get_audio_exporter()
# prepare the export
video_exporter.prepare_export("placeholder_for_video_data")
audio_exporter.prepare_export("placeholder_for_audio_data")
# do the export
folder = pathlib.Path("/usr/tmp/video")
video_exporter.do_export(folder)
audio_exporter.do_export(folder)
if __name__ == "__main__":
# create the factory
factory = read_factory()
# perform the exporting job
main(factory)
\ No newline at end of file
"""
Basic video exporting example
"""
import pathlib
from abc import ABC, abstractmethod
class VideoExporter(ABC):
"""Basic representation of video exporting codec."""
@abstractmethod
def prepare_export(self, video_data):
"""Prepares video data for exporting."""
@abstractmethod
def do_export(self, folder: pathlib.Path):
"""Exports the video data to a folder."""
class LosslessVideoExporter(VideoExporter):
"""Lossless video exporting codec."""
def prepare_export(self, video_data):
print("Preparing video data for lossless export.")
def do_export(self, folder: pathlib.Path):
print(f"Exporting video data in lossless format to {folder}.")
class H264BPVideoExporter(VideoExporter):
"""H.264 video exporting codec with Baseline profile."""
def prepare_export(self, video_data):
print("Preparing video data for H.264 (Baseline) export.")
def do_export(self, folder: pathlib.Path):
print(f"Exporting video data in H.264 (Baseline) format to {folder}.")
class H264Hi422PVideoExporter(VideoExporter):
"""H.264 video exporting codec with Hi422P profile (10-bit, 4:2:2 chroma sampling)."""
def prepare_export(self, video_data):
print("Preparing video data for H.264 (Hi422P) export.")
def do_export(self, folder: pathlib.Path):
print(f"Exporting video data in H.264 (Hi422P) format to {folder}.")
class AudioExporter(ABC):
"""Basic representation of audio exporting codec."""
@abstractmethod
def prepare_export(self, audio_data):
"""Prepares audio data for exporting."""
@abstractmethod
def do_export(self, folder: pathlib.Path):
"""Exports the audio data to a folder."""
class AACAudioExporter(AudioExporter):
"""AAC audio exporting codec."""
def prepare_export(self, audio_data):
print("Preparing audio data for AAC export.")
def do_export(self, folder: pathlib.Path):
print(f"Exporting audio data in AAC format to {folder}.")
class WAVAudioExporter(AudioExporter):
"""WAV (lossless) audio exporting codec."""
def prepare_export(self, audio_data):
print("Preparing audio data for WAV export.")
def do_export(self, folder: pathlib.Path):
print(f"Exporting audio data in WAV format to {folder}.")
def main() -> None:
"""Main function."""
# read the desired export quality
export_quality: str
while True:
export_quality = input("Enter desired output quality (low, high, master): ")
if export_quality in {"low", "high", "master"}:
break
print(f"Unknown output quality option: {export_quality}.")
# create the video and audio exporters
video_exporter: VideoExporter
audio_exporter: AudioExporter
if export_quality == "low":
video_exporter = H264BPVideoExporter()
audio_exporter = AACAudioExporter()
elif export_quality == "high":
video_exporter = H264Hi422PVideoExporter()
audio_exporter = AACAudioExporter()
else:
# default: master quality
video_exporter = LosslessVideoExporter()
audio_exporter = WAVAudioExporter()
# prepare the export
video_exporter.prepare_export("placeholder_for_video_data")
audio_exporter.prepare_export("placeholder_for_audio_data")
# do the export
folder = pathlib.Path("/usr/tmp/video")
video_exporter.do_export(folder)
audio_exporter.do_export(folder)
if __name__ == "__main__":
main()
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment