How can I correctly set duration on MP3 output when input is streamed to ffmpeg?

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

How can I correctly set duration on MP3 output when input is streamed to ffmpeg?

Tom Barnsbury
 Hi,

 I am streaming an mp3 file from a remote server, piping it through ffmpeg
to add custom id3 tags and then offering it as a file download from my own
server. It seems that ffmpeg cannot add duration metadata to the file as
the input data is streamed. I was led to this conclusion by the this post
on Stack Overflow: https://stackoverflow.com/a/11987600. My output files
are always missing bytes compared to the source file from the remote server.

 Is it possible that the missing metadata can be added by passing the
duration in to ffmpeg as an argument? I tried using -t as a parameter (as
an input, output and both) but this didn't have the desired effect.

 My ffmpeg commands are below. The input and output files are FIFO files
(using FIFO files does not seem to cause any problems in itself).

 ffmpeg -f mp3 -i /tmp/dc7f36e4-353b-4e1b-a148-8d8e5ab8b606-input -y
-metadata artist="My artist" -metadata title="My title" -codec copy -f mp3
/tmp/dc7f36e4-353b-4e1b-a148-8d8e5ab8b606-output

 Note: When I say missing metadata, I'm not talking about id3 tags. ffprobe
reports the 'deficient' file as follows (note: "Estimating duration from
bitrate, this may be inaccurate"):

 ffprobe version 4.2.2 Copyright (c) 2007-2019 the FFmpeg developers
   built with Apple LLVM version 10.0.0 (clang-1000.11.45.5)
   configuration: --prefix=/usr/local/Cellar/ffmpeg/4.2.2 --enable-shared
--enable-pthreads --enable-version3 --enable-avresample --cc=clang
--host-cflags='-I/Library/Java/JavaVirtualMachines/adoptopenjdk-13.0.1.jdk/Contents/Home/include
-I/Library/Java/JavaVirtualMachines/adoptopenjdk-13.0.1.jdk/Contents/Home/include/darwin'
--host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl
--enable-libaom --enable-libbluray --enable-libmp3lame --enable-libopus
--enable-librubberband --enable-libsnappy --enable-libtesseract
--enable-libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx
--enable-libx264 --enable-libx265 --enable-libxvid --enable-lzma
--enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass
--enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg
--enable-librtmp --enable-libspeex --enable-libsoxr --enable-videotoolbox
--disable-libjack --disable-indev=jack
   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
 [mp3 @ 0x7f91fb002a00] Estimating duration from bitrate, this may be
inaccurate
 Input #0, mp3, from 'streamed-with-additional-id3-tags.mp3':
   Metadata:
     title           : My title
     artist          : My artist
     encoder         : Lavf58.29.100
   Duration: 02:59:56.09, start: 0.000000, bitrate: 128 kb/s
     Stream #0:0: Audio: mp3, 48000 Hz, stereo, fltp, 128 kb/s


 Whereas I am looking to produce a file that reports the following output
(note the "Duration" "start" value, and additional "Metadata" section with
an "encoder" field. I'm not sure if the additional "Metadata" section is
related to the duration issue):


 ffprobe version 4.2.2 Copyright (c) 2007-2019 the FFmpeg developers
   built with Apple LLVM version 10.0.0 (clang-1000.11.45.5)
   configuration: --prefix=/usr/local/Cellar/ffmpeg/4.2.2 --enable-shared
--enable-pthreads --enable-version3 --enable-avresample --cc=clang
--host-cflags='-I/Library/Java/JavaVirtualMachines/adoptopenjdk-13.0.1.jdk/Contents/Home/include
-I/Library/Java/JavaVirtualMachines/adoptopenjdk-13.0.1.jdk/Contents/Home/include/darwin'
--host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl
--enable-libaom --enable-libbluray --enable-libmp3lame --enable-libopus
--enable-librubberband --enable-libsnappy --enable-libtesseract
--enable-libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx
--enable-libx264 --enable-libx265 --enable-libxvid --enable-lzma
--enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass
--enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg
--enable-librtmp --enable-libspeex --enable-libsoxr --enable-videotoolbox
--disable-libjack --disable-indev=jack
   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 'directly-from-file-with-additional-id3-tags.mp3.mp3':
   Metadata:
     title           : My title
     artist          : My artist
     encoder         : Lavf58.29.100
   Duration: 02:59:56.09, start: 0.023021, bitrate: 128 kb/s
     Stream #0:0: Audio: mp3, 48000 Hz, stereo, fltp, 128 kb/s
     Metadata:
       encoder         : Lavc57.89


Ultimately, I just want an identical file but for the id3 tags replaced by
the tags provided in my ffmpeg command.

 Thanks
_______________________________________________
ffmpeg-user mailing list
[hidden email]
https://ffmpeg.org/mailman/listinfo/ffmpeg-user

To unsubscribe, visit link above, or email
[hidden email] with subject "unsubscribe".
Reply | Threaded
Open this post in threaded view
|

Re: How can I correctly set duration on MP3 output when input is streamed to ffmpeg?

Carl Eugen Hoyos-2
Am So., 19. Jan. 2020 um 21:43 Uhr schrieb Tom Barnsbury <[hidden email]>:

> My ffmpeg commands are below. The input and output files are FIFO files
> (using FIFO files does not seem to cause any problems in itself).

If ffmpeg cannot seek in the output file, no duration can be written.

For future requests: Please remember that there is no release support
on this mailing list, always test (and provide console output for)
current FFmpeg git head.

Carl Eugen
_______________________________________________
ffmpeg-user mailing list
[hidden email]
https://ffmpeg.org/mailman/listinfo/ffmpeg-user

To unsubscribe, visit link above, or email
[hidden email] with subject "unsubscribe".