Newest 'ffmpeg' Questions - Stack Overflow
Les articles publiés sur le site
-
How to fix av_interleaved_write_frame() broken pipe error in php
31 mars, par Adekunle AdeyeyeI have an issue using ffmpeg to stream audio and parse to google cloud speech to text in PHP.
It returns this output. I have tried delaying some part of the script, that did not solve it. I have also checked for similar questions. however, they are mostly in python and none of the solutions actually work for this.
built with gcc 8 (GCC) cpudetect libavutil 56. 31.100 / 56. 31.100 libavcodec 58. 54.100 / 58. 54.100 libavformat 58. 29.100 / 58. 29.100 libavdevice 58. 8.100 / 58. 8.100 libavfilter 7. 57.100 / 7. 57.100 libavresample 4. 0. 0 / 4. 0. 0 libswscale 5. 5.100 / 5. 5.100 libswresample 3. 5.100 / 3. 5.100 libpostproc 55. 5.100 / 55. 5.100 Input #0, mp3, from 'https://npr-ice.streamguys1.com/live.mp3': Metadata: icy-br : 96 icy-description : NPR Program Stream icy-genre : News and Talk icy-name : NPR Program Stream icy-pub : 0 StreamTitle : Duration: N/A, start: 0.000000, bitrate: 96 kb/s Stream #0:0: Audio: mp3, 32000 Hz, stereo, fltp, 96 kb/s Stream mapping: Stream #0:0 -> #0:0 (mp3 (mp3float) -> pcm_s16le (native)) Press [q] to stop, [?] for help Output #0, s16le, to 'pipe:': Metadata: icy-br : 96 icy-description : NPR Program Stream icy-genre : News and Talk icy-name : NPR Program Stream icy-pub : 0 StreamTitle : encoder : Lavf58.29.100 Stream #0:0: Audio: pcm_s16le, 16000 Hz, mono, s16, 256 kb/s Metadata: encoder : Lavc58.54.100 pcm_s16le **av_interleaved_write_frame(): Broken pipe** 256.0kbits/s speed=1.02x **Error writing trailer of pipe:: Broken pipe** size= 54kB time=00:00:01.76 bitrate= 250.8kbits/s speed=0.465x video:0kB audio:55kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown Conversion failed!
this is my PHP code
require_once 'vendor/autoload.php'; $projectId = "xxx-45512"; putenv('GOOGLE_APPLICATION_CREDENTIALS=' . __DIR__ . '/xxx-45512-be3eb805f1d7.json'); // Database connection $pdo = new PDO('mysql:host=localhost;dbname=', '', ''); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $url = "https://npr-ice.streamguys1.com/live.mp3"; $ffmpegCmd = "ffmpeg -re -i $url -acodec pcm_s16le -ac 1 -ar 16000 -f s16le -"; $fp = popen($ffmpegCmd, "r"); if (!$fp) { die("Failed to open FFmpeg stream."); } sleep(5); try { $client = new SpeechClient(['transport' => 'grpc', 'credentials' => json_decode(file_get_contents(getenv('GOOGLE_APPLICATION_CREDENTIALS')), true)]); } catch (Exception $e) { echo 'Error: ' . $e->getMessage(); exit; } $recognitionConfig = new RecognitionConfig([ 'auto_decoding_config' => new AutoDetectDecodingConfig(), 'language_codes' => ['en-US'], 'model' => 'long', ]); $streamingConfig = new StreamingRecognitionConfig([ 'config' => $recognitionConfig, ]); $configRequest = new StreamingRecognizeRequest([ 'recognizer' => "projects/$projectId/locations/global/recognizers/_", 'streaming_config' => $streamingConfig, ]); function streamAudio($fp) { while (!feof($fp)) { yield fread($fp, 4096); } } $responses = $client->streamingRecognize([ 'requests' => (function () use ($configRequest, $fp) { yield $configRequest; // Send initial config foreach (streamAudio($fp) as $audioChunk) { yield new StreamingRecognizeRequest(['audio' => $audioChunk]); } })()] ); // $responses = $speechClient->streamingRecognize(); // $responses->writeAll([$request,]); foreach ($responses as $response) { foreach ($response->getResults() as $result) { $transcript = $result->getAlternatives()[0]->getTranscript(); // echo "Transcript: $transcript\n"; // Insert into the database $stmt = $pdo->prepare("INSERT INTO transcriptions (transcript) VALUES (:transcript)"); $stmt->execute(['transcript' => $transcript]); } } pclose($fp); $client->close();
I'm not sure what the issue is at this time.
UPDATE
I've done some more debugging and i have gotten the error to clear and to stream actually starts. However, I expect the audio to transcribe and update my database but instead I get this error when i close the stream
this is my updated code
$handle = popen($ffmpegCommand, "r"); try { $client = new SpeechClient(['transport' => 'grpc', 'credentials' => json_decode(file_get_contents(getenv('GOOGLE_APPLICATION_CREDENTIALS')), true)]); } catch (Exception $e) { echo 'Error: ' . $e->getMessage(); exit; } try { $recognitionConfig = (new RecognitionConfig()) ->setAutoDecodingConfig(new AutoDetectDecodingConfig()) ->setLanguageCodes(['en-US'], ['en-UK']) ->setModel('long'); } catch (Exception $e) { echo 'Error: ' . $e->getMessage(); exit; } try { $streamConfig = (new StreamingRecognitionConfig()) ->setConfig($recognitionConfig); } catch (Exception $e) { echo 'Error: ' . $e->getMessage(); exit; } try { $configRequest = (new StreamingRecognizeRequest()) ->setRecognizer("projects/$projectId/locations/global/recognizers/_") ->setStreamingConfig($streamConfig); } catch (Exception $e) { echo 'Error: ' . $e->getMessage(); exit; } $stream = $client->streamingRecognize(); $stream->write($configRequest); mysqli_query($conn, "INSERT INTO transcriptions (transcript) VALUES ('bef')"); while (!feof($handle)) { $chunk = fread($handle, 25600); // printf('chunk: ' . $chunk); if ($chunk !== false) { try { $request = (new StreamingRecognizeRequest()) ->setAudio($chunk); $stream->write($request); } catch (Exception $e) { printf('Errorc: ' . $e->getMessage()); } } } $insr = json_encode($stream); mysqli_query($conn, "INSERT INTO transcriptions (transcript) VALUES ('$insr')"); foreach ($stream->read() as $response) { mysqli_query($conn, "INSERT INTO transcriptions (transcript) VALUES ('loop1')"); foreach ($response->getResults() as $result) { mysqli_query($conn, "INSERT INTO transcriptions (transcript) VALUES ('loop2')"); foreach ($result->getAlternatives() as $alternative) { $trans = $alternative->getTranscript(); mysqli_query($conn, "INSERT INTO transcriptions (transcript) VALUES ('$trans')"); } } } pclose($handle); $stream->close(); $client->close();```
-
RTSP Frame Grabbing creates smeared , pixeled and corrupted images
31 mars, par RobobI am trying to capture a single frame per second from a RTSP stream with following command ffmpeg -i rtsp://XXX -q:v 1 -vf fps=fps=1 -strftime 1 ZZZZ\%H_%M_%S.jpg
But some of the frames are smeared ,pixeled and corrupted - this effect is drastically increases if rtsp resolution is increased
(if the resolution is decreased for example to 720P most of the frames are OK)
I have to say that playing same rtsp stream in VLC or FFPLAY is flowless.
How I can fix it to grab better quality
Thanks in advance.
-
I have a problem with my input resampling FFmpeg audio code [closed]
31 mars, par Jaime SamperI,ve tried to do a resampling with ffmpeg, but i found issues all the time in my code.
firt, i tried to get the imput channel layout but
av_channel_layout_default(&layout, audio_codecpar->nb_channels)
tells me, "there´s not nb_channels menber.so i put the resampling code manually cause I know is stereo.
av_opt_set_sample_fmt(swr_ctx, "in_sample_fmt", codec_ctx->sample_fmt, 0); av_opt_set_int(swr_ctx, "in_channel_layout", AV_CH_LAYOUT_STEREO, 0); av_opt_set_int(swr_ctx, "in_sample_rate", codec_ctx->sample_rate, 0); av_opt_set_sample_fmt(swr_ctx, "out_sample_fmt", AV_SAMPLE_FMT_S16, 0); av_opt_set_int(swr_ctx, "out_channel_layout", AV_CH_LAYOUT_STEREO, 0); av_opt_set_int(swr_ctx, "out_sample_rate", pwfx->nSamplesPerSec, 0);
but on execution give me this error:
Formato de mezcla: 48000 Hz, 32 bits, 2 canales [SWR @ 00000277ef707a40] Input channel layout "" is invalid or unsupported.
any clue?
-
FFmpeg Non-monotonous DTS in output stream
31 mars, par Tim AutinI need to record a h265 4K RTSP stream into 1/2h segments. I'm using this command:
ffmpeg \ -i "rtsp://..." \ -vcodec copy \ -segment_list /path/to/segments_2025-03-31_09-18-45.153_1.txt \ -f segment -reset_timestamps 1 -segment_time 1800 -strftime 1 \ "/path/to/segment_%y%m%d%H%M%S.mp4"
It works but:
- the recorded files show some artifact
- these warnings are print in the console when starting recording:
[segment @ 0x6171d02eeac0] Timestamps are unset in a packet for stream 0. This is deprecated and will stop working in the future. Fix your code to set the timestamps properly [segment @ 0x6171d02eeac0] Non-monotonous DTS in output stream 0:0; previous: 0, current: 0; changing to 1. This may result in incorrect timestamps in the output file.
I tried adding
-use_wallclock_as_timestamps 1
as well as-fflags +igndts
but it doesn't change anything.What's wrong?
-
I Need Help Making Our Driver Station Video Feed Faster [closed]
30 mars, par Joshua GreenI am currently using FFmpeg on a Raspberry Pi 4 Model B using an ArduCam UC-844 Rev. B as the camera. We do not need any audio and I don't care about the quality of the video. All we need is for the stream to be as fast as possible. The video from the camera is being streamed to the driver station via FFmpeg and being picked up on the driver station via FFplay. Right now we are getting a delay that we wish could go away or be significantly shortened. These are the commands we are using.
Raspberry Pi:
ffmpeg -i /dev/video0 -c:v libx264 -crf 45 -maxrate 1M -bufsize 1.2M -preset ultrafast -tune zerolatency -filter:v fps=30 -f mpegts -omit_video_pes_length 0 udp://10.2.33.5:554
Driver Station:
ffplay -fflags nobuffer -flags low_delay -probesize 32 -analyzeduration 0 -f mpegts -vf setpts=0 udp://10.2.33.5:554