Я хочу объединить два фильма с помощью ffmpeg. В оболочке я могу выполнить это:
\\programs\2d\ffmpeg\inst\ffmpeg.bat -y -i "concat:C:/daten/movieA.ts1|C:/daten/movieB.ts2" -c copy -bsf:a aac_adtstoasc C:/daten/movieConcat.mov и все работает нормально. Если я попытаюсь вызвать его из подпроцесса Python:
import subprocess
cmd = [r"\\programs\2d\ffmpeg\inst\ffmpeg.bat", "-i", '"concat:C:/daten/movieA.ts1|C:/daten/movieB.ts2"', "-c", "copy", "-bsf:a aac_adtstoasc", "C:/daten/movieConcat.mov"]
result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
if result.returncode > 0:
print("create concat failed")
print(result.stdout)
print(result.stderr)
Я получаю эту ошибку:
Trailing option(s) found in the command: may be ignored.
[in#0 @ 00000222c056a1c0] Error opening input: Invalid argument
Error opening input file "concat:C:/daten/movieA.ts1|C:/daten/movieB.ts2".
Error opening input files: Invalid argument
Я понятия не имею, что не так с моим звонком, и буду признателен за любые подсказки.
Я почти уверен, что лишние кавычки вокруг "concat:C:/daten/movieA.ts1|C:/daten/movieB.ts2" — ваша ошибка, но Windows просто сумасшедшая, так что, возможно, есть еще кое-что.
Замыкающая опция msg выглядит так, что "-bsf:a aac_adtstoasc" передается как один токен. Ошибка открытия ввода выглядит неадекватным экранированием во входных URL-адресах — избегайте двоеточия и, возможно, канала.
Если я удалю кавычки, то получу ошибку: C: is not recognized as internal or external command..






В Windows, если args — это последовательность, она будет преобразована в строку в способ, описанный в Преобразование последовательности аргументов в строку на Окна . Это связано с тем, что базовый метод CreateProcess() работает с струны.
откуда: https://docs.python.org/3/library/subprocess.html
Вы можете попробовать передать cmd как одну строку с помощью '&&' между строковыми командами.
import subprocess
cmd = r'\\programs\2d\ffmpeg\inst\ffmpeg.bat -y -i "concat:C:/daten/movieA.ts1|C:/daten/movieB.ts2" && -c copy -bsf:a aac_adtstoasc C:/daten/movieConcat.mov'
result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
if result.returncode > 0:
print("create concat failed")
print(result.stdout)
print(result.stderr)
Я думаю, это может быть связано с тем, что вы используете оператор канала "|" в командной строке