Το ffmpeg στην έξοδο του χρησιμοποιεί τον ειδικό χαρακτήρα '\r' και έτσι μπερδευόμουν απ' το αποτέλεσμα.
Τώρα όμως έχω άλλο θέμα. Για να αντιμετωπίσω το πρόβλημα με το '\r' χρησιμοποιώ το παρακάτω:
- Κώδικας: Επιλογή όλων
import subprocess, shlex
command = shlex.split(r'ffmpeg -y -i /foo/bar1 /foo/bar2 2>&1 | tr \\r \\n')
subprocess.Popen(command)
Όταν τρέχω την εντολή κατευθείαν σε τερματικό δουλεύει σωστά και η μετατροπή γίνεται κανονικά.
Όταν όμως την τρέχω μέσω της subprocess.Popen() απ' το python script παίρνω το παρακάτω αποτέλεσμα:
- Κώδικας: Επιλογή όλων
ffmpeg version 0.8.3-4:0.8.3-0ubuntu0.12.04.1, Copyright (c) 2000-2012 the Libav developers
built on Jun 12 2012 16:52:09 with gcc 4.6.3
*** THIS PROGRAM IS DEPRECATED ***
This program is only provided for compatibility and will be removed in a future release. Please use avconv instead.
[flv @ 0x13947a0] Estimating duration from bitrate, this may be inaccurate
Seems stream 0 codec frame rate differs from container frame rate: 49.97 (4997/100) -> 25.00 (25/1)
Input #0, flv, from '/home/ilias/ha.flv':
Metadata:
starttime : 0
totalduration : 65
totaldatarate : 409
bytelength : 3323117
canseekontime : true
sourcedata : B3E01264AHH1337979092096721
purl :
pmsg :
Duration: 00:01:04.51, start: 0.000000, bitrate: 412 kb/s
Stream #0.0: Video: h264 (Main), yuv420p, 320x240 [PAR 1:1 DAR 4:3], 275 kb/s, 25 tbr, 1k tbn, 49.97 tbc
Stream #0.1: Audio: aac, 44100 Hz, stereo, s16, 136 kb/s
Unable to find a suitable output format for '2>&1'
Αν πάλι χρησιμοποιήσω την os.system() χωρίς να αλλάξω κάτι άλλο, δουλεύει πάλι μια χαρά!
Edit:
Το πρόβλημα ήταν ότι για να χρησιμοποιήσεις ανακατεύθυνση εισόδου/εξόδου με την subprocess πρέπει να θέσεις shell=True ή να το κάνεις χρησιμοποιώντας τα stdout, stderr κλπ.
Το σφάλμα ήταν στο '2>&1'.





