Newest 'ffmpeg' Questions - Stack Overflow
Les articles publiés sur le site
-
How to force "full range" flag on export
28 janvier 2019, par Emanuele VissaniI have an ffmpeg command to remap audio tracks to descrete channels in a ProRes 4444 quicktime file. Even if the input video is copied to the output, the exported file is interpreted by a professional video player software as video range (16-234 values) instead of the original full range (0-255 values), making it look more contrasted. The content is actually correct, changing manually the range setting in the player software gives back the right light range, so I think the output file just lose some kind of range flag.
I already tried the following options without results:
-colorspace bt709 -movflags +write_colr
-dst_range 1 -color_range 2
-vf scale=out_range=full
-vf scale=in_range=full:out_range=full
Original command is:
ffmpeg -i F:\_IMPORT\TST_ProRes4444_4k.mov -map 0:0 -c copy -map 0:1 -c copy -map_channel 0.2.0:0.2 -c:a pcm_s24le F:\_EXPORT\TEST\test.mov
Thank you for your help.
-
How to change wave file frequency while retaining sample rate [duplicate]
28 janvier 2019, par q1w2e3r4t5y6This question already has an answer here:
I am wondering how to change a wave file's frequency while retaining its sample rate. I have tried:
ffmpeg -i $1 -filter:a "asetrate=$2" -y $3
The second argument here changes drastically, by the way. However, this changes the sample rate, making it impossible to concatenate with
sox
. How can I modify the above code so that it changes the frequency while still having the same sample rate? -
Change wave file frequency while retaining sample rate bash
28 janvier 2019, par q1w2e3r4t5y6I am wondering how to change a wave file's frequency while its retaining sample rate. I have tried:
ffmpeg -i $1 -filter:a "asetrate=$2" -y $3
The second argument here changes drastically, by the way. However, this changes the sample rate, making it impossible to concatenate with sox. How can I make the above code so that it changes the frequency while still having the same sample rate? Thanks!
-
ffmpeg, v4l, snd_aloop ... sound asyncron (alsa buffer xrun)
28 janvier 2019, par TobiasI'm trying to create a stream that automatically reloads random inputs. I would like to extend this to a database later.
Each time ffmpeg finishes and starts again, so the input changes, the connection to the rtmp is interrupted briefly causing the whole connection breaks down. I then tried to separate audio and video, to send them to virtual devices and read from there again. Split the stream on virtual devices, reassemble them directly and send them to rtmp. If the input is then exchanged, the sending to the devices interrupts what does not bother the second ffmpeg. As soon as I stop sending to the devices the fps go very slowly (10 - 20 sec) from 25 to 0. Only then does the transmitter ffmpeg break the connection to the rtmp. The script which exchanges the inputs needs only one second. A practical test showed that everything works as desired.
I can quite comfortably change the input while the second ffmpeg maintains the stream ...
The joy did not last long. The sound is good 1 sec delayed. But sporadically. Sometimes everything works great. Sometimes the sound is offset.
I wrote several scripts for this.
Background:
- File is selected by random
- Media file is split and written to / dev / video0 (v4l loopback) and alsa default (snd_aloop loopback)
- Put the splits together again and stream them to a rtmp server
Code that selects the input and sends to / dev / video0 and alsa default
#!/bin/bash cat /dev/null > log while true; do WATERMARK="watermark.png"; dir='/homeXXXXXXXXXX/mix' file=`/bin/ls -1 "$dir" | sort --random-sort | head -1` DATEI=`readlink --canonicalize "$dir/$file"` # Converts to full path if [ -z $DATEI ] then echo "Keine Datei gefunden" >> log; else START=$(date +%s); echo "Sende $DATEI" >> log; ffmpeg -re -y -i "$DATEI" -c:v libx264 -vf "fps=25,scale=640:480,setdar=4:3" -async 1 -pix_fmt yuv420p -preset ultrafast -map 0:0 -f v4l2 -vcodec rawvideo /dev/video0 -f alsa default fi DOKILL=`cat kill`; if [ "$DOKILL" = "1"] then break; fi done
The Output
./run.sh ffmpeg version 3.2.12-1~deb9u1 Copyright (c) 2000-2018 the FFmpeg developers built with gcc 6.3.0 (Debian 6.3.0-18+deb9u1) 20170516 configuration: --prefix=/usr --extra-version='1~deb9u1' --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libebur128 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared libavutil 55. 34.101 / 55. 34.101 libavcodec 57. 64.101 / 57. 64.101 libavformat 57. 56.101 / 57. 56.101 libavdevice 57. 1.100 / 57. 1.100 libavfilter 6. 65.100 / 6. 65.100 libavresample 3. 1. 0 / 3. 1. 0 libswscale 4. 2.100 / 4. 2.100 libswresample 2. 3.100 / 2. 3.100 libpostproc 54. 1.100 / 54. 1.100 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/home/mix/XXXXXXXXXXXXX.mp4': Metadata: major_brand : isom minor_version : 512 compatible_brands: isomiso2avc1mp41 title : XXXXXXXXXXXXXXX encoder : Lavf57.41.100 Duration: 00:03:53.48, start: 0.000000, bitrate: 2705 kb/s Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1920x1080 [SAR 1:1 DAR 16:9], 2573 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc (default) Metadata: handler_name : VideoHandler Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 127 kb/s (default) Metadata: handler_name : SoundHandler Codec AVOption preset (Configuration preset) specified for output file #0 (/dev/video0) has not been used for any stream. The most likely reason is either wrong type (e.g. a video option with no video streams) or that it is a private option of some encoder which was not actually used for any stream. [Parsed_setdar_2 @ 0x5571234fe020] num:den syntax is deprecated, please use num/den or named options instead -async is forwarded to lavfi similarly to -af aresample=async=1:min_hard_comp=0.100000:first_pts=0. Output #0, v4l2, to '/dev/video0': Metadata: major_brand : isom minor_version : 512 compatible_brands: isomiso2avc1mp41 title : XXXXXXXXXXX encoder : Lavf57.56.101 Stream #0:0(und): Video: rawvideo (I420 / 0x30323449), yuv420p, 640x480 [SAR 1:1 DAR 4:3], q=2-31, 200 kb/s, 25 fps, 25 tbn, 25 tbc (default) Metadata: handler_name : VideoHandler encoder : Lavc57.64.101 rawvideo Output #1, alsa, to 'default': Metadata: major_brand : isom minor_version : 512 compatible_brands: isomiso2avc1mp41 title : XXXXXXXXXX encoder : Lavf57.56.101 Stream #1:0(und): Audio: pcm_s16le, 44100 Hz, stereo, s16, 1411 kb/s (default) Metadata: handler_name : SoundHandler encoder : Lavc57.64.101 pcm_s16le Stream mapping: Stream #0:0 -> #0:0 (h264 (native) -> rawvideo (native)) Stream #0:1 -> #1:0 (aac (native) -> pcm_s16le (native)) Press [q] to stop, [?] for help frame= 736 fps= 24 q=-0.0 Lsize=N/A time=00:00:29.67 bitrate=N/A speed=0.979x video:331200kB audio:5112kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown Exiting normally, received signal 2.
The send script
#!/bin/bash IP="XXXXXXXXX"; ffmpeg -f video4linux2 -i /dev/video0 -f alsa -acodec pcm_s16le -i default -f flv -async 1 -pix_fmt yuv420p -preset ultrafast -vcodec libx264 -r 25 -s 640x260 -acodec aac rtmp://$IP:1935/live/test
The Output
./send_stream.sh ffmpeg version 3.2.12-1~deb9u1 Copyright (c) 2000-2018 the FFmpeg developers built with gcc 6.3.0 (Debian 6.3.0-18+deb9u1) 20170516 configuration: --prefix=/usr --extra-version='1~deb9u1' --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libebur128 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared libavutil 55. 34.101 / 55. 34.101 libavcodec 57. 64.101 / 57. 64.101 libavformat 57. 56.101 / 57. 56.101 libavdevice 57. 1.100 / 57. 1.100 libavfilter 6. 65.100 / 6. 65.100 libavresample 3. 1. 0 / 3. 1. 0 libswscale 4. 2.100 / 4. 2.100 libswresample 2. 3.100 / 2. 3.100 libpostproc 54. 1.100 / 54. 1.100 Input #0, video4linux2,v4l2, from '/dev/video0': Duration: N/A, start: 1548393682.674066, bitrate: 110592 kb/s Stream #0:0: Video: rawvideo (I420 / 0x30323449), yuv420p, 640x480, 110592 kb/s, 30 fps, 30 tbr, 1000k tbn, 1000k tbc Guessed Channel Layout for Input Stream #1.0 : stereo Input #1, alsa, from 'default': Duration: N/A, start: 1548393682.677901, bitrate: 1536 kb/s Stream #1:0: Audio: pcm_s16le, 48000 Hz, stereo, s16, 1536 kb/s -async is forwarded to lavfi similarly to -af aresample=async=1:min_hard_comp=0.100000:first_pts=0. [libx264 @ 0x55e22cfa4f00] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX [libx264 @ 0x55e22cfa4f00] profile Constrained Baseline, level 2.1 [libx264 @ 0x55e22cfa4f00] 264 - core 148 r2748 97eaef2 - H.264/MPEG-4 AVC codec - Copyleft 2003-2016 - http://www.videolan.org/x264.html - options: cabac=0 ref=1 deblock=0:0:0 analyse=0:0 me=dia subme=0 psy=1 psy_rd=1.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=0 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=0 keyint=250 keyint_min=25 scenecut=0 intra_refresh=0 rc=crf mbtree=0 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=0 Output #0, flv, to 'rtmp://XXXXXXXXXXX:1935/live/test': Metadata: encoder : Lavf57.56.101 Stream #0:0: Video: h264 (libx264) ([7][0][0][0] / 0x0007), yuv420p, 640x260, q=-1--1, 25 fps, 1k tbn, 25 tbc Metadata: encoder : Lavc57.64.101 libx264 Side data: cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1 Stream #0:1: Audio: aac (LC) ([10][0][0][0] / 0x000A), 48000 Hz, stereo, fltp, 128 kb/s Metadata: encoder : Lavc57.64.101 aac Stream mapping: Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (libx264)) Stream #1:0 -> #0:1 (pcm_s16le (native) -> aac (native)) Press [q] to stop, [?] for help [alsa @ 0x55e22cf87300] Thread message queue blocking; consider raising the thread_queue_size option (current value: 8) [video4linux2,v4l2 @ 0x55e22cf84fe0] Thread message queue blocking; consider raising the thread_queue_size option (current value: 8) Past duration 0.613319 too large 7344kB time=00:01:05.85 bitrate= 913.5kbits/s speed=1.04x Past duration 0.614372 too large 7644kB time=00:01:08.39 bitrate= 915.6kbits/s speed=1.04x Past duration 0.609749 too large 7834kB time=00:01:10.91 bitrate= 905.0kbits/s speed=1.04x Past duration 0.604362 too large 8038kB time=00:01:12.92 bitrate= 903.0kbits/s speed=1.04x Past duration 0.609489 too large 8070kB time=00:01:13.45 bitrate= 900.1kbits/s speed=1.04x Past duration 0.615013 too large 8094kB time=00:01:13.94 bitrate= 896.8kbits/s speed=1.04x Past duration 0.610893 too large 8179kB time=00:01:14.94 bitrate= 894.0kbits/s speed=1.04x Past duration 0.664711 too large Past duration 0.639565 too large 8263kB time=00:01:15.47 bitrate= 896.8kbits/s speed=1.04x Past duration 0.668999 too large 8339kB time=00:01:15.94 bitrate= 899.5kbits/s speed=1.04x Past duration 0.605766 too large Past duration 0.633049 too large 8399kB time=00:01:16.48 bitrate= 899.6kbits/s speed=1.04x Past duration 0.674599 too large Past duration 0.616035 too large 8451kB time=00:01:16.95 bitrate= 899.7kbits/s speed=1.04x Past duration 0.656136 too large Past duration 0.604195 too large Past duration 0.601387 too large 8512kB time=00:01:17.46 bitrate= 900.2kbits/s speed=1.04x Past duration 0.621895 too large 8565kB time=00:01:17.95 bitrate= 900.1kbits/s speed=1.04x Past duration 0.670937 too large 8605kB time=00:01:18.46 bitrate= 898.4kbits/s speed=1.04x Past duration 0.604500 too large 8642kB time=00:01:18.99 bitrate= 896.2kbits/s speed=1.04x frame= 1913 fps= 25 q=-1.0 Lsize= 8670kB time=00:01:19.48 bitrate= 893.6kbits/s speed=1.04x video:7290kB audio:1280kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.160292% [libx264 @ 0x55e22cfa4f00] frame I:8 Avg QP:18.25 size: 15502 [libx264 @ 0x55e22cfa4f00] frame P:1905 Avg QP:20.95 size: 3853 [libx264 @ 0x55e22cfa4f00] mb I I16..4: 100.0% 0.0% 0.0% [libx264 @ 0x55e22cfa4f00] mb P I16..4: 6.4% 0.0% 0.0% P16..4: 38.1% 0.0% 0.0% 0.0% 0.0% skip:55.5% [libx264 @ 0x55e22cfa4f00] coded y,uvDC,uvAC intra: 46.0% 30.3% 13.4% inter: 20.1% 9.8% 1.1% [libx264 @ 0x55e22cfa4f00] i16 v,h,dc,p: 47% 34% 10% 9% [libx264 @ 0x55e22cfa4f00] i8c dc,h,v,p: 45% 28% 22% 5% [libx264 @ 0x55e22cfa4f00] kb/s:750.98 [aac @ 0x55e22cfa62a0] Qavg: 579.067 Exiting normally, received signal 2.
First everything is fine and then comes
Past duration 0.616035 too large 8451kB time=00:01:16.95 bitrate= 899.7kbits/s speed=1.04x Past duration 0.656136 too large Past duration 0.604195 too large Past duration 0.601387 too large 8512kB time=00:01:17.46 bitrate= 900.2kbits/s speed=1.04x
And then when that comes, dives in the first window, so in the ffmpeg sends the input:
Stream mapping: Stream #0:0 -> #0:0 (h264 (native) -> rawvideo (native)) Stream #0:1 -> #1:0 (aac (native) -> pcm_s16le (native)) Press [q] to stop, [?] for help frame= 9 fps=0.0 q=-0.0 size=N/A time=00:00:00.36 bitrate=N/A dup=1 drop=0 spframe= 21 fps= 21 q=-0.0 size=N/A time=00:00:00.84 bitrate=N/A dup=1 drop=0 sp[alsa @ 0x5643b3293160] ALSA buffer xrun. Last message repeated 1 times frame= 33 fps= 22 q=-0.0 size=N/A time=00:00:01.32 bitrate=N/A dup=1 drop=0 sp[alsa @ 0x5643b3293160] ALSA buffer xrun. Last message repeated 1 times frame= 46 fps= 23 q=-0.0 size=N/A time=00:00:01.84 bitrate=N/A dup=1 drop=0 spframe= 58 fps= 23 q=-0.0 size=N/A time=00:00:02.32 bitrate=N/A dup=1 drop=0 spframe= 71 fps= 24 q=-0.0 size=N/A time=00:00:02.84 bitrate=N/A dup=1 drop=0 spframe= 83 fps= 24 q=-0.0 size=N/A time=00:00:03.32 bitrate=N/A dup=1 drop=0 sp[alsa @ 0x5643b3293160] ALSA buffer xrun. frame= 96 fps= 24 q=-0.0 size=N/A time=00:00:03.84 bitrate=N/A dup=1 drop=0 sp[alsa @ 0x5643b3293160] ALSA buffer xrun.
The sound is then absolutely unsynchronized ...
Does anyone have any advice and can help me?
-
FFmpeg doesn't use GPU
28 janvier 2019, par hamidiI got the latest version binaries of ffmpeg from here. When I examine CPU and GPU usages when I play a video by its ffplay, I see that GPU is used during play. Not much using of CPU also indicates it. But when I get the latest version sources from the original site, I can't use GPU. To clarify, I include a player test program I wrote until now. When I uncomment the line which includes avcodec_find_decoder_by_name("h264_cuvid"), I get error -1. The error happens in avcodec_open2 with the description of Operation not permitted.
CString format(const char *fmt, ...) { va_list ap; va_start(ap, fmt); char buf[512]; vsnprintf(buf, sizeof(buf), fmt, ap); va_end(ap); return buf; } int CplayerDlg::play() { FILE *fp = fopen("video_files/1010.brf", "rb"); if (!fp) { AfxMessageBox("can't open video file"); return -1; } RecordFrame frame; RecordHeader hdr; fread(&frame, sizeof(frame), 1, fp); if (frame.frameType != FRAME_TYPE_HEADER) { AfxMessageBox("record file doesn't begin with header"); return -1; } fread(&hdr, sizeof(hdr), 1, fp); GetDlgItem(IDC_DIM)->SetWindowText(format("%dx%d", hdr.width, hdr.height)); GetDlgItem(IDC_CODEC_ID)->SetWindowText(format("%d", hdr.codecId)); GetDlgItem(IDC_PIXEL_FORMAT)->SetWindowText(format("%d", hdr.pixelFormat)); GetDlgItem(IDC_TIMEBASE)->SetWindowText(format("%d/%d", hdr.timebaseNum, hdr.timebaseDen)); AVCodec *pCodec; #if 0 #define CHECK(decoder)\ pCodec = avcodec_find_decoder_by_name(#decoder);\ AfxMessageBox(pCodec ? #decoder " found" : "can't find " #decoder); CHECK(h264_cuvid); #undef CHECK #endif pCodec = avcodec_find_decoder(AV_CODEC_ID_H264); //pCodec = avcodec_find_decoder_by_name("h264_cuvid"); if (!pCodec) { AfxMessageBox("can't find h264 decoder"); return -1; } AVCodecContext *pCodecContext = avcodec_alloc_context3(pCodec); if (!pCodecContext) { AfxMessageBox("can't allocate codec context"); return -1; } #if 0 // enumerating available codecs //av_register_all(); avcodec_register_all(); AVCodec *current_codec = av_codec_next(NULL); while (current_codec != NULL) { TRACE("%s\n", current_codec->name); current_codec = av_codec_next(current_codec); } #endif int err = avcodec_open2(pCodecContext, pCodec, NULL); if (err != 0) { char buf[AV_ERROR_MAX_STRING_SIZE]; av_make_error_string(buf, AV_ERROR_MAX_STRING_SIZE, err); char buf2[AV_ERROR_MAX_STRING_SIZE]; sprintf(buf2, "%d (%x): %s\n", err, err, buf); AfxMessageBox(buf2); return -1; } AfxMessageBox("operation completed successfully"); fclose(fp); return 0; }