2015-08-27 16 views
6

Python ile ffmpeg ile videoya alt yazmayı deneyin. Komut satırında çalışıyor, ancak birlikte Python alt işlemi çağrılırken:Python alt işleminde ffmpeg - 'Boru:' için uygun bir çıktı biçimi bulamıyor.

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) 

alıyorum:

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

Tam geri izleme:

'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

Kod için daha fazla içerik ve tam geri izleme ekleyebilir misiniz? – Cyphase

+0

Bu aslında dosya isimleri için ithalat ve değişkenler dışında kod için. Test için basit. Traceback: http://pastebin.com/gDLjrHZs – Spencer

+0

Traceback'i doğrudan soruna dahil etmelisiniz. Ve daha fazla kod yoksa, neden içermez :)? İçeri girmek iyi bir alışkanlıktır, çünkü burada önemli olmasa bile, çoğu zaman önemli olabilir. – Cyphase

cevap

1

olmasıydı Sorunu tahmin ediyorum Kaçmadığın bazı argümanlarda boşluklar vardı. Sadece bunu kaçmak, ancak bu yapmaya çalıştığın şeyi yapmanın daha iyi yoludur:

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) 

temel fark, güvenlik ve diğer nedenlerden dolayı iyi bir uygulama olan shell=True kullanmadığınız olmasıdır Ayrıca, boşluklarla argümanları alıntılama konusunda endişelenmenize gerek kalmaması da dahil. shell=True kullanılmadığından, komut satırında dizginin bir listesi, argüman başına bir öğe, daha önce olduğu gibi bir dizgi yerine geçmek zorundasınız.

+1

Tesadüfen, çok uzun zaman önce Python'dan FFMpeg kullanarak bir proje üzerinde çalışıyordum. – Cyphase

+0

Şanslıyım! Hah, tekrar teşekkürler – Spencer

+0

Düzenleme @ o11c için teşekkürler, bu kesinlikle daha iyi. – Cyphase