[postprocessor/ffmpeg] Always use the 'file:' protocol for filenames (fixes #6874)

If the filename contains ':' it is interpreted as a protocol.
It also handles filenames starting with '-'.
This commit is contained in:
Jaime Marquínez Ferrándiz 2015-09-17 15:22:19 +02:00
parent 131d05033b
commit 8a7bbd1606
2 changed files with 9 additions and 6 deletions

View file

@ -31,7 +31,7 @@ class HlsFD(FileDownloader):
args = [ args = [
encodeArgument(opt) encodeArgument(opt)
for opt in (ffpp.executable, '-y', '-i', url, '-f', 'mp4', '-c', 'copy', '-bsf:a', 'aac_adtstoasc')] for opt in (ffpp.executable, '-y', '-i', url, '-f', 'mp4', '-c', 'copy', '-bsf:a', 'aac_adtstoasc')]
args.append(encodeFilename(tmpfilename, True)) args.append(encodeFilename(ffpp._ffmpeg_filename_argument(tmpfilename), True))
self._debug_cmd(args) self._debug_cmd(args)

View file

@ -135,7 +135,10 @@ class FFmpegPostProcessor(PostProcessor):
files_cmd = [] files_cmd = []
for path in input_paths: for path in input_paths:
files_cmd.extend([encodeArgument('-i'), encodeFilename(path, True)]) files_cmd.extend([
encodeArgument('-i'),
encodeFilename(self._ffmpeg_filename_argument(path), True)
])
cmd = ([encodeFilename(self.executable, True), encodeArgument('-y')] + cmd = ([encodeFilename(self.executable, True), encodeArgument('-y')] +
files_cmd + files_cmd +
[encodeArgument(o) for o in opts] + [encodeArgument(o) for o in opts] +
@ -155,10 +158,10 @@ class FFmpegPostProcessor(PostProcessor):
self.run_ffmpeg_multiple_files([path], out_path, opts) self.run_ffmpeg_multiple_files([path], out_path, opts)
def _ffmpeg_filename_argument(self, fn): def _ffmpeg_filename_argument(self, fn):
# ffmpeg broke --, see https://ffmpeg.org/trac/ffmpeg/ticket/2127 for details # Always use 'file:' because the filename may contain ':' (ffmpeg
if fn.startswith('-'): # interprets that as a protocol) or can start with '-' (-- is broken in
return './' + fn # ffmpeg, see https://ffmpeg.org/trac/ffmpeg/ticket/2127 for details)
return fn return 'file:' + fn
class FFmpegExtractAudioPP(FFmpegPostProcessor): class FFmpegExtractAudioPP(FFmpegPostProcessor):