<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Standard streams &#8211; stoimen&#039;s web log</title>
	<atom:link href="/tag/standard-streams/feed/" rel="self" type="application/rss+xml" />
	<link></link>
	<description>on web development</description>
	<lastBuildDate>Tue, 13 Feb 2018 08:18:15 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.0.3</generator>
	<item>
		<title>An FFMPEG Question &#8211; Why PHP&#8217;s exec() Doesn&#8217;t Return the Command Output</title>
		<link>/2011/04/12/an-ffmpeg-question-why-phps-exec-doesnt-return-the-command-output/</link>
		<comments>/2011/04/12/an-ffmpeg-question-why-phps-exec-doesnt-return-the-command-output/#comments</comments>
		<pubDate>Tue, 12 Apr 2011 08:19:00 +0000</pubDate>
		<dc:creator><![CDATA[Stoimen]]></dc:creator>
				<category><![CDATA[micro tutorial]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Application software]]></category>
		<category><![CDATA[Computing]]></category>
		<category><![CDATA[Dc]]></category>
		<category><![CDATA[Exec]]></category>
		<category><![CDATA[FFmpeg]]></category>
		<category><![CDATA[Process]]></category>
		<category><![CDATA[Standard streams]]></category>
		<category><![CDATA[unix]]></category>

		<guid isPermaLink="false">/?p=2293</guid>
		<description><![CDATA[string exec (&#8230;) Here&#8217;s the tricky part. As we know from the exec() man page this function executes the given command. As described there, the exact declaration of this method is: string exec ( string $command [, array &#038;$output [, int &#038;$return_var ]] ) So far so good. Normally exec() will return the output of &#8230; <a href="/2011/04/12/an-ffmpeg-question-why-phps-exec-doesnt-return-the-command-output/" class="more-link">Continue reading <span class="screen-reader-text">An FFMPEG Question &#8211; Why PHP&#8217;s exec() Doesn&#8217;t Return the Command Output</span> <span class="meta-nav">&#8594;</span></a><div class='yarpp-related-rss'>

Related posts:<ol>
<li><a href="/2010/10/26/ffmpeg-libx264-and-presets/" rel="bookmark" title="ffmpeg, libx264 and presets">ffmpeg, libx264 and presets </a></li>
<li><a href="/2010/11/12/how-to-make-mp4-progressive-with-qt-faststart/" rel="bookmark" title="How to Make MP4 Progressive with qt-faststart">How to Make MP4 Progressive with qt-faststart </a></li>
<li><a href="/2011/01/27/few-thoughts-on-web-video/" rel="bookmark" title="Few Thoughts on Web Video">Few Thoughts on Web Video </a></li>
<li><a href="/2010/03/05/video-sites-must-use-mp4-and-only-mp4/" rel="bookmark" title="Video sites must use &#8230; mp4 and only mp4!">Video sites must use &#8230; mp4 and only mp4! </a></li>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<h2>string exec (&#8230;)</h2>
<p>Here&#8217;s the tricky part. As we know from the <a title="PHP exec() Function Man Page" href="http://php.net/manual/en/function.exec.php" target="_blank">exec() man page</a> this function <em>executes the given command</em>. As described there, the exact declaration of this method is:</p>
<pre lang="php">
string exec  ( string $command  [, array &$output  [, int &$return_var  ]] )
</pre>
<p>So far so good. Normally exec() will return the output of the command.</p>
<pre lang="bash">
FFmpeg version SVN-r21880, Copyright (c) 2000-2010 Fabrice Bellard, et al.
  built on Feb 18 2010 15:53:28 with gcc 4.3.2
  configuration: --enable-gpl --enable-nonfree --enable-shared --enable-postproc --enable-avfilter --enable-avfilter-lavf --enable-pthreads --enable-x11grab --enable-bzlib --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-version3 --enable-libdc1394 --enable-libfaac --enable-libfaad --enable-libfaadbin --enable-libgsm --enable-libmp3lame --enable-libschroedinger --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-zlib --prefix=/usr/local
  libavutil     50. 9. 0 / 50. 9. 0
  libavcodec    52.54. 0 / 52.54. 0
  libavformat   52.52. 0 / 52.52. 0
  libavdevice   52. 2. 0 / 52. 2. 0
  libavfilter    1.17. 0 /  1.17. 0
  libswscale     0.10. 0 /  0.10. 0
  libpostproc   51. 2. 0 / 51. 2. 0
...
</pre>
<p>However sometimes that is not so true. Let&#8217;s see an example with the popular FFMPEG program. In one hand when you try to start a video converting program with <a href="/category/php/">PHP</a> you can simply call exec with the <a href="/tag/ffmpeg/">FFMPEG</a> command as the first parameter. The output is OK and you can dump it as in the example here.</p>
<pre lang="php">
echo exec('/usr/local/bin/ffmpeg -i input.mp4 -acodec libfaac -ab 128k -ac 2 -vcodec libx264 -vpre normal -threads 0 output.mp4', $output);	
var_dump($output);
</pre>
<p>In some cases you can call <a href="http://www.ffmpeg.org/" target="_blank">FFMPEG</a> only with the -i option to get some info about the input file. Such info can be the size of the image, the bitrate of the source file or the length of the movie. Executing this command:</p>
<pre lang="php">
echo exec('/usr/local/bin/ffmpeg -i input.mp4', $output);	
var_dump($output);
</pre>
<p>in the terminal you&#8217;ll see the output you wish. However if you trying to execute the command via exec() the output remains empty?</p>
<h2>Why the Output Parameter is Empty?</h2>
<p>Looking at the terminal screen you can&#8217;t see the difference, but actually in the second case, when you execute FFMPEG only with the -i option, the output is redirected to the standard error output. That&#8217;s why you can&#8217;t see it in the exec() second parameter. However there is a solution.</p>
<figure id="attachment_2300" style="width: 500px" class="wp-caption aligncenter"><a href="/wp-content/uploads/2011/04/help.jpg"><img class="size-full wp-image-2300" title="PHP's exec() Doesn't Return The Command Output Always" src="/wp-content/uploads/2011/04/help.jpg" alt="Sometimes PHP's exec() doesn't return the command output. You've to be sure that the command output is not redirected to the standard error stream." width="500" height="375" srcset="/wp-content/uploads/2011/04/help.jpg 500w, /wp-content/uploads/2011/04/help-300x225.jpg 300w" sizes="(max-width: 500px) 100vw, 500px" /></a><figcaption class="wp-caption-text">Sometimes PHP&#39;s exec() doesn&#39;t return the command output. You&#39;ve to be sure that the command output is not redirected to the standard error stream.</figcaption></figure>
<h2>Solution and Conclusion</h2>
<p>The solution is quite simple. You&#8217;ve to redirect the output of the FFMPEG command to the standard output.</p>
<pre lang="bash">
/usr/local/bin/ffmpeg -i /var/www/android/test.mp4 2>&1
</pre>
<p>Now you can call this line with exec().</p>
<pre lang="php">
echo exec('/usr/local/bin/ffmpeg -i input.mp4 2>&1', $output);	
var_dump($output);
</pre>
<p>This showcase with the FFMPEG is important not only because now you can call FFMPEG&#8217;s command without problems, but because you now know that exec() can&#8217;t read the standard error output. Thus you&#8217;ve to be careful and always redirect to the standard output.</p>
<div class='yarpp-related-rss'>
<p>Related posts:<ol>
<li><a href="/2010/10/26/ffmpeg-libx264-and-presets/" rel="bookmark" title="ffmpeg, libx264 and presets">ffmpeg, libx264 and presets </a></li>
<li><a href="/2010/11/12/how-to-make-mp4-progressive-with-qt-faststart/" rel="bookmark" title="How to Make MP4 Progressive with qt-faststart">How to Make MP4 Progressive with qt-faststart </a></li>
<li><a href="/2011/01/27/few-thoughts-on-web-video/" rel="bookmark" title="Few Thoughts on Web Video">Few Thoughts on Web Video </a></li>
<li><a href="/2010/03/05/video-sites-must-use-mp4-and-only-mp4/" rel="bookmark" title="Video sites must use &#8230; mp4 and only mp4!">Video sites must use &#8230; mp4 and only mp4! </a></li>
</ol></p>
</div>
]]></content:encoded>
			<wfw:commentRss>/2011/04/12/an-ffmpeg-question-why-phps-exec-doesnt-return-the-command-output/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>
