Newest 'ffmpeg' Questions - Stack Overflow
Les articles publiés sur le site
-
FFMPEG command to crop and transpose video comes out zoomed in bad quality
15 juillet 2015, par BrianI'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 WamasaI'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 sanyamWhich 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ökI'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 RobinI would like to convert video into mp4 using
ffmpeg
andcelery
for the asynchronous task. When user uploads a video, it will be for theoriginal_video
and save it. After that I want celery to convert it into a different version for themp4_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?