Newest 'ffmpeg' Questions - Stack Overflow

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

Les articles publiés sur le site

  • How to join two images into one with FFmpeg ? [duplicate]

    20 juin, par n2v2rda2

    There 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:

    1. a.jpg

      a.jpg

    2. b.jpg

      b.jpg

    3. c.jpg

      a.jpg and b.jpg side-by-side on one image

  • Can't convert .ts files that downloaded from .m3u8 file to mp4

    20 juin, par smartnima

    I 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 Aziz

    As 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 to AVTB for FPS) prior to using xfade:

    -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 of concat is to avoid re-encoding. If the xfade 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 Rolfbruge

    I'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 daniel

    So 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:

    1. 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

    1. 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?