Newest 'ffmpeg' Questions - Stack Overflow

http://stackoverflow.com/questions/tagged/ffmpeg

Les articles publiés sur le site

  • FFMPEG command to crop and transpose video comes out zoomed in bad quality

    15 juillet 2015, par Brian

    I'm trying to convert an mp4 video with dimensions usually 960x720 into a sqaure 480:480 video but it comes out looking squished usually, the command is

    "-y -i %s -vf crop=480:480,transpose=%d -threads 5 -metadata:s:v rotate=0 -c:v libx264 -crf 27 -preset ultrafast -c:a copy -bsf:a aac_adtstoasc %s";
    

    Am I missing something, do I need to down scale first or something?

    **EDIT adding full console output. The ffmpeg command is updated, but the goal still remains the same, take an arbitrary video and square crop it

    07-14 22:30:32.813: D/ffmpeg(30354): -y -i /data/data/com.myapp.app/cache:temp/i7h4ajm0nim1mbcnrqotvrhhsc.mp4 -vf scale=iw*sar:ih,transpose=1 -threads 5 -metadata:s:v rotate=0 -c:v libx264 -crf 27 -preset ultrafast -c:a copy -bsf:a aac_adtstoasc -aspect 1:1 /data/data/com.myapp.app/cache:temp/p1t3bhs0oa3lpqa67g5i9ninm9.ts
    07-14 22:30:32.903: D/ffmpeg(30354): new time reamining 9283
    07-14 22:30:32.913: D/FFmpeg(30354): Running publishing updates method
    07-14 22:30:35.963: D/ffmpeg(30354): WARNING: linker: /data/data/com.myapp.app/files/ffmpeg has text relocations. This is wasting memory and prevents security hardening. Please fix.
    07-14 22:30:35.963: D/ffmpeg(30354): ffmpeg version n2.4.2 Copyright (c) 2000-2014 the FFmpeg developers
    07-14 22:30:35.963: D/ffmpeg(30354):   built on Jun  3 2015 21:56:01 with gcc 4.8 (GCC)
    07-14 22:30:35.963: D/ffmpeg(30354):   configuration: --target-os=linux --cross-prefix=/Users/Brian1/development/ffmpeg-android/toolchain-android/bin/arm-linux-androideabi- --arch=arm --cpu=cortex-a8 --enable-runtime-cpudetect --sysroot=/Users/Brian1/development/ffmpeg-android/toolchain-android/sysroot --enable-pic --enable-small --enable-libx264 --enable-pthreads --disable-muxers --enable-muxer=mpegts --enable-muxer=mp4 --disable-demuxers --enable-demuxer=mpegts --enable-demuxer=mov --enable-demuxer=mpeg --enable-demuxer=mp4 --disable-debug --disable-decoders --enable-decoder=h264 --enable-decoder=aac --disable-devices --disable-encoders --enable-encoder=libx264 --disable-network --disable-ffserver --enable-version3 --enable-hardcoded-tables --disable-ffplay --disable-ffprobe --enable-gpl --enable-yasm --disable-doc --disable-shared --enable-static --pkg-config=/Users/Brian1/development/ffmpeg-android/ffmpeg-pkg-config --prefix=/Users/Brian1/development/ffmpeg-android/build/armeabi-v7a-neon --extra-cflags='-I/Users/Brian1/development/ffmpeg-android/toolchain-android/include -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-strict-overflow -fstack-protector-all -mfpu=neon' --extra-ldflags='-L/Users/Brian1/development/ffmpeg-android/toolchain-android/lib -Wl,-z,relro -Wl,-z,now -pie' --extra-libs=-lm --extra-cxxflags=
    07-14 22:30:35.963: D/ffmpeg(30354):   libavutil      54.  7.100 / 54.  7.100
    07-14 22:30:35.963: D/ffmpeg(30354):   libavcodec     56.  1.100 / 56.  1.100
    07-14 22:30:35.963: D/ffmpeg(30354):   libavformat    56.  4.101 / 56.  4.101
    07-14 22:30:35.963: D/ffmpeg(30354):   libavdevice    56.  0.100 / 56.  0.100
    07-14 22:30:35.963: D/ffmpeg(30354):   libavfilter     5.  1.100 /  5.  1.100
    07-14 22:30:35.963: D/ffmpeg(30354):   libswscale      3.  0.100 /  3.  0.100
    07-14 22:30:35.963: D/ffmpeg(30354):   libswresample   1.  1.100 /  1.  1.100
    07-14 22:30:35.963: D/ffmpeg(30354):   libpostproc    53.  0.100 / 53.  0.100
    07-14 22:30:35.963: D/ffmpeg(30354): Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/data/data/com.myapp.app/cache:temp/i7h4ajm0nim1mbcnrqotvrhhsc.mp4':
    07-14 22:30:35.963: D/ffmpeg(30354):   Metadata:
    07-14 22:30:35.963: D/ffmpeg(30354):     major_brand     : mp42
    07-14 22:30:35.963: D/ffmpeg(30354):     minor_version   : 0
    07-14 22:30:35.963: D/ffmpeg(30354):     compatible_brands: isommp42
    07-14 22:30:35.963: D/ffmpeg(30354):     creation_time   : 2015-07-15 05:30:32
    07-14 22:30:35.963: D/ffmpeg(30354):   Duration: 00:00:02.75, start: 0.000000, bitrate: 9315 kb/s
    07-14 22:30:35.963: D/ffmpeg(30354):     Stream #0:0(eng): Video: h264 (avc1 / 0x31637661), yuv420p, 960x720, 10062 kb/s, 29.97 fps, 29.97 tbr, 90k tbn, 180k tbc (default)
    07-14 22:30:35.963: D/ffmpeg(30354):     Metadata:
    07-14 22:30:35.963: D/ffmpeg(30354):       rotate          : 90
    07-14 22:30:35.963: D/ffmpeg(30354):       creation_time   : 2015-07-15 05:30:32
    07-14 22:30:35.963: D/ffmpeg(30354):       handler_name    : VideoHandle
    07-14 22:30:35.963: D/ffmpeg(30354):     Side data:
    07-14 22:30:35.963: D/ffmpeg(30354):       displaymatrix: rotation of -90.00 degrees
    07-14 22:30:35.963: D/ffmpeg(30354):     Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 151 kb/s (default)
    07-14 22:30:35.963: D/ffmpeg(30354):     Metadata:
    07-14 22:30:35.963: D/ffmpeg(30354):       creation_time   : 2015-07-15 05:30:32
    07-14 22:30:35.963: D/ffmpeg(30354):       handler_name    : SoundHandle
    07-14 22:30:35.963: D/ffmpeg(30354): [libx264 @ 0xb6808800] using SAR=4/3
    07-14 22:30:35.963: D/ffmpeg(30354): [libx264 @ 0xb6808800] using cpu capabilities: none!
    07-14 22:30:35.963: D/ffmpeg(30354): [libx264 @ 0xb6808800] profile Constrained Baseline, level 3.1
    07-14 22:30:35.963: D/ffmpeg(30354): [adts @ 0xb685b000] Using AVStream.codec.time_base as a timebase hint to the muxer is deprecated. Set AVStream.time_base instead.
    07-14 22:30:35.963: D/ffmpeg(30354): Output #0, mpegts, to '/data/data/com.myapp.app/cache:temp/p1t3bhs0oa3lpqa67g5i9ninm9.ts':
    07-14 22:30:35.963: D/ffmpeg(30354):   Metadata:
    07-14 22:30:35.963: D/ffmpeg(30354):     major_brand     : mp42
    07-14 22:30:35.963: D/ffmpeg(30354):     minor_version   : 0
    07-14 22:30:35.963: D/ffmpeg(30354):     compatible_brands: isommp42
    07-14 22:30:35.963: D/ffmpeg(30354):     encoder         : Lavf56.4.101
    07-14 22:30:35.963: D/ffmpeg(30354):     Stream #0:0(eng): Video: h264 (libx264), yuv420p, 720x960 [SAR 4:3 DAR 1:1], q=-1--1, 29.97 fps, 90k tbn, 29.97 tbc (default)
    07-14 22:30:35.963: D/ffmpeg(30354):     Metadata:
    07-14 22:30:35.963: D/ffmpeg(30354):       handler_name    : VideoHandle
    07-14 22:30:35.963: D/ffmpeg(30354):       creation_time   : 2015-07-15 05:30:32
    07-14 22:30:35.963: D/ffmpeg(30354):       rotate          : 0
    07-14 22:30:35.963: D/ffmpeg(30354):       encoder         : Lavc56.1.100 libx264
    07-14 22:30:35.963: D/ffmpeg(30354):     Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, 151 kb/s (default)
    07-14 22:30:35.963: D/ffmpeg(30354):     Metadata:
    07-14 22:30:35.963: D/ffmpeg(30354):       creation_time   : 2015-07-15 05:30:32
    07-14 22:30:35.963: D/ffmpeg(30354):       handler_name    : SoundHandle
    07-14 22:30:35.963: D/ffmpeg(30354): Stream mapping:
    07-14 22:30:35.963: D/ffmpeg(30354):   Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
    07-14 22:30:35.963: D/ffmpeg(30354):   Stream #0:1 -> #0:1 (copy)
    07-14 22:30:35.963: D/ffmpeg(30354): Press [q] to stop, [?] for help
    07-14 22:30:35.963: D/ffmpeg(30354): frame=   17 fps=0.0 q=27.0 size=       0kB time=00:00:00.36 bitrate=   0.0kbits/s    
    07-14 22:30:35.963: D/ffmpeg(30354): frame=   33 fps= 32 q=27.0 size=     164kB time=00:00:01.15 bitrate=1163.1kbits/s    
    07-14 22:30:35.963: D/ffmpeg(30354): frame=   46 fps= 30 q=29.0 size=     213kB time=00:00:01.33 b
    
  • Displaying Bitmaps sequentially, "like a video"

    15 juillet 2015, par Wamasa

    I'm trying to reproduce a video that is not android supported (like a .wmv video) in my app, and actually I'm able to grab every frame and create a Bitmap of it.

    So, now, I'm trying to show those bitmaps in a VideoView (or any other view), sequencially, something like a video.

    Some code:

    while (true) {
                    frame = frameGrabber.grab();
                    if (frame == null)
                        break;
                    frame2 =
                            IplImage.create(frame.width(), frame.height(),
                                    opencv_core.IPL_DEPTH_8U, 4);
                    opencv_imgproc.cvCvtColor(frame, frame2,
                            opencv_imgproc.CV_BGR2RGBA);
    
                    bm =
                            Bitmap.createBitmap(frame2.width(),
                                    frame2.height(), Bitmap.Config.ARGB_8888);
                    bm.copyPixelsFromBuffer(frame2.getByteBuffer());
                    canvas = new Canvas(bm);
                    mVideoView.draw(canvas);
                    canvas.save();
    

    It looks like I can grab every frame of the video (using ffmpeg), but I just don't know how to display them.

    By the way, I've already tried encoding this video to a .mp4 file and playing it on the VideoView, but it takes much time to process the whole video (1 hour), so, now, I'm trying to display it right away, without encoding it do .mp4 (or any other android supported video)

    Any advices?

  • Looking for video libraries for editing video on windwos/ios/azure service

    15 juillet 2015, par sanyam

    Which library would be a good bet in terms of ...
    1. Richness in features (I want to create a video from short clips and images with effects and filters). Think auto videos created from Google Photos.
    2. Extensibility - I would prefer using similar tech on IOS and Windows apps. Might have to offload some processing to a web service on Azure (windows or linux).
    3. Programmability - An API is preferred over command line as it gives more flexibility and better error handling.

    Given all these options, what is my best bet? I've only looked at ffmpeg till now, is there a better alternative?

  • ffmpeg segmentation with multiple mp4 files to HLS stream

    15 juillet 2015, par Endre Börcsök

    I'm trying to segment multiple mp4 files from a .txt as concatenate works, but it doesn't seem to work.

    I have concat.txt with the desired format:

    file video1.mp4
    file video2.mp4
    file video3.mp4
    

    etc...

    and my ffmpeg commands are:

    ffmpeg -i concat.txt -map 0 -codec:v libx264 -codec:a libfaac -f ssegment \
    -segment_list playlist.m3u8 -segment_list_flags +live -segment_time 10 out%03d.ts
    

    Unfortunately every mediaplayer drops an error on playback.

    I presume that I can't use this method to get done as concatenating. Do I have to concat all the mp4s into a single mp4, and segment that mp4 to a final m3u8? Or, can I segment the mp4s one by one and concat the .ts files to get better quality?

  • Celery to process task and modify the model fields

    15 juillet 2015, par Robin

    I would like to convert video into mp4 using ffmpeg and celery for the asynchronous task. When user uploads a video, it will be for the original_video and save it. After that I want celery to convert it into a different version for the mp4_720 field. However I am confused on how to apply that logic using celery.

    app.models.py:

    class Video(models.Model):
        title = models.CharField(max_length=75)
        pubdate = models.DateTimeField(default=timezone.now)
        original_video = models.FileField(upload_to=get_upload_file_name)
        mp4_720 = models.FileField(upload_to=get_upload_file_name, blank=True, null=True)
        converted = models.BooleanField(default=False)
    

    app.views.py:

    def upload_video(request):
        if request.POST:
            form = VideoForm(request.POST, request.FILES)
            if form.is_valid():
                video = form.save(commit=False)
                video.save()
    
                // Celery to convert the video
                convert_video.delay(video)
    
                return HttpResponseRedirect('/')
        else:
            form = VideoForm()
        return render(request, 'upload_video.html', {
            'form':form
        })
    

    app.tasks.py:

    @app.task
    def convert_video(video):
    
        // Convert the original video into required format and save it in the mp4_720 field using the following command:
        //subprocess.call('ffmpeg -i (path of the original_video) (video for mp4_720)')
    
        // Change the converted boolean field to True
    
        // Save
    

    Basically my question is how to save the converted video in mp4_720. Your help and guidance will be very much appreciated. Thank you.

    ** update **

    What I want that method to do is first convert the video.original_video and then save the converted video in the video.mp4_720 field. If all has been done correctly, change the video.converted to True. How do I define the method to do so?