hi, ich bin mittlerweile mit sed in der nächsten runde angekommen. 😉
nun bin ich dabei den output von ffmpeg auszulesen / zu parsen. problematisch ist allerdings, dass der output von ffmpeg durch CR (^M) getrennt ist. Um später die log files mittels tail besser auslesen zu können, will ich mit sed nun alle CR durch LF ersetzten.
ist es möglich mit sed alle CR (^M) durch LF (^J) zu ersetzten und trotzdem mit der option -u einen ungebufferten output in eine datei zu pipen ?
wenn ich den outout von ffmpeg in eine datei umleite:
ffmpeg -i bla.mpeg -y -vpre libx264-default bla.flv 2> test.log
und anschließend diese datei mit folgenden befhel auslese bekomme ich den gewünschten ouput
cat test.log| sed 's/'`echo -e "\015"`'/\n/g'
bzw:
[...]
frame= 971 fps= 31 q=18.0 size= 963kB time=31.09 bitrate= 253.8kbits/s dup=0 drop=29
frame= 1001 fps= 31 q=18.0 size= 999kB time=32.09 bitrate= 255.0kbits/s dup=0 drop=29
frame= 1028 fps= 30 q=18.0 size= 1032kB time=32.99 bitrate= 256.2kbits/s dup=0 drop=29
frame= 1058 fps= 31 q=18.0 size= 1101kB time=33.99 bitrate= 265.4kbits/s dup=0 drop=30
frame= 1077 fps= 31 q=18.0 size= 1126kB time=34.63 bitrate= 266.4kbits/s dup=0 drop=30
[...]
In folgendem scenario wird der output von sed erst nach beenden von ffmpeg geschrieben:
ffmpeg -i bla.mpeg -y -vpre libx264-default bla.flv2>&1 | sed -u 's/'`echo -e "\015"`'/\n/g' >> test.log
durch strace bekomme ich folgenden output:
[...]
08:35:37.984883 read(0, "frame= 412 fps= 30 q=19.0 size="..., 1024) = 94
08:35:39.693520 read(0, "frame= 447 fps= 30 q=19.0 size="..., 1024) = 94
08:35:40.496080 read(0, "frame= 492 fps= 31 q=19.0 size="..., 1024) = 94
08:35:42.013259 read(0, "frame= 533 fps= 32 q=19.0 size="..., 1024) = 94
08:35:42.042531 read(0, "frame= 571 fps= 32 q=19.0 size="..., 1024) = 94
08:35:43.541971 read(0, "frame= 603 fps= 31 q=19.0 size="..., 1024) = 94
08:35:44.792048 read(0, "frame= 608 fps= 30 q=18.0 size="..., 1024) = 94
08:35:45.479216 read(0, "frame= 643 fps= 30 q=18.0 size="..., 1024) = 94
08:35:46.620965 read(0, "frame= 673 fps= 31 q=18.0 size="..., 1024) = 94
08:35:47.396273 read(0, "frame= 685 fps= 30 q=18.0 size="..., 1024) = 188
08:35:49.058300 read(0, "frame= 720 fps= 30 q=18.0 size="..., 1024) = 94
[...]
sed liest die einzelnen sequenzen nur, schreibt diese aber nicht.
komich, komich.. 😉
gruß matthias