Ahoy Mateys! Finally my PC is back from the shop and I’m ready to begin re-encoding my “loot” to a smaller footprint for Plex. I’ve decided on HEVC (10-Bit)/AAC encoding and want to use ffmpeg but I know ZERO about the command line so I’m seeking a good front-end that uses hardware acceleration (AMD GPU), does batch processing, allows video dimension & aspect control and audio normalization. I’ve tried several and it appears only ffBatch comes close & provides good encode times. I would appreciate any input if anyone knows of any other free, good ffmpeg front-ends with the features I listed. Thanks!

    • SmoothLiquidation@lemmy.world
      link
      fedilink
      English
      arrow-up
      5
      ·
      11 months ago

      Tdarr is great if you are comfortable setting up a Docker environment. It is a great way to reprocess your whole library.

      A good GUI alternative is Handbrake. It uses a different library than ffmpeg but can do the same stuff. One thing about Handbrake to remember is that it is centered around video encoding. So while ffmpeg can process your audio streams without touching the video stream, Handbrake will reencode video every time.

      • db2@sopuli.xyz
        link
        fedilink
        English
        arrow-up
        4
        ·
        11 months ago

        It uses a different library than ffmpeg

        From here:

        HandBrake leverages tools such as FFmpeg, x264, and x265 to create new MP4, MKV, or WebM video files

        I think you might be confused because ffmpeg is the project and also the name of the executable, the library is libavcodec but it’s still ffmpeg. See here.

    • Faceman🇦🇺@discuss.tchncs.de
      link
      fedilink
      English
      arrow-up
      1
      ·
      11 months ago

      Another Tdarr alternative with (i think) a more flexible and automatable setup is FileFlows (the free version is all you need) you can build node based rulesets and apply those rules to different libraries.

  • ∟⊔⊤∦∣≶@lemmy.nz
    link
    fedilink
    English
    arrow-up
    1
    ·
    edit-2
    11 months ago

    I wrote a bash script for this, but I’m not sure of the correct settings so I haven’t used it to re-encode my whole library yet.

    Here’s my script in case anyone has any tips:

    spoiler

    #!/bin/sh

    shopt -s globstar

    for FILE in */

    {

    if [[ -d $FILE ]]; then
    
    	continue
    
    fi
    
    match="*-re.mp4"
    if [[ $FILE == $match ]]; then
    	echo already encoded, skipping $FILE
    	continue
    fi
    match="*-ex.mp4"
    if [[ $FILE == $match ]]; then
    	echo already excluded, skipping $FILE
    	continue
    fi
    
    if [[ $(du "${FILE}" | awk '{print $1}') -lt 10000 ]]; then		
    	#echo $(date),$(pwd)/,$FILE,toosmall >> errors.csv
    	echo $(date),$(pwd)/,$FILE, 0,0,0,0, original too small >> encoding.csv
    	continue
    fi
    if [[ $(mediainfo "${FILE}" | grep -c -e'Audio #') -gt 1 ]]; then
    	#echo $(date),$(pwd)/,$FILE,skip-audio >> errors.csv
    	echo $(date),$(pwd)/,$FILE, 0,0,0,0, multiple audio tracks >> encoding.csv
    	continue
    fi
    if [[ $(mediainfo "${FILE}" | grep -c -e'Text #') -gt 1 ]]; then
    	#echo $(date),$(pwd)/,$FILE,skip-subs >> errors.csv
    	echo $(date),$(pwd)/,$FILE, 0,0,0,0, contains subtitles >> encoding.csv
    	continue
    fi
    
    
    FULLM=${FILE%.*}
    REN="$FULLM-re.mp4"
    echo writing $REN
    
    #ffmpeg -y -i "${FILE}" -vcodec libx264 -crf 23 "${REN}" 
    #ffmpeg -y -i "${FILE}" -vcodec h264_nvenc -crf 23 "${REN}" 
    ffmpeg -y -i "${FILE}" -vcodec libx265 -crf 23 "${REN}" 
    
    ORIGSIZE=$(du "${FILE}" | awk '{print $1}')
    NEWSIZE=$(du "${REN}" | awk '{print $1}')
    ORIGBITRATE=$(mediainfo "${FILE}" | grep Overall | sed 's/[^0-9]*//g')
    NEWBITRATE=$(mediainfo "${REN}" | grep Overall | sed 's/[^0-9]*//g')
    
    echo $FILE vs $REN
    echo $ORIGBITRATE vs $NEWBITRATE
    
    #if [[ $NEWBITRATE -gt $ORIGBITRATE ]]; then
    	#echo new bitrate is too big, renaming $FILE to $FULLM-ex.mp4
    	#echo $(date),$(pwd)/,$FILE, $ORIGBITRATE, $NEWBITRATE, $ORIGSIZE, $NEWSIZE, bitrate increased >> encoding.csv
    	#mv "${FILE}" "${FULLM}"-ex.mp4
    	#rm -f "${REN}"
    	#continue
    #fi
    
    if [[ $ORIGSIZE -lt $NEWSIZE ]]; then
    	#echo $(date),$(pwd)/,$FILE,sizeToSmall: $ORIGSIZE vs $NEWSIZE >> errors.csv
    	echo $(date),$(pwd)/,$FILE, $ORIGBITRATE, $NEWBITRATE, $ORIGSIZE, $NEWSIZE, filesize increased >> encoding.csv
    	echo deleting "${REN}"
    	rm -f "${REN}"
    	mv "${FILE}" "${FULLM}"-ex.mp4
    else
    	echo $(date),$(pwd)/,$FILE, $ORIGBITRATE, $NEWBITRATE, $ORIGSIZE, $NEWSIZE, ENCODED >> encoding.csv
    	rm -f "${FILE}"
    fi
    

    }