Ticket #1268 (closed enhancement: invalid)
Shorthand for all streams c:all
| Reported by: | burek | Owned by: | |
|---|---|---|---|
| Priority: | wish | Component: | undetermined |
| Version: | unspecified | Keywords: | |
| Cc: | Blocked By: | ||
| Blocking: | Reproduced by developer: | no | |
| Analyzed by developer: | no |
Description
Hi,
It would be easier to type:
-c:all copy
instead of
-c:v copy -c:a copy -c:s copy -c:d copy -c:t copy
if that option is implemented.
Change History
comment:3 Changed 14 months ago by burek
cehoyos, this is 3rd or 4th time that I get impression that you are not even reading these messages on trac, but rather just reply to them, only to make a reply.. no offense, but that's the feeling I got so far.. what command line and output do you need, when this is a wish/enhancement request?
command:
ffmpeg -i INPUT -c copy OUTPUT
expected results: Copy EVERYTHING from the input container and remux it into the output container
real results: FFmpeg copies one video + one audio stream to the output container (by choosing a best pick for streams, I guess)
ffmpeg -i out.mp4 -c copy out2.mp4
ffmpeg version N-40213-g9f98a8e Copyright (c) 2000-2012 the FFmpeg developers
built on May 1 2012 17:07:09 with gcc 4.6.3
configuration: --prefix=/root/ffmpeg-static/32bit --arch=x86_32 --extra-cflags='-m32 -I/root/ffmpeg-static/32bit/include -static' --extra-ldflags='-m32 -L/root/ffmpeg-static/32bit/lib -static' --extra-libs='-lxml2 -lexpat -lfreetype' --enable-static --disable-shared --disable-ffserver --disable-doc --enable-bzlib --enable-zlib --enable-postproc --enable-runtime-cpudetect --enable-libx264 --enable-gpl --enable-libtheora --enable-libvorbis --enable-libmp3lame --enable-gray --enable-libass --enable-libfreetype --enable-libopenjpeg --enable-libspeex --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-version3 --enable-libvpx
libavutil 51. 48.100 / 51. 48.100
libavcodec 54. 17.100 / 54. 17.100
libavformat 54. 3.100 / 54. 3.100
libavdevice 53. 4.100 / 53. 4.100
libavfilter 2. 72.100 / 2. 72.100
libswscale 2. 1.100 / 2. 1.100
libswresample 0. 11.100 / 0. 11.100
libpostproc 52. 0.100 / 52. 0.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'out.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf54.3.100
Duration: 00:00:12.74, start: 0.000000, bitrate: 405 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 352x288, 6 kb/s, 30 fps, 30 tbr, 30 tbn, 60 tbc
Metadata:
handler_name : VideoHandler
Stream #0:1(und): Audio: mp3 (mp4a / 0x6134706D), 44100 Hz, stereo, s16, 128 kb/s
Metadata:
handler_name : SoundHandler
Stream #0:2(und): Audio: mp2 (mp4a / 0x6134706D), 44100 Hz, stereo, s16, 127 kb/s
Metadata:
handler_name : SoundHandler
Stream #0:3(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, s16, 129 kb/s
Metadata:
handler_name : SoundHandler
Output #0, mp4, to 'out2.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf54.3.100
Stream #0:0(und): Video: h264 (![0][0][0] / 0x0021), yuv420p, 352x288, q=2-31, 6 kb/s, 30
Metadata:
handler_name : VideoHandler
Stream #0:1(und): Audio: mp3 (i[0][0][0] / 0x0069), 44100 Hz, stereo, 128 kb/s
Metadata:
handler_name : SoundHandler
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
frame= 379 fps=0.0 q=-1.0 Lsize= 223kB time=00:00:12.56 bitrate= 145.2kbits/s
video:10kB audio:200kB global headers:0kB muxing overhead 6.214687%
If I'm not wrong this command would need to add -map 0 to get the desired effect (to copy everything from the input to the output format).



Further discussion on IRC channel revealed that there is -c which is equivalent for this -c:all suggestion, but the problem with -c (or rather with -map) is because -map 0 is not the default behavior. So, here is the problem. When a user types:
what he is expecting is to remux his media into another container, but what he gets is not what he was expecting, because, in a multiple streams media file, ffmpeg will choose the "best pick" for multiple audio streams for example and will leave other audio streams not copied.
So, my suggestion was actually to make -map 0 the default option, making ffmpeg copy all streams, not just to pick "the best ones" out.