Newest 'ffmpeg' Questions - Stack Overflow
Les articles publiés sur le site
-
How to join two images into one with FFmpeg ? [duplicate]
20 juin, par n2v2rda2There are two images: a.jpg and b.jpg.
I just want to know how to join them into one image using
ffmpeg
.How should I finish the
ffmpeg -i a.jpg -i b.jpg
command to get a c.jpg output image?This is an example of what I am trying to achieve:
a.jpg
b.jpg
c.jpg
-
Can't convert .ts files that downloaded from .m3u8 file to mp4
20 juin, par smartnimaI Have This Files:
001.ts 014.ts 027.ts 040.ts 053.ts 066.ts 079.ts 092.ts 105.ts 118.ts 131.ts 144.ts 157.ts 170.ts 183.ts 196.ts 209.ts 222.ts 235.ts 248.ts 261.ts 274.ts 287.ts 300.ts 313.ts 326.ts 002.ts 015.ts 028.ts 041.ts 054.ts 067.ts 080.ts 093.ts 106.ts 119.ts 132.ts 145.ts 158.ts 171.ts 184.ts 197.ts 210.ts 223.ts 236.ts 249.ts 262.ts 275.ts 288.ts 301.ts 314.ts 327.ts 003.ts 016.ts 029.ts 042.ts 055.ts 068.ts 081.ts 094.ts 107.ts 120.ts 133.ts 146.ts 159.ts 172.ts 185.ts 198.ts 211.ts 224.ts 237.ts 250.ts 263.ts 276.ts 289.ts 302.ts 315.ts 328.ts 004.ts 017.ts 030.ts 043.ts 056.ts 069.ts 082.ts 095.ts 108.ts 121.ts 134.ts 147.ts 160.ts 173.ts 186.ts 199.ts 212.ts 225.ts 238.ts 251.ts 264.ts 277.ts 290.ts 303.ts 316.ts 329.ts 005.ts 018.ts 031.ts 044.ts 057.ts 070.ts 083.ts 096.ts 109.ts 122.ts 135.ts 148.ts 161.ts 174.ts 187.ts 200.ts 213.ts 226.ts 239.ts 252.ts 265.ts 278.ts 291.ts 304.ts 317.ts 330.ts 006.ts 019.ts 032.ts 045.ts 058.ts 071.ts 084.ts 097.ts 110.ts 123.ts 136.ts 149.ts 162.ts 175.ts 188.ts 201.ts 214.ts 227.ts 240.ts 253.ts 266.ts 279.ts 292.ts 305.ts 318.ts 331.ts 007.ts 020.ts 033.ts 046.ts 059.ts 072.ts 085.ts 098.ts 111.ts 124.ts 137.ts 150.ts 163.ts 176.ts 189.ts 202.ts 215.ts 228.ts 241.ts 254.ts 267.ts 280.ts 293.ts 306.ts 319.ts 332.ts 008.ts 021.ts 034.ts 047.ts 060.ts 073.ts 086.ts 099.ts 112.ts 125.ts 138.ts 151.ts 164.ts 177.ts 190.ts 203.ts 216.ts 229.ts 242.ts 255.ts 268.ts 281.ts 294.ts 307.ts 320.ts 333.ts 009.ts 022.ts 035.ts 048.ts 061.ts 074.ts 087.ts 100.ts 113.ts 126.ts 139.ts 152.ts 165.ts 178.ts 191.ts 204.ts 217.ts 230.ts 243.ts 256.ts 269.ts 282.ts 295.ts 308.ts 321.ts 334.ts 010.ts 023.ts 036.ts 049.ts 062.ts 075.ts 088.ts 101.ts 114.ts 127.ts 140.ts 153.ts 166.ts 179.ts 192.ts 205.ts 218.ts 231.ts 244.ts 257.ts 270.ts 283.ts 296.ts 309.ts 322.ts 011.ts 024.ts 037.ts 050.ts 063.ts 076.ts 089.ts 102.ts 115.ts 128.ts 141.ts 154.ts 167.ts 180.ts 193.ts 206.ts 219.ts 232.ts 245.ts 258.ts 271.ts 284.ts 297.ts 310.ts 323.ts 012.ts 025.ts 038.ts 051.ts 064.ts 077.ts 090.ts 103.ts 116.ts 129.ts 142.ts 155.ts 168.ts 181.ts 194.ts 207.ts 220.ts 233.ts 246.ts 259.ts 272.ts 285.ts 298.ts 311.ts 324.ts 013.ts 026.ts 039.ts 052.ts 065.ts 078.ts 091.ts 104.ts 117.ts 130.ts 143.ts 156.ts 169.ts 182.ts 195.ts 208.ts 221.ts 234.ts 247.ts 260.ts 273.ts 286.ts 299.ts 312.ts 325.ts
That I Downloaded With This Python Program (m3u8 File Does Not Work!):
import requests import shutil import os import subprocess def strip_end(text, suffix): if not text.endswith(suffix): return text return text[:len(text)-len(suffix)] def download_file(url): cwd = os.getcwd() command = f"wget -O {cwd}/ts_files/{url.split('/')[-1]} {url}" subprocess.call(command, shell=True) base_url = "https://stream.example.com/video/2021/example/720p_{}.ts" if not os.path.exists('ts_files'): print('ts_file folder is not found, creating the folder.') os.makedirs('ts_files') i = 1 while True: if len(str(i)) == 1: num = f"00{i}" elif len(str(i)) == 2: num = f"0{i}" else: num = str(i) url = base_url.replace("{}", num) r = requests.get(url, stream=True) print(f'downloading {i}') if r.status_code != 404: download_file(url) # comment out this line to download ts files. else: print("404") break i = i+1 cwd = os.getcwd() # Get the current working directory (cwd) TS_DIR = 'ts_files' with open('merged.ts', 'wb') as merged: for ts_file in os.listdir(f'{cwd}/{TS_DIR}'): with open(f'{cwd}/{TS_DIR}/{ts_file}', 'rb') as mergefile: shutil.copyfileobj(mergefile, merged)
My Problem Is When I Want To Convert All This Files To One .ts File And Then An MP4 File With ffmpeg, I Get An Error:
nima@funlife:~/ts_files$ cat ./*.ts > all.ts nima@funlife:~/ts_files$ ffmpeg -i all.ts -acodec copy -vcodec copy all.mp4 ffmpeg version 5.0.1-3+b1 Copyright (c) 2000-2022 the FFmpeg developers built with gcc 11 (Debian 11.3.0-4) configuration: --prefix=/usr --extra-version=3+b1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libglslang --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librist --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --disable-sndio --enable-pocketsphinx --enable-librsvg --enable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libplacebo --enable-libx264 --enable-shared libavutil 57. 17.100 / 57. 17.100 libavcodec 59. 18.100 / 59. 18.100 libavformat 59. 16.100 / 59. 16.100 libavdevice 59. 4.100 / 59. 4.100 libavfilter 8. 24.100 / 8. 24.100 libswscale 6. 4.100 / 6. 4.100 libswresample 4. 3.100 / 4. 3.100 libpostproc 56. 3.100 / 56. 3.100 all.ts: Invalid data found when processing input
.ts Files Content Is Like This:
}��,.g���}�� �����c����Ww�c���c���eo��m�����ŧ� 䱉 �b(+��D�FG�zPe��7�&#bz�1ɶ��� C �`,��>Ϲc4J��̀��T�I}�"��ކ�R�1��w͋� "� <�#B`ƪ�̸�co �9���+��W� P���N���w��T\5g�� \�E�N�E�v��͑4f��U�@]�ΩX�U�x�E��bwm=ְ�iA�����p���M�����\=�_�I3C�hL�h����0)�ο��*��`���eZ� �ؗ4To�0V��S,�+�>�8_]�W�lNJD�|7e�2s�1X)̃5�0h�������~8ߩg���?e��EK�>۷�L ��:6|������>\ �N�WW��,�w bk��1?*��/��/�5��k����~�� Lޕ}�a���2�{��l��$�d=����g�{a2��L����� jҫַ��ʿ�"1`ZZ.he)�=�x��E_4:Vg�����H=���x1�����}��W::y�
Are They Encrypted Or Something? I'm Trying To Do This Works With Debian 11.3.0-4, Python 3.10.5
Edit: Thanks Johnny, I Saw This Post: How to concatenate two MP4 files using FFmpeg? I Tried But I Get An Error Again!
nima@funlife:~/ts_files$ ffmpeg -f concat -i file.txt -c copy output.ts ffmpeg version 5.0.1-3+b1 Copyright (c) 2000-2022 the FFmpeg developers built with gcc 11 (Debian 11.3.0-4) configuration: --prefix=/usr --extra-version=3+b1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libglslang --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librist --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --disable-sndio --enable-pocketsphinx --enable-librsvg --enable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libplacebo --enable-libx264 --enable-shared libavutil 57. 17.100 / 57. 17.100 libavcodec 59. 18.100 / 59. 18.100 libavformat 59. 16.100 / 59. 16.100 libavdevice 59. 4.100 / 59. 4.100 libavfilter 8. 24.100 / 8. 24.100 libswscale 6. 4.100 / 6. 4.100 libswresample 4. 3.100 / 4. 3.100 libpostproc 56. 3.100 / 56. 3.100 [concat @ 0x55932dbf2500] Impossible to open '001.ts' file.txt: Invalid data found when processing input
Same Error With ffmpeg -f concat -safe 0 -i file.txt -c copy output.ts
file.txt is The List Of Files!
-
Why does FFmpeg's xfade filter need the timebase and frame rate to match ? [closed]
19 juin, par Hashim AzizAs I discovered not long ago, and recently had to rediscover after trying to use it again,
xfade
- the crossfade filter that FFmpeg introduced in 2019 - requires that both inputs have a matching timebase (TBN) and frame rate (FPS).This is "resolved" by explicitly making them the same, by adding
settb=AVTB
and a hardcoded FPS to both streams (there doesn't seem to be a constant equivalent toAVTB
for FPS) prior to usingxfade
:-filter_complex \ [0:v]settb=AVTB,fps=29[v0]; [1:v]settb=AVTB,fps=29[v1]; [v0][v1]xfade=transition=fade:duration=$fadeduration:offset=$fadetime,format=yuv420p[faded];
However, I'm confused as to why is this necessary in the first place. The
concat
filter works similarly in that it requires all its inputs to have matching parameters, but this makes sense because the whole point ofconcat
is to avoid re-encoding. If thexfade
filter is (presumably) re-encoding anyway, why do the timebase and frame rate still need to match?Is there a reason the devs decided to enforce these limitations for the filter when they don't seem to be technically necessary?
-
executing bash command on each file in directory and renaming new generated file [closed]
19 juin, par RolfbrugeI'm trying to modify an existing bash script to resample .mp3 files or resample/extract .mp3 sound track from .mp4 files. In each case renaming the output appears to be required by the ffmpeg syntax.
An example to invoke ffmpeg from cli pertaining to .mp3 files one at a time:
ffmpeg -i "filename" -ab 32000 -ar 22050 "newfilename"
It gives me a syntax error:
for element in $(find /media/mp3 -type f -name "*.mp3"); do (ffmpeg -i "$element" -ab 32000 -ar 22050) "$element".mp2 ;
bash: syntax error near unexpected token `"$element".mp2'
Additionally, if there are a mixture of .mp3 and .mp4 files in a directory, I would like to extract the mp3 soundtrack from mp4 media which uses similar ffmpeg command:
ffmpeg -i "filename.mp4" -ab 32000 -ar 22050 "newfilename.mp3"
I have been experimenting with .mp3 files to do the resample of every file in a directory and am attempting to follow the ffmpeg syntax but unsure of how to resolve the "syntax error" issue.
Can someone give me a pointer on the correct .mp3/.mp4 extraction / resample syntax?
for element in $(find /media/mp3 -type f -name "*.mp3"); do (ffmpeg -i "$element" -ab 48000 -ar 22050) "$element".mp2
bash: syntax error near unexpected token `"$element".mp2' ;
Expecting to resample each .mp3 file in the specified directory and generate a resampled file with new name based on the input file, in the same directory.
Pertaining to extracting/resampling .mp4 to obtain .mp3:
for element in $(find /media/mp3 -type f -name "*.mp4"); do (ffmpeg -i "$element" -ab 48000 -ar 22050) "$element".mp3 ;
Expecting to extract/resample each .mp4 file in the specified directory and generate a resampled .mp3 soundtrack file in the same directory.
-
Using FFmpeg in .net ?
17 juin, par danielSo I know its a fairly big challenge but I want to write a basic movie player/converter in c# using the FFmpeg library. However, the first obstacle I need to overcome is wrapping the FFmpeg library in c#. I've downloaded ffmpeg but couldn't compile it on Windows, so I downloaded a precompiled version for me. Ok awesome. Then I started looking for C# wrappers.
I have looked around and have found a few wrappers such as SharpFFmpeg (http://sourceforge.net/projects/sharpffmpeg/) and ffmpeg-sharp (http://code.google.com/p/ffmpeg-sharp/). First of all, I wanted to use ffmpeg-sharp as its LGPL and SharpFFmpeg is GPL. However, it had quite a few compile errors. Turns out it was written for the mono compiler, I tried compiling it with mono but couldn't figure out how. I then started to manually fix the compiler errors myself, but came across a few scary ones and thought I'd better leave those alone. So I gave up on ffmpeg-sharp.
Then I looked at SharpFFmpeg and it looks like what I want, all the functions P/Invoked for me. However its GPL? Both the AVCodec.cs and AVFormat.cs files look like ports of avcodec.c and avformat.c which I reckon I could port myself? Then not have to worry about licencing.
But I want to get this right before I go ahead and start coding. Should I:
- Write my own C++ library for interacting with ffmpeg, then have my C# program talk to the C++ library in order to play/convert videos etc.
OR
- Port avcodec.h and avformat.h (is that all i need?) to c# by using a whole lot of DllImports and write it entirely in C#?
First of all consider that I'm not great at C++ as I rarely use it but I know enough to get around. The reason I'm thinking #1 might be the better option is that most FFmpeg tutorials are in C++ and I'd also have more control over memory management than if I was to do it in c#.
What do you think? Also would you happen to have any useful links (perhaps a tutorial) for using FFmpeg?