8
8
from typing import Any
9
9
10
10
import av
11
- from av import AudioResampler
11
+ from av import AudioResampler , Codec
12
12
13
13
from auto_editor .ffwrapper import FileInfo , initFileInfo
14
14
from auto_editor .lib .contracts import is_int , is_str
@@ -81,14 +81,21 @@ def set_video_codec(
81
81
return codec
82
82
83
83
if codec == "copy" :
84
+ log .deprecated ("The `copy` codec is deprecated. auto-editor always re-encodes" )
84
85
if src is None :
85
86
log .error ("No input to copy its codec from." )
86
87
if not src .videos :
87
88
log .error ("Input file does not have a video stream to copy codec from." )
88
89
codec = src .videos [0 ].codec
89
90
90
91
if ctr .vcodecs is not None and codec not in ctr .vcodecs :
91
- log .error (codec_error .format (codec , out_ext ))
92
+ try :
93
+ cobj = Codec (codec , "w" )
94
+ except av .codec .codec .UnknownCodecError :
95
+ log .error (f"Unknown encoder: { codec } " )
96
+ # Normalize encoder names
97
+ if cobj .id not in (Codec (x , "w" ).id for x in ctr .vcodecs ):
98
+ log .error (codec_error .format (codec , out_ext ))
92
99
93
100
return codec
94
101
@@ -101,26 +108,30 @@ def set_audio_codec(
101
108
codec = "aac"
102
109
else :
103
110
codec = src .audios [0 ].codec
104
- ctx = av .Codec (codec )
105
- if ctx .audio_formats is None :
111
+ if av .Codec (codec , "w" ).audio_formats is None :
106
112
codec = "aac"
107
113
if codec not in ctr .acodecs and ctr .default_aud != "none" :
108
114
codec = ctr .default_aud
109
- if codec == "mp3float" :
110
- codec = "mp3"
111
115
if codec is None :
112
116
codec = "aac"
113
117
return codec
114
118
115
119
if codec == "copy" :
120
+ log .deprecated ("The `copy` codec is deprecated. auto-editor always re-encodes" )
116
121
if src is None :
117
122
log .error ("No input to copy its codec from." )
118
123
if not src .audios :
119
124
log .error ("Input file does not have an audio stream to copy codec from." )
120
125
codec = src .audios [0 ].codec
121
126
122
127
if ctr .acodecs is None or codec not in ctr .acodecs :
123
- log .error (codec_error .format (codec , out_ext ))
128
+ try :
129
+ cobj = Codec (codec , "w" )
130
+ except av .codec .codec .UnknownCodecError :
131
+ log .error (f"Unknown encoder: { codec } " )
132
+ # Normalize encoder names
133
+ if cobj .id not in (Codec (x , "w" ).id for x in ctr .acodecs ):
134
+ log .error (codec_error .format (codec , out_ext ))
124
135
125
136
return codec
126
137
0 commit comments