2015-08-27 10 views
6

Der Versuch, Sub-Dateien mit Python in ffmpeg zu brennen. Arbeitet in der Befehlszeile in Ordnung, aber wenn man von Python subprocess mit Aufruf:ffmpeg im Python-Subprozess - Es konnte kein passendes Ausgabeformat für 'pipe:' gefunden werden

p = subprocess.Popen('cd ~/Downloads/yt/; ffmpeg -i ./{video} -vf subtitles=./{subtitles} {out}.mp4'.format(video=vid.replace(' ', '\ '), subtitles=subs, out='out.mp4'), shell=True) 

ich:

Unable to find a suitable output format for 'pipe:' 

Vollzurückverfolgungs:

'ffmpeg version 2.7.2 Copyright (c) 2000-2015 the FFmpeg developers 
    built with Apple LLVM version 6.1.0 (clang-602.0.53) (based on LLVM 3.6.0svn) 
    configuration: --prefix=/usr/local/Cellar/ffmpeg/2.7.2_1 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-opencl --enable-libx264 --enable-libmp3lame --enable-libvo-aacenc --enable-libxvid --enable-libfreetype --enable-libvpx --enable-libass --enable-libfdk-aac --enable-nonfree --enable-vda 
    libavutil  54. 27.100/54. 27.100 
    libavcodec  56. 41.100/56. 41.100 
    libavformat 56. 36.100/56. 36.100 
    libavdevice 56. 4.100/56. 4.100 
    libavfilter  5. 16.101/5. 16.101 
    libavresample 2. 1. 0/2. 1. 0 
    libswscale  3. 1.101/3. 1.101 
    libswresample 1. 2.100/1. 2.100 
    libpostproc 53. 3.100/53. 3.100 
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from './OnHub - a router for the new way to Wi-Fi-HNnfHP7VDP8.mp4': 
    Metadata: 
    major_brand  : isom 
    minor_version : 512 
    compatible_brands: isomiso2avc1mp41 
    encoder   : Lavf56.36.100 
    Duration: 00:00:53.94, start: 0.000000, bitrate: 2092 kb/s 
    Stream #0:0(und): Video: h264 (High) (avc1/0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 1961 kb/s, 23.98 fps, 23.98 tbr, 90k tbn, 47.95 tbc (default) 
    Metadata: 
     handler_name : VideoHandler 
    Stream #0:1(und): Audio: aac (LC) (mp4a/0x6134706D), 44100 Hz, stereo, fltp, 125 kb/s (default) 
    Metadata: 
     handler_name : SoundHandler 
[NULL @ 0x7fc07b077600] Unable to find a suitable output format for 'pipe:' 
pipe:: Invalid argument' 
+0

Können Sie mehr Kontext für den Code und die vollständige Traceback hinzufügen? – Cyphase

+0

Das ist eigentlich für den Code neben den Importen und Variablen für die Dateinamen. Einfach zum Testen. Traceback: http://pastebin.com/gDLjrHZs – Spencer

+0

Sie sollten das Traceback direkt in der Frage einschließen. Und wenn es nicht viel mehr Code gibt, warum nicht? :)? Es ist eine gute Angewohnheit, sich darauf einzulassen, denn auch wenn es hier keine Rolle spielt, kann es oft von Bedeutung sein. – Cyphase

Antwort

1

Ich vermute, das Problem war, dass Sie hatten Platz in einem Argument, dass Sie nicht entkommen würden. Man konnte es nur entkommen, aber dies ist eine bessere Art und Weise zu tun, was Sie zu tun versuchen:

import os 


directory_path = os.path.expanduser('~/Downloads/yt/') 
video_path = 'path/to/video' 
subtitles_path = 'path/to/subtitles' 
outfile_path = 'out.mp4' 

args = ['ffmpeg', '-i', video_path, '-vf', 
     'subtitles={}'.format(subtitles_path), outfile_path]] 
p = subprocess.Popen(args, cwd=directory_path) 

Der wichtigste Unterschied ist, dass Sie nicht shell=True verwenden, die für die Sicherheit und anderen Gründen gute Praxis einschließlich der Tatsache, dass Sie sich nicht darum kümmern müssen, Argumente mit Leerzeichen zu zitieren. Da es shell=True nicht verwendet, müssen Sie in der Befehlszeile als eine Liste der Zeichenfolgen ein Element pro Argument anstelle einer Zeichenfolge wie zuvor übergeben.

+1

Übrigens habe ich vor nicht allzu langer Zeit an einem Projekt mit FFMpeg von Python gearbeitet. – Cyphase

+0

Lucky me! Hah, danke nochmal Mann – Spencer

+0

Danke für die Bearbeitung @ o11c, es ist definitiv besser so. – Cyphase

Verwandte Themen