Guest
Wie kann ich die Dimensionen des Videos durch FFMPEG-Python ändern?
Post
by Guest » 25 Jan 2025, 13:40
Ich versuche, eine Videodatei zu ändern, die ein Benutzer mit FFMPEG-Python auf Django hochgeladen hat. Die Dokumentation ist nicht sehr leicht zu verstehen, daher habe ich versucht, dies aus verschiedenen Quellen zusammenzuschuhen. Für den Benutzer. Das Problem, mit dem ich ausgesetzt bin, ist, dass ich die Videodatei nicht ändern kann. Ich habe zwei verschiedene Ansätze ausprobiert: < /p>
Code: Select all
from django.db import models
from io import BytesIO
from myapp.models import MediaModel
def resize_video(mypk: str) -> None:
instance = MediaModel.objects.get(pk=mypk)
media_instance: models.FileField = instance.media
media_output = "test.mp4"
buffer = BytesIO()
for chunk in media_instance.chunks():
buffer.write(chunk)
stream_video = ffmpeg.input("pipe:").video.filter("scale", 720, -1) # resize to 720px width
stream_audio = ffmpeg.input("pipe:").audio
process = (
ffmpeg.output(stream_video, stream_audio, media_output, acodec="aac")
.overwrite_output()
.run_async(pipe_stdin=True, quiet=True)
)
buffer.seek(0)
process_out, process_err = process.communicate(input=buffer.getbuffer())
# (pdb) process_out
# b''
# attempting to use `.concat` instead
process2 = (
ffmpeg.concat(stream_video, stream_audio, v=1, a=1)
.output(media_output)
.overwrite_output()
.run_async(pipe_stdin=True, quiet=True)
)
buffer.seek(0)
process2_out, process2_err = process2.communicate(input=buffer.getbuffer())
# (pdb) process2_out
# b''
< /code>
Wie wir sehen können, ist die Ausgabe unabhängig davon, welcher Ansatz eine leere Binärdatum ist. Die folgende Nachricht generieren die folgende Nachricht:
ffmpeg version N-111491-g31979127f8-20230717 Copyright (c) 2000-2023 the
FFmpeg developers
built with gcc 13.1.0 (crosstool-NG 1.25.0.196_227d99d)
configuration: --prefix=/ffbuild/prefix --pkg-config-flags=--static
--pkg-config=pkg-config --cross-prefix=x86_64-w64-mingw32- --arch=x86_64
--target-os=mingw32 --enable-gpl --enable-version3 --disable-debug
--disable-w32threads --enable-pthreads --enable-iconv --enable-libxml2
--enable-zlib --enable-libfreetype --enable-libfribidi --enable-gmp
--enable-lzma --enable-fontconfig --enable-libvorbis --enable-opencl
--disable-libpulse --enable-libvmaf --disable-libxcb --disable-xlib
--enable-amf --enable-libaom --enable-libaribb24 --enable-avisynth
--enable-chromaprint --enable-libdav1d --enable-libdavs2
--disable-libfdk-aac --enable-ffnvcodec --enable-cuda-llvm --enable-frei0r
--enable-libgme --enable-libkvazaar --enable-libass --enable-libbluray
--enable-libjxl --enable-libmp3lame --enable-libopus --enable-librist
--enable-libssh --enable-libtheora --enable-libvpx --enable-libwebp
--enable-lv2 --enable-libvpl --enable-openal --enable-libopencore-amrnb
--enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg
--enable-libopenmpt --enable-librav1e --enable-librubberband
--enable-schannel --enable-sdl2 --enable-libsoxr --enable-libsrt
--enable-libsvtav1 --enable-libtwolame --enable-libuavs3d --disable-libdrm
--disable-vaapi --enable-libvidstab --enable-vulkan --enable-libshaderc
--enable-libplacebo --enable-libx264 --enable-libx265 --enable-libxavs2
--enable-libxvid --enable-libzimg --enable-libzvbi
--extra-cflags=-DLIBTWOLAME_STATIC --extra-cxxflags=
--extra-ldflags=-pthread --extra-ldexeflags= --extra-libs=-lgomp
--extra-version=20230717
libavutil 58. 14.100 / 58. 14.100
libavcodec 60. 22.100 / 60. 22.100
libavformat 60. 10.100 / 60. 10.100
libavdevice 60. 2.101 / 60. 2.101
libavfilter 9. 8.102 / 9. 8.102
libswscale 7. 3.100 / 7. 3.100
libswresample 4. 11.100 / 4. 11.100
libpostproc 57. 2.100 / 57. 2.100
"Input #0, mov,mp4,m4a,3gp,3g2,mj2, frompipe:':\r\n"
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: mp42mp41
creation_time : 2020-11-10T15:01:09.000000Z
Duration: 00:00:04.16, start: 0.000000, bitrate: N/A
Stream #0:0[0x1](eng): Video: h264 (Main) (avc1 / 0x31637661),
yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 2649 kb/s, 25 fps, 25
tbr, 25k tbn (default)
Metadata:
creation_time : 2020-11-10T15:01:09.000000Z
handler_name : ?Mainconcept Video Media Handler
vendor_id : [0][0][0][0]
encoder : AVC Coding
Stream #0:1[0x2](eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz,
stereo, fltp, 317 kb/s (default)
Metadata:
creation_time : 2020-11-10T15:01:09.000000Z
handler_name : #Mainconcept MP4 Sound Media Handler
vendor_id : [0][0][0][0]
Stream mapping:
Stream #0:0 (h264) -> scale:default (graph 0)
scale:default (graph 0) -> Stream #0:0 (libx264)
Stream #0:1 -> #0:1 (aac (native) -> aac (native))
[libx264 @ 00000243a23a1100] using SAR=1/1
[libx264 @ 00000243a23a1100] using cpu capabilities: MMX2 SSE2Fast SSSE3
SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 00000243a23a1100] profile High, level 3.0, 4:2:0, 8-bit
[libx264 @ 00000243a23a1100] 264 - core 164 - H.264/MPEG-4 AVC codec -
Copyleft 2003-2023 - http://www.videolan.org/x264.html - options: cabac=1
ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00
mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11
fast_pskip=1 chroma_qp_offset=-2 threads=6 lookahead_threads=1
sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0
constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1
weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40
intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0
qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
"Output #0, mp4, toaa37f8d7685f4df9af85b1cdcd95997e.mp4':\r\n"
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: mp42mp41
encoder : Lavf60.10.100
Stream #0:0: Video: h264 (avc1 / 0x31637661), yuv420p(tv, progressive),
800x450 [SAR 1:1 DAR 16:9], q=2-31, 25 fps, 12800 tbn
Metadata:
encoder : Lavc60.22.100 libx264
Side data:
cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo,
fltp, 128 kb/s (default)
Metadata:
creation_time : 2020-11-10T15:01:09.000000Z
handler_name : #Mainconcept MP4 Sound Media Handler
vendor_id : [0][0][0][0]
encoder : Lavc60.22.100 aac
frame= 0 fps=0.0 q=0.0 size= 0kB time=N/A bitrate=N/A
speed=N/A \r'
frame= 21 fps=0.0 q=28.0 size= 0kB time=00:00:02.75 bitrate=
0.1kbits/s speed=4.75x \r'
[out#0/mp4 @ 00000243a230bd80] video:91kB audio:67kB subtitle:0kB other
streams:0kB global headers:0kB muxing overhead: 2.838559%
frame= 104 fps=101 q=-1.0 Lsize= 162kB time=00:00:04.13 bitrate=
320.6kbits/s speed=4.02x
[libx264 @ 00000243a23a1100] frame I:1 Avg QP:18.56 size: 2456
[libx264 @ 00000243a23a1100] frame P:33 Avg QP:16.86 size: 1552
[libx264 @ 00000243a23a1100] frame B:70 Avg QP:17.55 size: 553
[libx264 @ 00000243a23a1100] consecutive B-frames: 4.8% 11.5% 14.4%
69.2%
[libx264 @ 00000243a23a1100] mb I I16..4: 17.3% 82.1% 0.6%
[libx264 @ 00000243a23a1100] mb P I16..4: 5.9% 15.2% 0.4% P16..4: 18.3%
0.9% 0.4% 0.0% 0.0% skip:58.7%
[libx264 @ 00000243a23a1100] mb B I16..4: 0.8% 0.3% 0.0% B16..8: 15.4%
1.0% 0.0% direct: 3.6% skip:78.9% L0:34.2% L1:64.0% BI: 1.7%
[libx264 @ 00000243a23a1100] 8x8 transform intra:68.2% inter:82.3%
[libx264 @ 00000243a23a1100] coded y,uvDC,uvAC intra: 4.2% 18.4% 1.2% inter:
1.0% 6.9% 0.0%
[libx264 @ 00000243a23a1100] i16 v,h,dc,p: 53% 25% 8% 14%
[libx264 @ 00000243a23a1100] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 19% 6% 70% 1%
1% 1% 1% 0% 0%
[libx264 @ 00000243a23a1100] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 46% 21% 15% 2%
5% 4% 3% 3% 1%
[libx264 @ 00000243a23a1100] i8c dc,h,v,p: 71% 15% 13% 1%
[libx264 @ 00000243a23a1100] Weighted P-Frames: Y:30.3% UV:15.2%
[libx264 @ 00000243a23a1100] ref P L0: 46.7% 7.5% 34.6% 7.3% 3.9%
[libx264 @ 00000243a23a1100] ref B L0: 88.0% 10.5% 1.5%
[libx264 @ 00000243a23a1100] ref B L1: 98.1% 1.9%
[libx264 @ 00000243a23a1100] kb/s:177.73
[aac @ 00000243a23a2e00] Qavg: 1353.589
Ich bin im Moment ratlos, würde mich über Feedback/Lösung freuen.
1737808826
Guest
Ich versuche, eine Videodatei zu ändern, die ein Benutzer mit FFMPEG-Python auf Django hochgeladen hat. Die Dokumentation ist nicht sehr leicht zu verstehen, daher habe ich versucht, dies aus verschiedenen Quellen zusammenzuschuhen. Für den Benutzer. Das Problem, mit dem ich ausgesetzt bin, ist, dass ich die Videodatei nicht ändern kann. Ich habe zwei verschiedene Ansätze ausprobiert: < /p> [code]from django.db import models from io import BytesIO from myapp.models import MediaModel def resize_video(mypk: str) -> None: instance = MediaModel.objects.get(pk=mypk) media_instance: models.FileField = instance.media media_output = "test.mp4" buffer = BytesIO() for chunk in media_instance.chunks(): buffer.write(chunk) stream_video = ffmpeg.input("pipe:").video.filter("scale", 720, -1) # resize to 720px width stream_audio = ffmpeg.input("pipe:").audio process = ( ffmpeg.output(stream_video, stream_audio, media_output, acodec="aac") .overwrite_output() .run_async(pipe_stdin=True, quiet=True) ) buffer.seek(0) process_out, process_err = process.communicate(input=buffer.getbuffer()) # (pdb) process_out # b'' # attempting to use `.concat` instead process2 = ( ffmpeg.concat(stream_video, stream_audio, v=1, a=1) .output(media_output) .overwrite_output() .run_async(pipe_stdin=True, quiet=True) ) buffer.seek(0) process2_out, process2_err = process2.communicate(input=buffer.getbuffer()) # (pdb) process2_out # b'' < /code> Wie wir sehen können, ist die Ausgabe unabhängig davon, welcher Ansatz eine leere Binärdatum ist. Die folgende Nachricht generieren die folgende Nachricht: ffmpeg version N-111491-g31979127f8-20230717 Copyright (c) 2000-2023 the FFmpeg developers built with gcc 13.1.0 (crosstool-NG 1.25.0.196_227d99d) configuration: --prefix=/ffbuild/prefix --pkg-config-flags=--static --pkg-config=pkg-config --cross-prefix=x86_64-w64-mingw32- --arch=x86_64 --target-os=mingw32 --enable-gpl --enable-version3 --disable-debug --disable-w32threads --enable-pthreads --enable-iconv --enable-libxml2 --enable-zlib --enable-libfreetype --enable-libfribidi --enable-gmp --enable-lzma --enable-fontconfig --enable-libvorbis --enable-opencl --disable-libpulse --enable-libvmaf --disable-libxcb --disable-xlib --enable-amf --enable-libaom --enable-libaribb24 --enable-avisynth --enable-chromaprint --enable-libdav1d --enable-libdavs2 --disable-libfdk-aac --enable-ffnvcodec --enable-cuda-llvm --enable-frei0r --enable-libgme --enable-libkvazaar --enable-libass --enable-libbluray --enable-libjxl --enable-libmp3lame --enable-libopus --enable-librist --enable-libssh --enable-libtheora --enable-libvpx --enable-libwebp --enable-lv2 --enable-libvpl --enable-openal --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopenmpt --enable-librav1e --enable-librubberband --enable-schannel --enable-sdl2 --enable-libsoxr --enable-libsrt --enable-libsvtav1 --enable-libtwolame --enable-libuavs3d --disable-libdrm --disable-vaapi --enable-libvidstab --enable-vulkan --enable-libshaderc --enable-libplacebo --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libzimg --enable-libzvbi --extra-cflags=-DLIBTWOLAME_STATIC --extra-cxxflags= --extra-ldflags=-pthread --extra-ldexeflags= --extra-libs=-lgomp --extra-version=20230717 libavutil 58. 14.100 / 58. 14.100 libavcodec 60. 22.100 / 60. 22.100 libavformat 60. 10.100 / 60. 10.100 libavdevice 60. 2.101 / 60. 2.101 libavfilter 9. 8.102 / 9. 8.102 libswscale 7. 3.100 / 7. 3.100 libswresample 4. 11.100 / 4. 11.100 libpostproc 57. 2.100 / 57. 2.100 "Input #0, mov,mp4,m4a,3gp,3g2,mj2, frompipe:':\r\n" Metadata: major_brand : mp42 minor_version : 0 compatible_brands: mp42mp41 creation_time : 2020-11-10T15:01:09.000000Z Duration: 00:00:04.16, start: 0.000000, bitrate: N/A Stream #0:0[0x1](eng): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 2649 kb/s, 25 fps, 25 tbr, 25k tbn (default) Metadata: creation_time : 2020-11-10T15:01:09.000000Z handler_name : ?Mainconcept Video Media Handler vendor_id : [0][0][0][0] encoder : AVC Coding Stream #0:1[0x2](eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 317 kb/s (default) Metadata: creation_time : 2020-11-10T15:01:09.000000Z handler_name : #Mainconcept MP4 Sound Media Handler vendor_id : [0][0][0][0] Stream mapping: Stream #0:0 (h264) -> scale:default (graph 0) scale:default (graph 0) -> Stream #0:0 (libx264) Stream #0:1 -> #0:1 (aac (native) -> aac (native)) [libx264 @ 00000243a23a1100] using SAR=1/1 [libx264 @ 00000243a23a1100] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2 [libx264 @ 00000243a23a1100] profile High, level 3.0, 4:2:0, 8-bit [libx264 @ 00000243a23a1100] 264 - core 164 - H.264/MPEG-4 AVC codec - Copyleft 2003-2023 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00 "Output #0, mp4, toaa37f8d7685f4df9af85b1cdcd95997e.mp4':\r\n" Metadata: major_brand : mp42 minor_version : 0 compatible_brands: mp42mp41 encoder : Lavf60.10.100 Stream #0:0: Video: h264 (avc1 / 0x31637661), yuv420p(tv, progressive), 800x450 [SAR 1:1 DAR 16:9], q=2-31, 25 fps, 12800 tbn Metadata: encoder : Lavc60.22.100 libx264 Side data: cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default) Metadata: creation_time : 2020-11-10T15:01:09.000000Z handler_name : #Mainconcept MP4 Sound Media Handler vendor_id : [0][0][0][0] encoder : Lavc60.22.100 aac frame= 0 fps=0.0 q=0.0 size= 0kB time=N/A bitrate=N/A speed=N/A \r' frame= 21 fps=0.0 q=28.0 size= 0kB time=00:00:02.75 bitrate= 0.1kbits/s speed=4.75x \r' [out#0/mp4 @ 00000243a230bd80] video:91kB audio:67kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 2.838559% frame= 104 fps=101 q=-1.0 Lsize= 162kB time=00:00:04.13 bitrate= 320.6kbits/s speed=4.02x [libx264 @ 00000243a23a1100] frame I:1 Avg QP:18.56 size: 2456 [libx264 @ 00000243a23a1100] frame P:33 Avg QP:16.86 size: 1552 [libx264 @ 00000243a23a1100] frame B:70 Avg QP:17.55 size: 553 [libx264 @ 00000243a23a1100] consecutive B-frames: 4.8% 11.5% 14.4% 69.2% [libx264 @ 00000243a23a1100] mb I I16..4: 17.3% 82.1% 0.6% [libx264 @ 00000243a23a1100] mb P I16..4: 5.9% 15.2% 0.4% P16..4: 18.3% 0.9% 0.4% 0.0% 0.0% skip:58.7% [libx264 @ 00000243a23a1100] mb B I16..4: 0.8% 0.3% 0.0% B16..8: 15.4% 1.0% 0.0% direct: 3.6% skip:78.9% L0:34.2% L1:64.0% BI: 1.7% [libx264 @ 00000243a23a1100] 8x8 transform intra:68.2% inter:82.3% [libx264 @ 00000243a23a1100] coded y,uvDC,uvAC intra: 4.2% 18.4% 1.2% inter: 1.0% 6.9% 0.0% [libx264 @ 00000243a23a1100] i16 v,h,dc,p: 53% 25% 8% 14% [libx264 @ 00000243a23a1100] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 19% 6% 70% 1% 1% 1% 1% 0% 0% [libx264 @ 00000243a23a1100] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 46% 21% 15% 2% 5% 4% 3% 3% 1% [libx264 @ 00000243a23a1100] i8c dc,h,v,p: 71% 15% 13% 1% [libx264 @ 00000243a23a1100] Weighted P-Frames: Y:30.3% UV:15.2% [libx264 @ 00000243a23a1100] ref P L0: 46.7% 7.5% 34.6% 7.3% 3.9% [libx264 @ 00000243a23a1100] ref B L0: 88.0% 10.5% 1.5% [libx264 @ 00000243a23a1100] ref B L1: 98.1% 1.9% [libx264 @ 00000243a23a1100] kb/s:177.73 [aac @ 00000243a23a2e00] Qavg: 1353.589 [/code] Ich bin im Moment ratlos, würde mich über Feedback/Lösung freuen.