2013-11-02 2 views
0

Я пишу графический интерфейс python для ffmpeg. При вызове FFmpeg через подпроцесс он прекрасно работает до тех пор, как команда, какpython вызов ffmpeg misses параметр целевого файла

subprocess.Popen([ffmpeg_converter, 
     '-i',file, 
     target_file 
     ]) 

Но когда я делаю то же вызов с аргументами FFmpeg он терпит неудачу с «По крайней мере, один выходной файл должен быть указан»:

option_string = '-q:a 4' 
subprocess.Popen([ffmpeg_converter, 
     '-i',file, 
     option_string, 
     target_file 
     ]) 

Он даже распознает параметры, но не видит файл цели. Я даже заменил фактический файл цели сопутствующим простым, как «test.mp3», но все равно ту же ошибку. Есть идеи? (. Я на окнах с питоном 3.3)

Полный выход консоли:

ffmpeg version N-57781-g0610d6e Copyright (c) 2000-2013 the FFmpeg developers 
    built on Nov 1 2013 18:01:35 with gcc 4.8.2 (GCC) 
    configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enab 
le-iconv --enable-libass --enable-libbluray --enable-libcaca --enable-libfreetype --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --ena 
ble-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libsp 
eex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavp 
ack --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib 
    libavutil  52. 49.100/52. 49.100 
    libavcodec  55. 40.101/55. 40.101 
    libavformat 55. 20.105/55. 20.105 
    libavdevice 55. 5.100/55. 5.100 
    libavfilter  3. 90.100/3. 90.100 
    libswscale  2. 5.101/2. 5.101 
    libswresample 0. 17.104/0. 17.104 
    libpostproc 52. 3.100/52. 3.100 
Trailing options were found on the commandline. 
Input #0, flac, from 'c:\script\python\testdata\source\01. Es geht los.flac': 
    Metadata: 
    ARTIST   : Olivia Trummer Trio 
    TITLE   : Es geht los 
    ALBUM   : Westwind 
    DATE   : 2008 
    track   : 01 
    GENRE   : Jazz 
    COMMENT   : EAC FLAC -8 
    Duration: 00:06:27.25, bitrate: 834 kb/s 
    Stream #0:0: Audio: flac, 44100 Hz, stereo, s16 
At least one output file must be specified 
+0

Какова фактическая команда ffmpeg (и полный вывод консоли), который является результатом вашего кода? – LordNeckbeard

+0

Вы пробовали переходить в полностью построенную строку вместо списка? –

+0

@ Ethan Furman: Да, я попытался построить строку, но столкнулся с еще большими проблемами, поскольку имена файлов с пробелами требуют дополнительного кавычки, и это приводит к довольно сложной строковой композиции в python. Я пробовал что-то вроде call_string = r "'" + ffmpeg_converter + r "' -i '" + os.path.normcase (file) + r "'" + option_string + r "'" + os.path.normcase (target_file) + r "'" – Fred

ответ

0

Я думаю, что вам нужно передать -q:a 4 как отдельные значений -q:a, 4.

0

Попробуйте это:

subprocess.Popen ([ffmpeg_converter, '-i', файл, '-q: а', '4' целевой_файл ])

Вы передаете ваш строка опциона в качестве одного аргумента вместо двух.

Смежные вопросы