Skip to content

Instantly share code, notes, and snippets.

@tkt028
Forked from 44213/ffmpeg-commands.sh
Created January 23, 2022 05:02
Show Gist options
  • Save tkt028/f638992216353686cc3088df6df53ad8 to your computer and use it in GitHub Desktop.
Save tkt028/f638992216353686cc3088df6df53ad8 to your computer and use it in GitHub Desktop.

Revisions

  1. @rowe-morehouse rowe-morehouse renamed this gist Sep 27, 2020. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  2. @rowe-morehouse rowe-morehouse created this gist Sep 27, 2020.
    344 changes: 344 additions & 0 deletions ffmpeg-commands.md
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,344 @@
    # To extract the sound from a video and save it as MP3:
    ffmpeg -i <video.mp4> -vn <sound>.mp3

    # To convert frames from a video or GIF into individual numbered images:
    ffmpeg -i <video.mpg|video.gif> <frame_%d.png>

    # To combine numbered images (frame_1.jpg, frame_2.jpg, etc) into a video or GIF:
    ffmpeg -i <frame_%d.jpg> -f image2 <video.mpg|video.gif>

    # To quickly extract a single frame from a video at time mm:ss and save it as a 128x128 resolution image:
    ffmpeg -ss <mm:ss> -i <video.mp4> -frames 1 -s <128x128> -f image2 <image.png>

    # To trim a video from a given start time mm:ss to an end time mm2:ss2 (omit the -to flag to trim till the end):
    ffmpeg -ss <mm:ss> -to <mm2:ss2> -i <video.mp4> -codec copy <output.mp4>

    # To convert AVI video to MP4. AAC Audio @ 128kbit, h264 Video @ CRF 23:
    ffmpeg -i <input_video>.avi -codec:audio aac -b:audio 128k -codec:video libx264 -crf 23 <output_video>.mp4

    # To remux MKV video to MP4 without re-encoding audio or video streams:
    ffmpeg -i <input_video>.mkv -codec copy <output_video>.mp4

    # To convert MP4 video to VP9 codec. For the best quality, use a CRF value (recommended range 15-35) and -b:video MUST be 0:
    ffmpeg -i <input_video>.mp4 -codec:video libvpx-vp9 -crf <30> -b:video 0 -codec:audio libopus -vbr on -threads <number_of_threads> <output_video>.webm

    # -----------------------------------------------------------------------------

    ##
    # To join/concatenate two mp4 videos (use double-quotes in Windows):
    #
    # http://www.kolor.com/wiki-en/action/view/Autopano_Video_-_Concatenate_several_mp4
    ##
    ffmpeg -i one.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts one.ts
    ffmpeg -i two.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts two.ts
    ffmpeg -i "concat:one.ts|two.ts" -c copy -bsf:a aac_adtstoasc combined.mp4
    # cleanup
    rm -f one.ts two.ts


    # To print file metadata:
    ffmpeg -i path/to/file.ext

    # To convert a video to compatible HTML5 video format (mp4): (https://gist.github.com/yellowled/1439610)
    ffmpeg -i infile.ext -acodec aac -strict experimental -ac 2 -ab 128k -vcodec libx264 -preset slow -f mp4 -crf 22 outfile.mp4

    # To convert all m4a files to mp3:
    for f in *.m4a; do ffmpeg -i "$f" -acodec libmp3lame -ab 320k "${f%.m4a}.mp3"; done

    # To generate a 10-second audio clip:
    #
    # -ss : start time
    # -t : seconds to cut
    # -autoexit : closes ffplay as soon as the audio finishes
    ffmpeg -ss 00:34:24.85 -t 10 -i path/to/file.mp4 -f mp3 pipe:play | ffplay -i pipe:play -autoexit

    # To generate a 5-second video clip (from the beginning "-ss 0" of video):
    #
    # -ss : start time of clip (position)
    # -t : duration of clip
    ffmpeg -i video.mp4 -ss 0 -t 5 -vcodec copy -acodec copy clip.mp4

    # Get media file info
    ffmpeg -i video.avi

    # Turn X images to a video sequence
    ffmpeg -f image2 -i image%d.jpg video.mpg

    # Turn a video to X images
    ffmpeg -i video.mpg image%d.jpg

    # Encode a video sequence for the iPpod/iPhone
    ffmpeg -i source_video.avi input -acodec aac -ab 128kb -vcodec mpeg4 -b 1200kb -mbd 2 -flags +4mv+trell -aic 2 -cmp 2 -subcmp 2 -s 320x180 -title X final_video.mp4

    # Extract 2 images for each second of the video starting at 30-seconds and ending 40-seconds
    ffmpeg -i video.mp4 -r 2 -ss 00:00:30 -t 00:00:10 img%d.jpg

    # Extracting sound from a video, and save it as Mp3
    ffmpeg -i source_video.avi -vn -ar 44100 -ac 2 -ab 192 -f mp3 sound.mp3

    # Convert a wav file to Mp3
    ffmpeg -i son_origine.avi -vn -ar 44100 -ac 2 -ab 192 -f mp3 son_final.mp3

    # Crop an audio file
    #
    # "`-acodec copy` is to keep the original sound, `-ss 00:00:25` is to tell where
    # to start cropping and `-t 00:02:00` is the length of the cropped output file.
    ffmpeg -i input.mp3 -acodec copy -ss 00:00:25 -t 00:02:00 output.wav

    # Crop a video file
    #
    # The only change in this command is that you need to define the video encoder
    # when cropping video files, the usual option is "-vcodec copy" to keep
    # the original video.
    ffmpeg -i input.avi -vcodec copy -acodec copy -ss 00:00:25 -t 00:02:00 output.flv

    # Convert .avi video to .mpg
    ffmpeg -i video_origine.avi video_finale.mpg

    # Convert .mpg to .avi
    ffmpeg -i video_origine.mpg video_finale.avi

    # To convert the entire video to GIF, use the following command:
    ffmpeg -i small.mp4 small.gif

    # To convert a gif to video:
    ffmpeg -f gif -i animation.gif animation.mp4

    # To convert just a portion of a video clip to GIF, use the following command:
    ffmpeg -t 3 -ss 00:00:02 -i small.webm small-clip.gif

    # Mix a video with a sound file
    ffmpeg -i son.wav -i video_origine.avi video_finale.mpg

    # Convert .avi to .flv
    ffmpeg -i video_origine.avi -ab 56 -ar 44100 -b 200 -r 15 -s 320x240 -f flv video_finale.flv

    # Convert .avi to dv
    ffmpeg -i video_origine.avi -s pal -r pal -aspect 4:3 -ar 48000 -ac 2 video_finale.dv
    # Or:
    ffmpeg -i video_origine.avi -target pal-dv video_finale.dv

    # Convert .avi to mpeg for dvd players
    ffmpeg -i source_video.avi -target pal-dvd -ps 2000000000 -aspect 16:9 finale_video.mpeg

    # Compress .avi to divx
    ffmpeg -i video_origine.avi -s 320x240 -vcodec msmpeg4v2 video_finale.avi

    # Compress Ogg Theora to Mpeg dvd
    ffmpeg -i film_sortie_cinelerra.ogm -s 720x576 -vcodec mpeg2video -acodec mp3 film_termin.mpg

    # Compress .avi to SVCD mpeg2 (NTSC format)
    ffmpeg -i video_origine.avi -target ntsc-svcd video_finale.mpg

    # Compress .avi to SVCD mpeg2 (PAL format)
    ffmpeg -i video_origine.avi -target pal-svcd video_finale.mpg

    # Compress .avi to VCD mpeg2 (NTSC format)
    ffmpeg -i video_origine.avi -target ntsc-vcd video_finale.mpg

    # Compress .avi to VCD mpeg2 (PAL format)
    ffmpeg -i video_origine.avi -target pal-vcd video_finale.mpg

    # Multi-pass encoding with ffmpeg
    ffmpeg -i fichierentree -pass 2 -passlogfile ffmpeg2pass fichiersortie-2

    # Convert to wmv
    ffmpeg -i winter_clip.mov -vcodec wmv2 -b 12000k -ar 44100 -ab 192k -ac 2 -y -s 720x406 output.wmv

    # Write metadata `title` to mp4 clip (without re-encoding)
    ffmpeg -loglevel quiet -v 0 -i clip.mp4 -metadata title="jon test clip" -acodec copy -vcodec copy -copyts cliptitle.mp4

    # Gather stream information and print it in JSON format
    ffprobe -loglevel quiet -show_format -show_streams -i clip.mp4 -print_format json

    # Transcode to WebM with ffmpeg (http://paulrouget.com/e/funwithwebm/)
    ffmpeg -i girltalk.mp4 -f webm -vcodec libvpx -acodec libvorbis -aq 90 -ac 2 girltalk.webm

    # Convert to ipad
    ffmpeg -y -i input.avi -acodec aac -ar 48000 -ab 128k -ac 2 -s 1024x768 -vcodec libx264 -b 1200k -flags +loop+mv4 -cmp 256 -partitions +parti4x4+partp8x8+partb8x8 -subq 7 -trellis 1 -refs 5 -coder 0 -me_range 16 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -bt 1200k -maxrate 1200k -bufsize 1200k -rc_eq 'blurCplx^(1-qComp)' -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -level 30 -aspect 16:9 -r 30 -g 90 -async 2 output.mp4

    # Create a single image video with audio
    ffmpeg -loop 1 -i image.png -i sound.mp3 -shortest video.mp4

    # Find all .flv files in a dir, grab the first frame and make a jpg.
    for f in *.flv; do
    ffmpeg -y -i "$f" -f image2 -ss 10 -vframes 1 -an "${f%.flv}.jpg";
    done

    # Convert .wma files to .ogg with ffmpeg
    find -name '*wma' -exec ffmpeg -i {} -acodec vorbis -ab 128k {}.ogg \;

    # Synchronize audio with video by adding a 0.5 second (1/2 second) delay to the audio stream without re-encoding the file (https://alien.slackbook.org/blog/fixing-audio-sync-with-ffmpeg/):
    ffmpeg -i out_of_sync_file.mp4 -itsoffset 0.5 -i out_of_sync_file.mp4 -map 0:0 -map 1:1 -acodec copy -vcodec copy synced_file.mp4

    # Removing syncronization problems between audio and video
    #
    # This assumes that there is a 10.2 sec delay between the video and the
    # audio (delayed). To extract the original video into a audio and video
    # composites look at the command on extracting audio and video from a movie.
    ffmpeg -i source_audio.mp3 -itsoffset 00:00:10.2 -i source_video.m2v target_video.flv

    # Cut Out A Piece Of Film From A File. Choose an arbitrary length and starting time.
    ffmpeg -vcodec copy -acodec copy -i orginalfile -ss 00:01:30 -t 0:0:20 newfile

    # Extract Audio And Video From A Movie
    # Rips the audio and video stream of a movie. The two streams are stored separately.
    ffmpeg -i source_movie.flv -vcodec mpeg2video target_video.m2v -acodec copy target_audio.mp3

    # Rotate a video file 90 clockwise (http://stackoverflow.com/a/9570992):
    ffmpeg -i in.mov -vf "transpose=1" out.mov

    ##
    # ffmpeg, libx264 and presets (for web encoding)
    #
    # Here the source can be either mp4 or some other file format as FLV for instance
    # -- http://www.stoimen.com/blog/2010/10/26/ffmpeg-libx264-and-presets/
    ##
    ffmpeg -i source.mp4 -acodec libfaac -ab 128k -ac 2 -vcodec libx264 -vpre normal -threads 0 -crf 22 output.mp4

    ###
    # Convert Adobe Flash FLV Files to MP4 Files
    # http://www.guguncube.com/1103/ffmpeg-convert-adobe-flash-flv-files-to-mp4-files
    ###

    # Simple Conversion of FLV to MP4 using FFMPEG
    find . -regextype posix-extended -iregex ".*.avi|.*.flv" -type f | while IFS= read -r file;
    do
    fn="${file}";
    echo "###$fn###";
    dest="${fn%.*}.mp4";
    echo "###$dest###";
    if [ -f "$dest" ];then
    rm "$dest";
    fi;
    ffmpeg -nostdin -v 0 -i "$fn" -acodec copy -vcodec copy -copyts "$dest";
    done;

    # Convert FLV to MP4 through container copy
    # NOTE: only works if video content is H264 and audio AAC or MP3
    ffmpeg -i input.flv -acodec copy -vcodec copy -copyts output.mp4

    # Transcode FLV to MP4
    ffmpeg -i input.flv -copyts output.mp4

    # Re-encode Audio
    ffmpeg -i input.ext -vcodec copy -acodec libfaac -ab 128k -copyts output.mp4

    # Copy Directory FLV TO MP4 (Version 1)
    for f in *.flv; do
    fn="${f%.*}";
    ffmpeg -i "$f" -acodec copy -vcodec copy -copyts "$fn.mp4";
    done;

    # Copy Directory FLV TO MP4 (Version 2)
    for f in *.flv; do a=$(echo $f|sed -e 's/.flv/.mp4/ig');
    echo $a;
    ffmpeg -i "$f" -acodec copy -vcodec copy -copyts "$a";
    done;

    # It you want particular prefixes for the Android, something like:
    ffmpeg -i source-video.avi -s 480x320 -vcodec mpeg4 -acodec libfaac -ac 1 -ar 16000 -r 13 -ab 32000 -aspect 3:2 output-video.G1.mp4
    # My ffmpeg didn't want -aspect 3:2 and you can omit it.

    # Convert FLV files in tree to mp4 -- preserve already existing files and MP4
    find . -name "*.flv" -type f -exec ffmpeg -n -i '{}' -acodec copy -vcodec copy -copyts '{}.mp4' ;

    # convert directory tree from AVI, FLV to mp4
    find . -regextype posix-extended -iregex ".*.avi|.*.flv" -type f -exec ffmpeg -n -i '{}' '{}.mp4' ;
    # -regextype posix-extended -iregex ".*.txt|.*.mp4"
    for f in *; do fn="${f%.*}";echo "fn=$fn,f=$f"; done;
    for f in *.flv.mp4; do fn="${f%.*}";echo "$fn,f=$f"; done;

    # Remove FLV.MP4 double extensions
    for f in *.flv.mp4; do fn="${f%.*}";fn="${fn%.*}";mv "$f" "$fn.mp4"; done;

    # Converts flac files to mp3 (shell)
    for FILE in *.flac;
    do
    ffmpeg -i "$FILE" -ab 320k "${FILE%.*}.mp3";
    done

    ##
    # How to encode video in H264 format
    #
    # We have successfully been using ffmpeg/libx264 with two pass encoding using
    # the following commands
    #
    # http://h264.code-shop.com/trac/wiki/Encoding#HowtoencodevideoinH264format
    ##

    ## Ffmpeg/x264 (profile High, level 3.0) (latest versions of x264)
    infile="video.avi"
    tmpfile="video_tmp.mp4"
    outfile="video.mp4"
    options="-vcodec libx264 -b 512k -flags +loop+mv4 -cmp 256
    -partitions +parti4x4+parti8x8+partp4x4+partp8x8+partb8x8
    -me_method hex -subq 7 -trellis 1 -refs 5 -bf 3
    -flags2 +bpyramid+wpred+mixed_refs+dct8x8 -coder 1 -me_range 16
    -g 250 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -qmin 10
    -qmax 51 -qdiff 4"

    ffmpeg -y -i "$infile" -an -pass 1 -threads 0 $options "$tmpfile"
    ffmpeg -y -i "$infile" -acodec libfaac -ar 44100 -ab 96k -pass 2 -threads 0 $options "$tmpfile"
    qtfaststart "$tmpfile" "$outfile"

    ## Ffmpeg/x264 (profile High, level 3.0) (older versions)
    options="-vcodec libx264 -b 512k -bf 3 -subq 6 -cmp 256 -refs 5 -qmin 10
    -qmax 51 -qdiff 4 -coder 1 -loop 1 -me hex -me_range 16 -trellis 1
    -flags +mv4 -flags2 +bpyramid+wpred+mixed_refs+brdo+8x8dct
    -partitions parti4x4+parti8x8+partp4x4+partp8x8+partb8x8 -g 250
    -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71"

    ## Ffmpeg/x264 (profile Baseline, level 3.0) (iPhone)
    options="-vcodec libx264 -b 512k -flags +loop+mv4 -cmp 256
    -partitions +parti4x4+parti8x8+partp4x4+partp8x8+partb8x8
    -me_method hex -subq 7 -trellis 1 -refs 5 -bf 0
    -flags2 +mixed_refs -coder 0 -me_range 16
    -g 250 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -qmin 10
    -qmax 51 -qdiff 4"

    ##
    # Windows BAT script
    #
    # Encode XVID H.263 to H.264 video, copy source audio stream.
    ##

    echo OFF
    cls

    for %%f in (*.avi) do (
    echo "%%~nf"

    ffmpeg -i "%%~nf.avi" -vcodec libx264 -acodec copy -copyts -threads auto -y "%%~nf.mp4"
    )

    pause "Done."

    ##
    # Encoding for web
    #
    # In the following replace x in -pass x with 1 and 2 for the first and second
    # pass/run respectively. We assume the original movie in.suffix has an aspect
    # ratio of 16/9 and a frame rate of 25 frames per second.
    #
    # http://flowplayer.org/docs/encoding.html
    ##

    # WEBM encoding sample
    ffmpeg -y -i in.suffix -filter:v scale=640:360
    -vpre libvpx-720p -b:v 500k -r:v 25/1 -force_fps
    -c:a libvorbis -b:a 80k -pass 1 out.webm

    # MP4 encoding sample
    ffmpeg -y -i in.suffix -filter:v scale=640:360 -pix_fmt yuv420p
    -c:v libx264 -preset:v slow -profile:v baseline
    -x264opts level=3.0:vbv-maxrate=10000:vbv-bufsize=10000:ref=1
    -b:v 700k -r:v 25/1 -force_fps -movflags +faststart
    -c:a libfaac -b:a 80k -pass 1 out.mp4

    ##
    # How to Make MP4 Progressive with qtfaststart (python wrapper for `qt-faststart`)
    #
    # Quicktime atom positioning in Python for fast streaming
    # https://github.com/danielgtaylor/qtfaststart
    ##